diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspect.java index 7fe1638fef..402beb0181 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspect.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspect.java @@ -144,10 +144,23 @@ public class ClassifiedAspect extends BaseBehaviourBean implements NodeServicePo Serializable downgradeDate = nodeService.getProperty(nodeRef, PROP_DOWNGRADE_DATE); Serializable downgradeEvent = nodeService.getProperty(nodeRef, PROP_DOWNGRADE_EVENT); Serializable downgradeInstructions = nodeService.getProperty(nodeRef, PROP_DOWNGRADE_INSTRUCTIONS); - if (downgradeInstructions == null && (downgradeDate != null || downgradeEvent != null)) + if (isEmpty(downgradeInstructions) && !(isEmpty(downgradeDate) && isEmpty(downgradeEvent))) { throw new MissingDowngradeInstructions(nodeRef); } } } + + /** + * Check if a property is null or the empty string. Note that this is the same as + * {@link org.apache.commons.lang.StringUtils#isEmpty(String)}, except that it takes a Serializable rather than a + * String. This avoids awkward casting exceptions when working with properties. + * + * @param value The (probably String) value to check. + * @return true if the supplied value is null or the empty string. + */ + private boolean isEmpty(Serializable value) + { + return (value == null || value.equals("")); + } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspectUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspectUnitTest.java index e407e8682c..86ab1bd54c 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspectUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/clf/aspect/ClassifiedAspectUnitTest.java @@ -98,4 +98,16 @@ public class ClassifiedAspectUnitTest implements ClassifiedContentModel classifiedAspect.checkConsistencyOfProperties(NODE_REF); } + + /** Check that blank instructions are treated in the same way as null instructions. */ + @Test(expected = MissingDowngradeInstructions.class) + public void testCheckConsistencyOfProperties_emptyStringsSupplied() + { + when(mockNodeService.hasAspect(NODE_REF, ASPECT_CLASSIFIED)).thenReturn(true); + when(mockNodeService.getProperty(NODE_REF, PROP_DOWNGRADE_DATE)).thenReturn(""); + when(mockNodeService.getProperty(NODE_REF, PROP_DOWNGRADE_EVENT)).thenReturn("Event"); + when(mockNodeService.getProperty(NODE_REF, PROP_DOWNGRADE_INSTRUCTIONS)).thenReturn(""); + + classifiedAspect.checkConsistencyOfProperties(NODE_REF); + } }