diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 7abdc3e77a..2cadb9e1e3 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -1581,4 +1581,49 @@ + + + + + + + + + + org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService + + + + + + + + + + + + + + + + + + + + ${server.transaction.mode.default} + + + + + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index 9ceeb3a195..0203627fda 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -618,11 +618,13 @@ + + \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigService.java new file mode 100644 index 0000000000..1d5b759e45 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigService.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * 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.recordableversion; + +import java.util.List; + +import org.alfresco.module.org_alfresco_module_rm.script.slingshot.Version; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Recordable version config service interface + * + * @author Tuna Aksoy + * @since 2.3 + */ +public interface RecordableVersionConfigService +{ + /** + * Gets the recordable versions + * + * @param nodeRef The node reference for which the recordable versions should be retrieved + * @return The list of recordable versions + */ + List getVersions(NodeRef nodeRef); + + /** + * Sets the recordable version for the given node + * + * @param nodeRef The node reference for which the recorable version should be set + * @param version The version to be set + */ + void setVersion(NodeRef nodeRef, String version); +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigServiceImpl.java new file mode 100644 index 0000000000..a73e03a06c --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/recordableversion/RecordableVersionConfigServiceImpl.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * 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.recordableversion; + +import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy.NONE; +import static org.alfresco.util.ParameterCheck.mandatory; +import static org.alfresco.util.ParameterCheck.mandatoryString; +import static org.apache.commons.lang.StringUtils.isNotBlank; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.module.org_alfresco_module_rm.script.slingshot.Version; +import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel; +import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; + +/** + * Recordable version config service + * + * @author Tuna Aksoy + * @since 2.3 + */ +public class RecordableVersionConfigServiceImpl implements RecordableVersionConfigService, RecordableVersionModel +{ + /** Node service */ + private NodeService nodeService; + + /** + * Gets the node service + * + * @return The node service + */ + protected NodeService getNodeService() + { + return this.nodeService; + } + + /** + * Sets the node service + * + * @param nodeService The node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService#getVersions(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public List getVersions(NodeRef nodeRef) + { + mandatory("nodeRef", nodeRef); + + RecordableVersionPolicy[] recordableVersionPolicies = RecordableVersionPolicy.values(); + List versions = new ArrayList(recordableVersionPolicies.length); + + for (RecordableVersionPolicy recordableVersionPolicy : recordableVersionPolicies) + { + String policy = recordableVersionPolicy.toString(); + boolean selected = isVersionPolicySelected(recordableVersionPolicy, nodeRef); + versions.add(new Version(policy, selected)); + } + + return versions; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService#setVersion(org.alfresco.service.cmr.repository.NodeRef, java.lang.String) + */ + @Override + public void setVersion(NodeRef nodeRef, String version) + { + mandatory("nodeRef", nodeRef); + mandatoryString("recordedVersion", version); + + RecordableVersionPolicy recordableVersionPolicy = RecordableVersionPolicy.valueOf(version); + getNodeService().setProperty(nodeRef, PROP_RECORDABLE_VERSION_POLICY, recordableVersionPolicy); + } + + /** + * Checks if the specified recordable version policy has been selected for the document + * + * @param recordableVersionPolicy The recordable version policy + * @param nodeRef Node reference of the document + * @return true if the specified recordable version policy has been selected for the document, false otherwise + */ + private boolean isVersionPolicySelected(RecordableVersionPolicy recordableVersionPolicy, NodeRef nodeRef) + { + boolean isVersionPolicySelected = false; + String policy = (String) getNodeService().getProperty(nodeRef, PROP_RECORDABLE_VERSION_POLICY); + if (isNotBlank(policy)) + { + if (RecordableVersionPolicy.valueOf(policy).equals(recordableVersionPolicy)) + { + isVersionPolicySelected = true; + } + } + else + { + if (recordableVersionPolicy.equals(NONE)) + { + isVersionPolicySelected = true; + } + } + return isVersionPolicySelected; + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigGet.java index fbb37d6f46..d3b8eb3ee0 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigGet.java @@ -18,16 +18,13 @@ */ package org.alfresco.module.org_alfresco_module_rm.script.slingshot; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService; import org.alfresco.module.org_alfresco_module_rm.script.AbstractRmWebScript; -import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel; -import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy; import org.alfresco.service.cmr.repository.NodeRef; -import org.apache.commons.lang.StringUtils; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -38,68 +35,41 @@ import org.springframework.extensions.webscripts.WebScriptRequest; * @author Tuna Aksoy * @since 2.3 */ -public class RecordedVersionConfigGet extends AbstractRmWebScript implements RecordableVersionModel +public class RecordedVersionConfigGet extends AbstractRmWebScript { + /** Recordable version config service */ + private RecordableVersionConfigService recordableVersionConfigService; + + /** + * Gets the recordable version config service + * + * @return The recordable version config service + */ + protected RecordableVersionConfigService getRecordableVersionConfigService() + { + return this.recordableVersionConfigService; + } + + /** + * Sets the recordable version config service + * + * @param recordableVersionConfigService The recordable version config service + */ + public void setRecordableVersionConfigService(RecordableVersionConfigService recordableVersionConfigService) + { + this.recordableVersionConfigService = recordableVersionConfigService; + } + /** * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache) */ @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - RecordableVersionPolicy[] recordableVersionPolicies = RecordableVersionPolicy.values(); - List> recordableVersions = new ArrayList>(recordableVersionPolicies.length); - NodeRef documentNodeRef = parseRequestForNodeRef(req); - - for (RecordableVersionPolicy recordableVersionPolicy : recordableVersionPolicies) - { - recordableVersions.add(buildRecordableVersionData(recordableVersionPolicy, documentNodeRef)); - } - Map model = new HashMap(1); + NodeRef nodeRef = parseRequestForNodeRef(req); + List recordableVersions = getRecordableVersionConfigService().getVersions(nodeRef); model.put("recordableVersions", recordableVersions); return model; } - - /** - * Builds the recordable version data - * - * @param recordableVersionPolicy The recordable version policy - * @param nodeRef Node reference of the document - * @return A map containing the information about recordable version policy and if this policy is selected for the document - */ - private Map buildRecordableVersionData(RecordableVersionPolicy recordableVersionPolicy, NodeRef nodeRef) - { - Map recordableVersionData = new HashMap(2); - recordableVersionData.put("policy", recordableVersionPolicy.toString()); - recordableVersionData.put("selected", isVersionPolicySelected(recordableVersionPolicy, nodeRef)); - return recordableVersionData; - } - - /** - * Checks if the specified recordable version policy has been selected for the document - * - * @param recordableVersionPolicy The recordable version policy - * @param nodeRef Node reference of the document - * @return true if the specified recordable version policy has been selected for the document, false otherwise - */ - private boolean isVersionPolicySelected(RecordableVersionPolicy recordableVersionPolicy, NodeRef nodeRef) - { - boolean isVersionPolicySelected = false; - String policy = (String) getNodeService().getProperty(nodeRef, PROP_RECORDABLE_VERSION_POLICY); - if (StringUtils.isNotBlank(policy)) - { - if (RecordableVersionPolicy.valueOf(policy).equals(recordableVersionPolicy)) - { - isVersionPolicySelected = true; - } - } - else - { - if (recordableVersionPolicy.equals(RecordableVersionPolicy.NONE)) - { - isVersionPolicySelected = true; - } - } - return isVersionPolicySelected; - } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigPost.java index 2cec963e2f..2d6a24a6cb 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigPost.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/RecordedVersionConfigPost.java @@ -24,9 +24,8 @@ import static org.alfresco.util.WebScriptUtils.getStringValueFromJSONObject; import java.util.HashMap; import java.util.Map; +import org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService; import org.alfresco.module.org_alfresco_module_rm.script.AbstractRmWebScript; -import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionModel; -import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy; import org.alfresco.service.cmr.repository.NodeRef; import org.json.JSONObject; import org.springframework.extensions.webscripts.Cache; @@ -39,11 +38,34 @@ import org.springframework.extensions.webscripts.WebScriptRequest; * @author Tuna Aksoy * @since 2.3 */ -public class RecordedVersionConfigPost extends AbstractRmWebScript implements RecordableVersionModel +public class RecordedVersionConfigPost extends AbstractRmWebScript { - // Constant for recorded version parameter + /** Constant for recorded version parameter */ public static final String RECORDED_VERSION = "recordedVersion"; + /** Recordable version config service */ + private RecordableVersionConfigService recordableVersionConfigService; + + /** + * Gets the recordable version config service + * + * @return The recordable version config service + */ + protected RecordableVersionConfigService getRecordableVersionConfigService() + { + return this.recordableVersionConfigService; + } + + /** + * Sets the recordable version config service + * + * @param recordableVersionConfigService The recordable version config service + */ + public void setRecordableVersionConfigService(RecordableVersionConfigService recordableVersionConfigService) + { + this.recordableVersionConfigService = recordableVersionConfigService; + } + /** * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache) */ @@ -51,8 +73,8 @@ public class RecordedVersionConfigPost extends AbstractRmWebScript implements Re protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { NodeRef nodeRef = parseRequestForNodeRef(req); - RecordableVersionPolicy recordableVersionPolicy = getRecordableVersionPolicy(req); - getNodeService().setProperty(nodeRef, PROP_RECORDABLE_VERSION_POLICY, recordableVersionPolicy); + String policy = getRecordableVersionPolicy(req); + getRecordableVersionConfigService().setVersion(nodeRef, policy); return new HashMap(1); } @@ -62,10 +84,9 @@ public class RecordedVersionConfigPost extends AbstractRmWebScript implements Re * @param The webscript request * @return The recordable version policy */ - private RecordableVersionPolicy getRecordableVersionPolicy(WebScriptRequest req) + private String getRecordableVersionPolicy(WebScriptRequest req) { JSONObject requestContent = getRequestContentAsJsonObject(req); - String recordedVersion = getStringValueFromJSONObject(requestContent, RECORDED_VERSION); - return RecordableVersionPolicy.valueOf(recordedVersion); + return getStringValueFromJSONObject(requestContent, RECORDED_VERSION); } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/Version.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/Version.java new file mode 100644 index 0000000000..0e6f430132 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/Version.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * 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.script.slingshot; + +import static org.alfresco.util.ParameterCheck.mandatory; +import static org.alfresco.util.ParameterCheck.mandatoryString; + +/** + * Recordable version class + * + * @author Tuna Aksoy + * @since 2.3 + */ +public class Version +{ + /** The version policy */ + private String policy; + + /** Is the version selected */ + private boolean selected; + + /** + * Constructor + * + * @param policy The version policy + * @param selected Is the version selected + */ + public Version(String policy, boolean selected) + { + mandatoryString("policy", policy); + mandatory("selected", selected); + + setPolicy(policy); + setSelected(selected); + } + + /** + * Gets the version policy + * + * @return The version policy + */ + public String getPolicy() + { + return this.policy; + } + + /** + * Sets the version policy + * + * @param policy The version policy + */ + private void setPolicy(String policy) + { + this.policy = policy; + } + + /** + * Is the version selected + * + * @return true if the version is selected, false otherwise + */ + public boolean isSelected() + { + return this.selected; + } + + /** + * Sets the version as selected + * + * @param selected true if the version should be selected, false otherwise + */ + private void setSelected(boolean selected) + { + this.selected = selected; + } +} diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/BaseRecordedVersionConfigTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/BaseRecordedVersionConfigTest.java index 80d0d1c6e0..16e4ab880a 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/BaseRecordedVersionConfigTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/BaseRecordedVersionConfigTest.java @@ -38,7 +38,7 @@ public abstract class BaseRecordedVersionConfigTest extends BaseWebScriptUnitTes /** Node ref for test document */ protected NodeRef testdoc; - /** setup web script parameters */ + /** Setup web script parameters */ protected Map buildParameters() { testdoc = generateCmContent("testdoc.txt"); diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigGetTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigGetTest.java index cc220ce540..60a404e8e1 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigGetTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigGetTest.java @@ -18,6 +18,9 @@ */ package org.alfresco.module.org_alfresco_module_rm.recorded.version.config; +import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy.ALL; +import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy.MAJOR_ONLY; +import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy.NONE; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.doReturn; import static org.testng.Assert.assertEquals; @@ -29,6 +32,7 @@ import java.util.List; import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.script.slingshot.RecordedVersionConfigGet; +import org.alfresco.module.org_alfresco_module_rm.script.slingshot.Version; import org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy; import org.json.JSONArray; import org.json.JSONObject; @@ -74,7 +78,16 @@ public class RecordedVersionConfigGetTest extends BaseRecordedVersionConfigTest // Test document should not have any recordable version policy set doReturn(null).when(mockedNodeService).getProperty(testdoc, PROP_RECORDABLE_VERSION_POLICY); - // execute web script + // Setup versions + List versions = Arrays.asList( + new Version(NONE.toString(), true), + new Version(MAJOR_ONLY.toString(), false), + new Version(ALL.toString(), false)); + + // Stub getVersions + doReturn(versions).when(mockedRecordableVersionConfigService).getVersions(testdoc); + + // Execute web script JSONObject json = executeJSONWebScript(parameters); // Do checks diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigPostTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigPostTest.java index 7c19af8ee5..969666ab75 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigPostTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/recorded/version/config/RecordedVersionConfigPostTest.java @@ -18,6 +18,8 @@ */ package org.alfresco.module.org_alfresco_module_rm.recorded.version.config; +import static org.alfresco.module.org_alfresco_module_rm.script.slingshot.RecordedVersionConfigPost.RECORDED_VERSION; +import static org.alfresco.module.org_alfresco_module_rm.version.RecordableVersionPolicy.ALL; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.doReturn; import static org.testng.Assert.assertEquals; @@ -63,10 +65,8 @@ public class RecordedVersionConfigPostTest extends BaseRecordedVersionConfigTest @Test public void setRecordedVersionConfig() throws Exception { - RecordableVersionPolicy policy = RecordableVersionPolicy.ALL; - // Build the content - String content = buildContent(policy); + String content = buildContent(ALL); // Build parameters Map parameters = buildParameters(); @@ -82,7 +82,7 @@ public class RecordedVersionConfigPostTest extends BaseRecordedVersionConfigTest assertEquals(json.length(), 0); // Test document must have recordable version policy "ALL" set - doReturn(policy).when(mockedNodeService).getProperty(testdoc, PROP_RECORDABLE_VERSION_POLICY); + doReturn(ALL).when(mockedNodeService).getProperty(testdoc, PROP_RECORDABLE_VERSION_POLICY); } /** @@ -95,7 +95,7 @@ public class RecordedVersionConfigPostTest extends BaseRecordedVersionConfigTest { StringBuilder sb = new StringBuilder(); sb.append("{\""); - sb.append(RecordedVersionConfigPost.RECORDED_VERSION); + sb.append(RECORDED_VERSION); sb.append("\":\""); sb.append(policy.toString()); sb.append("\"}"); diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java index cd9e175aaa..2f01ea986f 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java @@ -38,6 +38,7 @@ import org.alfresco.module.org_alfresco_module_rm.hold.HoldService; import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; +import org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.module.org_alfresco_module_rm.report.ReportService; import org.alfresco.module.org_alfresco_module_rm.role.FilePlanRoleService; @@ -80,7 +81,7 @@ import org.springframework.context.ApplicationContext; *

* Contains core and records management service mocks ready for injection. Helper methods * provide an easy way to build RM or Alfresco constructs for use in tests. - * + * * @author Roy Wetherall * @since 2.2 */ @@ -91,21 +92,21 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel protected NodeRef recordFolder; protected NodeRef record; - + /** core service mocks */ - @Mock(name="nodeService") protected NodeService mockedNodeService; + @Mock(name="nodeService") protected NodeService mockedNodeService; @Mock(name="dictionaryService") protected DictionaryService mockedDictionaryService; - @Mock(name="namespaceService") protected NamespaceService mockedNamespaceService; + @Mock(name="namespaceService") protected NamespaceService mockedNamespaceService; @Mock(name="identifierService") protected IdentifierService mockedIdentifierService; @Mock(name="permissionService") protected PermissionService mockedPermissionService; @Mock(name="ownableService") protected OwnableService mockedOwnableService; @Mock(name="searchService") protected SearchService mockedSearchService; @Mock(name="retryingTransactionHelper") protected RetryingTransactionHelper mockedRetryingTransactionHelper; @Mock(name="authorityService") protected AuthorityService mockedAuthorityService; - @Mock(name="policyComponent") protected PolicyComponent mockedPolicyComponent; + @Mock(name="policyComponent") protected PolicyComponent mockedPolicyComponent; @Mock(name="copyService") protected CopyService mockedCopyService; @Mock(name="fileFolderService") protected FileFolderService mockedFileFolderService; - + /** rm service mocks */ @Mock(name="filePlanService") protected FilePlanService mockedFilePlanService; @Mock(name="recordFolderService") protected RecordFolderService mockedRecordFolderService; @@ -119,14 +120,15 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel @Mock(name="authenticationUtil") protected AuthenticationUtil mockedAuthenticationUtil; @Mock(name="extendedPermissionService") protected ExtendedPermissionService mockedExtendedPermissionService; @Mock(name="extendedSecurityService") protected ExtendedSecurityService mockedExtendedSecurityService; - + @Mock(name="recordableVersionConfigService") protected RecordableVersionConfigService mockedRecordableVersionConfigService; + /** application context mock */ @Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext; - + /** expected exception rule */ @Rule public ExpectedException exception = ExpectedException.none(); - + /** * Test method setup */ @@ -135,10 +137,10 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel public void before() throws Exception { MockitoAnnotations.initMocks(this); - + // setup application context doReturn(mockedNodeService).when(mockedApplicationContext).getBean("dbNodeService"); - + // setup retrying transaction helper Answer doInTransactionAnswer = new Answer() { @@ -151,36 +153,36 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel } }; doAnswer(doInTransactionAnswer).when(mockedRetryingTransactionHelper).doInTransaction(any(RetryingTransactionCallback.class)); - + // setup mocked authentication util setupAuthenticationUtilMock(); - // setup file plan + // setup file plan filePlan = generateNodeRef(TYPE_FILE_PLAN); setupAsFilePlanComponent(filePlan); doReturn(true).when(mockedFilePlanService).isFilePlan(filePlan); - + // setup basic file plan component filePlanComponent = generateNodeRef(); setupAsFilePlanComponent(filePlanComponent); - + // setup namespace service doReturn(RM_URI).when(mockedNamespaceService).getNamespaceURI(RM_PREFIX); doReturn(CollectionUtils.unmodifiableSet(RM_PREFIX)).when(mockedNamespaceService).getPrefixes(RM_URI); - + // setup record folder and record recordFolder = generateRecordFolder(); record = generateRecord(); - + // set record as child of record folder List result = new ArrayList(1); result.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, recordFolder, generateQName(), record, true, 1)); doReturn(result).when(mockedNodeService).getChildAssocs(eq(recordFolder), eq(ContentModel.ASSOC_CONTAINS), any(QNamePattern.class)); doReturn(result).when(mockedNodeService).getParentAssocs(record); doReturn(Collections.singletonList(recordFolder)).when(mockedRecordFolderService).getRecordFolders(record); - doReturn(Collections.singletonList(record)).when(mockedRecordService).getRecords(recordFolder); + doReturn(Collections.singletonList(record)).when(mockedRecordService).getRecords(recordFolder); } - + /** * Setup authentication util mock */ @@ -197,9 +199,9 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel RunAsWork work = (RunAsWork)invocation.getArguments()[0]; return work.doWork(); } - - }).when(mockedAuthenticationUtil).runAsSystem(any(RunAsWork.class)); - + + }).when(mockedAuthenticationUtil).runAsSystem(any(RunAsWork.class)); + // just do the work doAnswer(new Answer() { @@ -210,27 +212,27 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel RunAsWork work = (RunAsWork)invocation.getArguments()[0]; return work.doWork(); } - + }).when(mockedAuthenticationUtil).runAs(any(RunAsWork.class), anyString()); - + // assume admin - doReturn("admin").when(mockedAuthenticationUtil).getAdminUserName(); + doReturn("admin").when(mockedAuthenticationUtil).getAdminUserName(); doReturn("admin").when(mockedAuthenticationUtil).getFullyAuthenticatedUser(); } - + /** * Helper method to generate a qname. - * + * * @return QName qualified name */ protected static QName generateQName() { return QName.createQName(RM_URI, GUID.generate()); } - + /** * Helper method to generate hold reference - * + * * @param name hold name * @return {@link NodeRef} node reference that will behave like a hold */ @@ -241,37 +243,37 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel doReturn(true).when(mockedHoldService).isHold(hold); return hold; } - + /** * Helper method to generate record folder reference - * + * * @return {@link NodeRef} node reference that will behave like a record folder */ protected NodeRef generateRecordFolder() { NodeRef recordFolder = generateNodeRef(TYPE_RECORD_FOLDER); - setupAsFilePlanComponent(recordFolder); + setupAsFilePlanComponent(recordFolder); doReturn(true).when(mockedRecordFolderService).isRecordFolder(recordFolder); - return recordFolder; + return recordFolder; } - + /** * Helper method to generate a record node reference. - * + * * @return {@link NodeRef} node reference that will behave like a record or type cm:content */ protected NodeRef generateRecord() { NodeRef record = generateNodeRef(ContentModel.TYPE_CONTENT); setupAsFilePlanComponent(record); - doReturn(true).when(mockedNodeService).hasAspect(record, ASPECT_RECORD); + doReturn(true).when(mockedNodeService).hasAspect(record, ASPECT_RECORD); doReturn(true).when(mockedRecordService).isRecord(record); return record; } - + /** * Helper method to setup a node reference as a file plan component. - * + * * @param nodeRef {@link NodeRef} node reference that will now behave like a file plan component */ protected void setupAsFilePlanComponent(NodeRef nodeRef) @@ -284,17 +286,17 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel /** * Helper method to generate a node reference. - * + * * @return {@link NodeRef} node reference that behaves like a node that exists in the spaces store */ protected NodeRef generateNodeRef() { return generateNodeRef(null); } - + /** * Helper method to generate a node reference of a particular type. - * + * * @param type content type qualified name * @return {@link NodeRef} node reference that behaves like a node that exists in the spaces store with * the content type provided @@ -303,10 +305,10 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel { return generateNodeRef(type, true); } - + /** * Helper method to generate a cm:content node reference with a given name. - * + * * @param name content name * @return NodeRef node reference */ @@ -316,10 +318,10 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel doReturn(name).when(mockedNodeService).getProperty(nodeRef, ContentModel.PROP_NAME); return nodeRef; } - + /** * Helper method to generate a node reference of a particular type with a given existence characteristic. - * + * * @param type content type qualified name * @param exists indicates whether this node should behave like a node that exists or not * @return {@link NodeRef} node reference that behaves like a node that exists (or not) in the spaces store with @@ -338,7 +340,7 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel /** * Helper method to generate a mocked child association reference. - * + * * @param parent parent node (optional) * @param child child node (optional) * @return {@link ChildAssociationRef} mocked to return the parent and child nodes @@ -346,25 +348,25 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel protected ChildAssociationRef generateChildAssociationRef(NodeRef parent, NodeRef child) { ChildAssociationRef mockedChildAssociationRef = mock(ChildAssociationRef.class); - + if (parent != null) { doReturn(parent).when(mockedChildAssociationRef).getParentRef(); } - + if (child != null) { doReturn(child).when(mockedChildAssociationRef).getChildRef(); } - + return mockedChildAssociationRef; } - + /** * Helper method to make one node the primary parent of the other. *

* Assumes the cm:contains assoc type. - * + * * @param child * @param parent */ @@ -374,12 +376,12 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel .when(mockedNodeService) .getPrimaryParent(child); } - + /** * Helper method to make a number of nodes children of another. *

* Assumes the cm:contains assoc type. - * + * * @param parent * @param children */ @@ -390,10 +392,10 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel { assocs.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child)); } - + doReturn(assocs).when(mockedNodeService).getChildAssocs(parent, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); } - + @SuppressWarnings("unchecked") protected List buildList(T ... values) {