diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationReason.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationReason.java index b95b7cf683..d704eb246d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationReason.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationReason.java @@ -16,78 +16,77 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ + package org.alfresco.module.org_alfresco_module_rm.classification; -import org.springframework.extensions.surf.util.I18NUtil; - import java.io.Serializable; +import org.springframework.extensions.surf.util.I18NUtil; + /** * This class is a POJO data type for a classification reason. * * @author Tom Page * @since 3.0 */ -public final class ClassificationReason implements Serializable { - private static final long serialVersionUID = 4876939094239038838L; - private final String id; - private final String displayLabelKey; +public final class ClassificationReason implements Serializable +{ + private static final long serialVersionUID = 4876939094239038838L; + private final String id; + private final String displayLabelKey; - /** - * Constructor to create a classification reason. - * - * @param id - * The unique identifier that represents this classification - * reason. - * @param displayLabelKey - * The I18N key for the display label for the reason. - */ - public ClassificationReason(final String id, final String displayLabelKey) { - if (id == null || id.trim().equals("")) { - throw new IllegalArgumentException("Illegal id: '" + id + "'"); - } - this.id = id; - this.displayLabelKey = displayLabelKey; - } + /** + * Constructor to create a classification reason. + * + * @param id The unique identifier that represents this classification reason. + * @param displayLabelKey The I18N key for the display label for the reason. + */ + public ClassificationReason(final String id, final String displayLabelKey) + { + if (id == null || id.trim().equals("")) { throw new IllegalArgumentException("Illegal id: '" + id + "'"); } + this.id = id; + this.displayLabelKey = displayLabelKey; + } - /** - * Returns the unique identifier that represents this classification reason. - */ - public String getId() { - return this.id; - } + /** + * Returns the unique identifier that represents this classification reason. + */ + public String getId() + { + return this.id; + } - /** - * Returns the localised (current locale) display label for this - * classification reason. - */ - public String getDisplayLabel() { - return I18NUtil.getMessage(displayLabelKey); - } + /** + * Returns the localised (current locale) display label for this classification reason. + */ + public String getDisplayLabel() + { + return I18NUtil.getMessage(displayLabelKey); + } - @Override - public String toString() { - StringBuilder msg = new StringBuilder(); - msg.append(ClassificationReason.class.getSimpleName()).append(":") - .append(id); + @Override + public String toString() + { + StringBuilder msg = new StringBuilder(); + msg.append(ClassificationReason.class.getSimpleName()).append(":").append(id); - return msg.toString(); - } + return msg.toString(); + } - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + @Override + public boolean equals(Object o) + { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; - ClassificationReason that = (ClassificationReason) o; + ClassificationReason that = (ClassificationReason) o; - return this.id.equals(that.id); - } + return this.id.equals(that.id); + } - @Override - public int hashCode() { - return id.hashCode(); - } + @Override + public int hashCode() + { + return id.hashCode(); + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAO.java similarity index 93% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAO.java index a658bdb45c..13be2a8f4b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/Configuration.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAO.java @@ -38,12 +38,12 @@ import org.json.JSONTokener; * @author Neil Mc Erlean * @since 3.0 */ -class Configuration +class ClassificationServiceDAO { public final String levelConfigLocation; public final String reasonConfigLocation; - public Configuration(String levelConfigLocation, String reasonConfigLocation) + public ClassificationServiceDAO(String levelConfigLocation, String reasonConfigLocation) { this.levelConfigLocation = levelConfigLocation; this.reasonConfigLocation = reasonConfigLocation; @@ -88,7 +88,8 @@ class Configuration * * @return the configured classification reasons in descending order, or an empty list if there are none. */ - public List getConfiguredReasons() { + public List getConfiguredReasons() + { List result; try (final InputStream in = this.getClass().getResourceAsStream(reasonConfigLocation)) { @@ -114,5 +115,5 @@ class Configuration throw new MalformedConfiguration("Could not read classification reason configuration", e); } return result; - } + } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java index 231cfab0aa..d0b8094163 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImpl.java @@ -55,22 +55,22 @@ public class ClassificationServiceImpl extends ServiceBaseImpl /** The classification reasons currently configured in this server. */ private List configuredReasons; - private final Configuration config; + private final ClassificationServiceDAO classificationServiceDao; public ClassificationServiceImpl() { - this.config = new Configuration(DEFAULT_LEVELS_FILE, DEFAULT_REASONS_FILE); + this.classificationServiceDao = new ClassificationServiceDAO(DEFAULT_LEVELS_FILE, DEFAULT_REASONS_FILE); } /** * Package protected constructor, primarily for unit testing purposes. * - * @param config The object from which configuration options will be read. + * @param classificationServiceDao The object from which configuration options will be read. * @param logger The class logger (note - this will be set statically). */ - ClassificationServiceImpl(Configuration config, Logger logger) + ClassificationServiceImpl(ClassificationServiceDAO classificationServiceDao, Logger logger) { - this.config = config; + this.classificationServiceDao = classificationServiceDao; ClassificationServiceImpl.logger = logger; } @@ -89,7 +89,7 @@ public class ClassificationServiceImpl extends ServiceBaseImpl { throw new MissingConfiguration("Classification level configuration is missing."); } - else if ( !configurationLevels.equals(allPersistedLevels)) + else if (!configurationLevels.equals(allPersistedLevels)) { attributeService.setAttribute((Serializable) configurationLevels, LEVELS_KEY); this.configuredLevels = configurationLevels; @@ -100,7 +100,8 @@ public class ClassificationServiceImpl extends ServiceBaseImpl } } - void initConfiguredClassificationReasons() { + void initConfiguredClassificationReasons() + { final List persistedReasons = getPersistedReasons(); final List classpathReasons = getConfigurationReasons(); @@ -121,8 +122,8 @@ public class ClassificationServiceImpl extends ServiceBaseImpl { if (isEmpty(classpathReasons) || !classpathReasons.equals(persistedReasons)) { - logger.warn("Classification reasons configured in classpath do not match those stored in Alfresco." + - "Alfresco will use the unchanged values stored in the database."); + logger.warn("Classification reasons configured in classpath do not match those stored in Alfresco." + + "Alfresco will use the unchanged values stored in the database."); // RM-2073 says that we should log a warning and proceed normally. } this.configuredReasons = persistedReasons; @@ -143,7 +144,8 @@ public class ClassificationServiceImpl extends ServiceBaseImpl * Gets the list (in descending order) of classification levels - as persisted in the system. * @return the list of classification levels if they have been persisted, else {@code null}. */ - List getPersistedLevels() { + List getPersistedLevels() + { return authenticationUtil.runAsSystem(new AuthenticationUtil.RunAsWork>() { @Override @@ -158,14 +160,15 @@ public class ClassificationServiceImpl extends ServiceBaseImpl /** Gets the list (in descending order) of classification levels - as defined in the system configuration. */ List getConfigurationLevels() { - return config.getConfiguredLevels(); + return classificationServiceDao.getConfiguredLevels(); } /** * Gets the list of classification reasons as persisted in the system. * @return the list of classification reasons if they have been persisted, else {@code null}. */ - List getPersistedReasons() { + List getPersistedReasons() + { return authenticationUtil.runAsSystem(new AuthenticationUtil.RunAsWork>() { @Override @@ -180,7 +183,7 @@ public class ClassificationServiceImpl extends ServiceBaseImpl /** Gets the list of classification reasons - as defined and ordered in the system configuration. */ List getConfigurationReasons() { - return config.getConfiguredReasons(); + return classificationServiceDao.getConfiguredReasons(); } @Override diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ConfigurationUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAOUnitTest.java similarity index 70% rename from rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ConfigurationUnitTest.java rename to rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAOUnitTest.java index 4fb055b08a..1fea5ba56a 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ConfigurationUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceDAOUnitTest.java @@ -29,12 +29,12 @@ import org.alfresco.module.org_alfresco_module_rm.classification.ClassificationS import org.junit.Test; /** - * Unit tests for {@link Configuration}. + * Unit tests for {@link ClassificationServiceDAO}. * * @author Neil Mc Erlean * @since 3.0 */ -public class ConfigurationUnitTest +public class ClassificationServiceDAOUnitTest { private static final List DEFAULT_CLASSIFICATION_LEVELS = asLevelList("TopSecret", "TS", "Secret", "S", @@ -43,29 +43,29 @@ public class ConfigurationUnitTest @Test public void getConfiguredLevels_readingDefaultConfigurationShouldWork() { - Configuration c = new Configuration(ClassificationServiceImpl.DEFAULT_LEVELS_FILE, ClassificationServiceImpl.DEFAULT_REASONS_FILE); + ClassificationServiceDAO c = new ClassificationServiceDAO(ClassificationServiceImpl.DEFAULT_LEVELS_FILE, ClassificationServiceImpl.DEFAULT_REASONS_FILE); List config = c.getConfiguredLevels(); assertEquals(DEFAULT_CLASSIFICATION_LEVELS, config); } @Test public void getConfiguredLevels_readingMissingConfigurationShouldProduceEmptyConfig() throws Exception { - Configuration c = new Configuration("/no/such/resource", "/no/such/resource"); + ClassificationServiceDAO c = new ClassificationServiceDAO("/no/such/resource", "/no/such/resource"); assertTrue(c.getConfiguredLevels().isEmpty()); } @Test (expected = MalformedConfiguration.class) public void getConfiguredLevels_readingMalformedConfigurationShouldFail() { - Configuration c = new Configuration( - "/alfresco/classification/rm-classification-levels-malformed.json", - "/alfresco/classification/rm-classification-levels-malformed.json"); - c.getConfiguredLevels(); + ClassificationServiceDAO c = new ClassificationServiceDAO( + "/alfresco/classification/rm-classification-levels-malformed.json", + "/alfresco/classification/rm-classification-levels-malformed.json"); + c.getConfiguredLevels(); } @Test public void getConfiguredReasons_readingDefaultConfigurationShouldWork() { - Configuration c = new Configuration(ClassificationServiceImpl.DEFAULT_LEVELS_FILE, + ClassificationServiceDAO c = new ClassificationServiceDAO(ClassificationServiceImpl.DEFAULT_LEVELS_FILE, ClassificationServiceImpl.DEFAULT_REASONS_FILE); List config = c.getConfiguredReasons(); assertFalse(config.isEmpty()); @@ -73,16 +73,16 @@ public class ConfigurationUnitTest @Test public void getConfiguredReasons_readingMissingConfigurationShouldProduceEmptyConfig() throws Exception { - Configuration c = new Configuration("/no/such/resource", "/no/such/resource"); + ClassificationServiceDAO c = new ClassificationServiceDAO("/no/such/resource", "/no/such/resource"); assertTrue(c.getConfiguredReasons().isEmpty()); } @Test (expected = MalformedConfiguration.class) public void getConfiguredReasons_readingMalformedConfigurationShouldFail() { - Configuration c = new Configuration( - "/alfresco/classification/rm-classification-levels-malformed.json", - "/alfresco/classification/rm-classification-levels-malformed.json"); - c.getConfiguredReasons(); + ClassificationServiceDAO c = new ClassificationServiceDAO( + "/alfresco/classification/rm-classification-levels-malformed.json", + "/alfresco/classification/rm-classification-levels-malformed.json"); + c.getConfiguredReasons(); } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java index 90bc3e20e5..41bb1b3e99 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationServiceImplUnitTest.java @@ -87,25 +87,25 @@ public class ClassificationServiceImplUnitTest private ClassificationServiceImpl classificationService; - private AttributeService mockedAttributeService = mock(AttributeService.class); - private AuthenticationUtil mockedAuthenticationUtil; - private Configuration mockConfig = mock(Configuration.class); + private AttributeService mockedAttributeService = mock(AttributeService.class); + private AuthenticationUtil mockedAuthenticationUtil; + private ClassificationServiceDAO mockClassificationServiceDAO = mock(ClassificationServiceDAO.class); /** Using a mock logger in the class so that we can verify some of the logging requirements. */ - private Logger mockLogger = mock(Logger.class); + private Logger mockLogger = mock(Logger.class); @Before public void setUp() { - reset(mockConfig, mockedAttributeService, mockLogger); + reset(mockClassificationServiceDAO, mockedAttributeService, mockLogger); mockedAuthenticationUtil = MockAuthenticationUtilHelper.create(); - classificationService = new ClassificationServiceImpl(mockConfig, mockLogger); + classificationService = new ClassificationServiceImpl(mockClassificationServiceDAO, mockLogger); classificationService.setAttributeService(mockedAttributeService); classificationService.setAuthenticationUtil(mockedAuthenticationUtil); } @Test public void defaultLevelsConfigurationVanillaSystem() { - when(mockConfig.getConfiguredLevels()).thenReturn(DEFAULT_CLASSIFICATION_LEVELS); + when(mockClassificationServiceDAO.getConfiguredLevels()).thenReturn(DEFAULT_CLASSIFICATION_LEVELS); when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn(null); classificationService.initConfiguredClassificationLevels(); @@ -116,7 +116,7 @@ public class ClassificationServiceImplUnitTest @Test public void alternativeLevelsConfigurationPreviouslyStartedSystem() { - when(mockConfig.getConfiguredLevels()).thenReturn(ALT_CLASSIFICATION_LEVELS); + when(mockClassificationServiceDAO.getConfiguredLevels()).thenReturn(ALT_CLASSIFICATION_LEVELS); when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())) .thenReturn((Serializable) DEFAULT_CLASSIFICATION_LEVELS); @@ -140,7 +140,7 @@ public class ClassificationServiceImplUnitTest when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn(null); // We'll use a small set of placeholder classification reasons. - when(mockConfig.getConfiguredReasons()).thenReturn(PLACEHOLDER_CLASSIFICATION_REASONS); + when(mockClassificationServiceDAO.getConfiguredReasons()).thenReturn(PLACEHOLDER_CLASSIFICATION_REASONS); classificationService.initConfiguredClassificationReasons(); @@ -152,7 +152,7 @@ public class ClassificationServiceImplUnitTest { // The classification reasons stored are the same values that are found on the classpath. when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn((Serializable)PLACEHOLDER_CLASSIFICATION_REASONS); - when(mockConfig.getConfiguredReasons()).thenReturn(PLACEHOLDER_CLASSIFICATION_REASONS); + when(mockClassificationServiceDAO.getConfiguredReasons()).thenReturn(PLACEHOLDER_CLASSIFICATION_REASONS); classificationService.initConfiguredClassificationReasons(); @@ -169,23 +169,23 @@ public class ClassificationServiceImplUnitTest // The classification reasons stored are different from those found on the classpath. when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn( (Serializable) PLACEHOLDER_CLASSIFICATION_REASONS); - when(mockConfig.getConfiguredReasons()).thenReturn(ALTERNATIVE_CLASSIFICATION_REASONS); + when(mockClassificationServiceDAO.getConfiguredReasons()).thenReturn(ALTERNATIVE_CLASSIFICATION_REASONS); classificationService.initConfiguredClassificationReasons(); verify(mockLogger).warn("Classification reasons configured in classpath do not match those stored in Alfresco." + "Alfresco will use the unchanged values stored in the database."); - verify(mockedAttributeService, never()).setAttribute(any(Serializable.class), anyString(), anyString(), - anyString()); + verify(mockedAttributeService, never()).setAttribute(any(Serializable.class), + anyString(), anyString(), anyString()); } - @Test(expected=MissingConfiguration.class) + @Test(expected = MissingConfiguration.class) public void noReasonsFoundCausesException() { - when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())).thenReturn( - (Serializable) null); - when(mockConfig.getConfiguredReasons()).thenReturn(null); - + when(mockedAttributeService.getAttribute(anyString(), anyString(), anyString())) + .thenReturn((Serializable) null); + when(mockClassificationServiceDAO.getConfiguredReasons()).thenReturn(null); + classificationService.initConfiguredClassificationReasons(); } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationSuite.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationSuite.java index 5fbe1d2fec..64e7be1bc0 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationSuite.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/classification/ClassificationSuite.java @@ -29,7 +29,7 @@ import org.junit.runners.Suite; @Suite.SuiteClasses( { ClassificationServiceImplUnitTest.class, - ConfigurationUnitTest.class + ClassificationServiceDAOUnitTest.class }) public class ClassificationSuite {