From aab247e304509b6fa32ffe1e9d21c585526a5a99 Mon Sep 17 00:00:00 2001 From: Roy Wetherall Date: Mon, 9 Feb 2015 22:33:33 +0000 Subject: [PATCH 1/4] RM-1887: Unfiled record behaves as not unfiled after move git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@96631 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../model/rma/aspect/RecordAspect.java | 3 +- .../test/integration/issue/RM1887Test.java | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1887Test.java diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java index eef438f275..2747da3d4f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java @@ -236,7 +236,8 @@ public class RecordAspect extends AbstractDisposableItem { public Object doWork() { - if (nodeService.exists(record)) + if (nodeService.exists(record) && + recordService.isFiled(record)) { // clean record cleanDisposableItem(nodeService, record); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1887Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1887Test.java new file mode 100644 index 0000000000..556e736631 --- /dev/null +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM1887Test.java @@ -0,0 +1,82 @@ +/* + * 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.test.integration.issue; + +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; +import org.alfresco.service.cmr.repository.NodeRef; + + +/** + * Integration test for RM-1887 + * + * @author Roy Wetherall + * @since 2.3 + */ +public class RM1887Test extends BaseRMTestCase +{ + @Override + protected boolean isRecordTest() + { + return true; + } + + /** + * Given that a record is unfiled + * And an unfiled folder has been created + * When I move the unfiled record into the unfiled folder + * Then the filed date of the unfiled record remains unset + */ + public void testMoveUnfiledRecord() throws Exception + { + doBehaviourDrivenTest(new BehaviourDrivenTest() + { + private NodeRef unfiledRecordFolder; + private NodeRef unfiledRecord; + + public void given() throws Exception + { + // create unfiled folder + unfiledRecordFolder = fileFolderService.create(filePlanService.getUnfiledContainer(filePlan), "my test folder", TYPE_UNFILED_RECORD_FOLDER).getNodeRef(); + + // crate unfiled record + unfiledRecord = recordService.createRecordFromContent(filePlan, "test.txt", TYPE_CONTENT, null, null); + + // check the record + assertTrue(recordService.isRecord(unfiledRecord)); + assertFalse(recordService.isFiled(unfiledRecord)); + } + + public void when() throws Exception + { + // move the record into the unfiled folder + fileFolderService.move(unfiledRecord, unfiledRecordFolder, null); + } + + public void then() + { + // check the record + assertTrue(recordService.isRecord(unfiledRecord)); + assertFalse(recordService.isFiled(unfiledRecord)); + } + }); + + } + + +} From 0a96b5e56bef834ce91d46392a99e131ef802c4a Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Tue, 10 Feb 2015 12:26:55 +0000 Subject: [PATCH 2/4] Added the test for RM-1887 to the test suite. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@96663 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../test/integration/issue/IssueTestSuite.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java index 100ef501fc..cb45eefc4c 100755 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java @@ -44,7 +44,8 @@ import org.junit.runners.Suite.SuiteClasses; RM1039Test.class, RM1799Test.class, RM1814Test.class, - RM978Test.class + RM978Test.class, + RM1887Test.class }) public class IssueTestSuite { From 6bd51cb8fa50c5aa43028cdc07451020b7042dba Mon Sep 17 00:00:00 2001 From: Neil McErlean Date: Tue, 10 Feb 2015 14:40:09 +0000 Subject: [PATCH 3/4] Probable fix for RM-1886. It's not clear to me what the correct code is in this method, but I've changed what's there by comparing it to the AssociationRef-typed method below it. My changes seem reasonable. Probably needs review. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@96724 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../capability/RMAfterInvocationProvider.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java index 60431bb697..fc2ff23fe4 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java @@ -76,13 +76,8 @@ public class RMAfterInvocationProvider extends RMSecurityCommon public boolean supports(ConfigAttribute configAttribute) { - boolean supports = false; String attribute = configAttribute.getAttribute(); - if (StringUtils.isNotBlank(attribute) && attribute.startsWith(AFTER_RM)) - { - supports = true; - } - return supports; + return (StringUtils.isNotBlank(attribute) && attribute.startsWith(AFTER_RM)); } @SuppressWarnings("rawtypes") @@ -292,10 +287,9 @@ public class RMAfterInvocationProvider extends RMSecurityCommon } - @SuppressWarnings({"rawtypes" }) private List extractSupportedDefinitions(ConfigAttributeDefinition config) { - List definitions = new ArrayList(); + List definitions = new ArrayList<>(); Iterator iter = config.getConfigAttributes(); while (iter.hasNext()) @@ -332,7 +326,7 @@ public class RMAfterInvocationProvider extends RMSecurityCommon { NodeRef testNodeRef = null; - if (cad.typeString.equals(cad.parent)) + if (cad.parent) { testNodeRef = returnedObject.getParentRef(); } @@ -348,7 +342,7 @@ public class RMAfterInvocationProvider extends RMSecurityCommon continue; } - if (cad.typeString.equals(cad.parent) && parentReadCheck != AccessDecisionVoter.ACCESS_GRANTED) + if (cad.parent && parentReadCheck != AccessDecisionVoter.ACCESS_GRANTED) { throw new AccessDeniedException("Access Denied"); } From 32cedde74cc746395eec6b51c5fcc829f232c4fb Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Tue, 10 Feb 2015 15:54:29 +0000 Subject: [PATCH 4/4] RM-1867 (Reject rule works incorrect if set up in File Plan) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@96754 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-action-context.xml | 1 - .../rm-audit-context.xml | 2 + .../FilePlanNamePathDataExtractor.java | 42 ++++++++++++++----- .../FilePlanNodeRefPathDataExtractor.java | 35 +++++++++++++--- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index 482e854cff..0ee64536e6 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -731,7 +731,6 @@ - diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml index 8978b39c73..6f3d2bf7c9 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml @@ -16,12 +16,14 @@ + + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNamePathDataExtractor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNamePathDataExtractor.java index c38636c8ff..be516fc41d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNamePathDataExtractor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNamePathDataExtractor.java @@ -27,6 +27,7 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.audit.extractor.AbstractDataExtractor; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.rule.RuleService; /** * An extractor that extracts the cm:name path from the RM root down to @@ -42,6 +43,7 @@ public final class FilePlanNamePathDataExtractor extends AbstractDataExtractor { private NodeService nodeService; private FilePlanService filePlanService; + private RuleService ruleService; /** * Used to check that the node in the context is a fileplan component @@ -59,6 +61,14 @@ public final class FilePlanNamePathDataExtractor extends AbstractDataExtractor this.filePlanService = filePlanService; } + /** + * @param ruleService the ruleService to set + */ + public void setRuleService(RuleService ruleService) + { + this.ruleService = ruleService; + } + /** * @return Returns true if the data is a NodeRef and it represents * a fileplan component @@ -77,19 +87,31 @@ public final class FilePlanNamePathDataExtractor extends AbstractDataExtractor */ public Serializable extractData(Serializable value) { - NodeRef nodeRef = (NodeRef) value; + String extractedData = null; - // Get path from the RM root - List nodeRefPath = filePlanService.getNodeRefPath(nodeRef); - - StringBuilder sb = new StringBuilder(128); - for (NodeRef pathNodeRef : nodeRefPath) + ruleService.disableRules(); + try { - String name = (String)nodeService.getProperty(pathNodeRef, ContentModel.PROP_NAME); - sb.append("/").append(name); + NodeRef nodeRef = (NodeRef) value; + + // Get path from the RM root + List nodeRefPath = filePlanService.getNodeRefPath(nodeRef); + + StringBuilder sb = new StringBuilder(128); + for (NodeRef pathNodeRef : nodeRefPath) + { + String name = (String)nodeService.getProperty(pathNodeRef, ContentModel.PROP_NAME); + sb.append("/").append(name); + } + + // Done + extractedData = sb.toString(); + } + finally + { + ruleService.enableRules(); } - // Done - return sb.toString(); + return extractedData; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNodeRefPathDataExtractor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNodeRefPathDataExtractor.java index 5841ab3943..c00c143e5e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNodeRefPathDataExtractor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/audit/extractor/FilePlanNodeRefPathDataExtractor.java @@ -26,6 +26,7 @@ import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.repo.audit.extractor.AbstractDataExtractor; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.rule.RuleService; /** * An extractor that extracts the NodeRef path from the RM root down to @@ -41,6 +42,7 @@ public final class FilePlanNodeRefPathDataExtractor extends AbstractDataExtracto { private NodeService nodeService; private FilePlanService filePlanService; + private RuleService ruleService; /** * Used to check that the node in the context is a fileplan component @@ -50,11 +52,22 @@ public final class FilePlanNodeRefPathDataExtractor extends AbstractDataExtracto this.nodeService = nodeService; } + /** + * @param filePlanService file plan service + */ public void setFilePlanService(FilePlanService filePlanService) { this.filePlanService = filePlanService; } + /** + * @param ruleService the ruleService to set + */ + public void setRuleService(RuleService ruleService) + { + this.ruleService = ruleService; + } + /** * @return Returns true if the data is a NodeRef and it represents * a fileplan component @@ -70,12 +83,24 @@ public final class FilePlanNodeRefPathDataExtractor extends AbstractDataExtracto public Serializable extractData(Serializable value) { - NodeRef nodeRef = (NodeRef) value; + Serializable extractedData = null; - // Get path from the RM root - List nodeRefPath = filePlanService.getNodeRefPath(nodeRef); + ruleService.disableRules(); + try + { + NodeRef nodeRef = (NodeRef) value; - // Done - return (Serializable) nodeRefPath; + // Get path from the RM root + List nodeRefPath = filePlanService.getNodeRefPath(nodeRef); + + // Done + extractedData = (Serializable) nodeRefPath; + } + finally + { + ruleService.enableRules(); + } + + return extractedData; } }