From 92c45162a713304fa18e60b05b3e17ac313d9f01 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Thu, 13 Oct 2016 15:29:12 +0300 Subject: [PATCH 01/36] fixed "get pending reviews" solr query (cherry picked from commit 798b76a8ed1e4f07737edddd3a7b399f478d318f) --- .../job/NotifyOfRecordsDueForReviewJobExecuter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/NotifyOfRecordsDueForReviewJobExecuter.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/NotifyOfRecordsDueForReviewJobExecuter.java index 4a7ad4b735..37b8d46324 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/NotifyOfRecordsDueForReviewJobExecuter.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/NotifyOfRecordsDueForReviewJobExecuter.java @@ -92,8 +92,8 @@ public class NotifyOfRecordsDueForReviewJobExecuter extends RecordsManagementJob // notification has not been sent. StringBuilder queryBuffer = new StringBuilder(); queryBuffer.append("+ASPECT:\"rma:vitalRecord\" "); - queryBuffer.append("+(@rma\\:reviewAsOf:[MIN TO NOW] ) "); - queryBuffer.append("+( "); + queryBuffer.append("AND @rma\\:reviewAsOf:[MIN TO NOW] "); + queryBuffer.append("AND ( "); queryBuffer.append("@rma\\:notificationIssued:false "); queryBuffer.append("OR ISNULL:\"rma:notificationIssued\" "); queryBuffer.append(") "); From adc144e9717ae17ce80aa6f50c099f6852e7b075 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 31 Oct 2016 12:18:34 +0200 Subject: [PATCH 02/36] Update disposition schedule action for a record when linking or unlinking it. --- .../rm-service-context.xml | 1 + .../disposition/DispositionService.java | 8 ++++++++ .../disposition/DispositionServiceImpl.java | 20 +++++++++++++++++++ .../record/RecordServiceImpl.java | 12 ++++++++--- 4 files changed, 38 insertions(+), 3 deletions(-) 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 97f6a97480..81a2ad8478 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 @@ -142,6 +142,7 @@ org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.updateDispositionActionDefinition=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isNextDispositionActionEligible=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getNextDispositionAction=RM.Read.0 + org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.updateDispositionWhenLinkingOrUnlinking=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getCompletedDispositionActions=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getLastCompletedDispostionAction=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isDisposableItemCutoff=RM.Read.0 diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java index ed2ed79ecd..67e0ff072d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java @@ -264,4 +264,12 @@ public interface DispositionService * @return the initial disposition */ DispositionSchedule getOriginDispositionSchedule(NodeRef nodeRef); + + /** + * Updates disposition action step when linking or unlinking + * the given record to/from a record folder + * + * @param record + */ + void updateDispositionWhenLinkingOrUnlinking(NodeRef record); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 3a6e1d5beb..272a2beb7a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -1094,6 +1094,26 @@ public class DispositionServiceImpl extends ServiceBaseImpl } return null; } + + public void updateDispositionWhenLinkingOrUnlinking(NodeRef record) + { + List recordFolders = recordFolderService.getRecordFolders(record); + + DispositionAction nextDispositionAction = getNextDispositionAction(record); + + NextActionFromDisposition dsNextAction = getNextDispositionAction(record, recordFolders, nextDispositionAction); + final NodeRef action = dsNextAction.getNextActionNodeRef(); + final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() + { + nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); + return null; + } + }); + } /** * Helper method to determine if a node is frozen or has frozen children diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index a523ac93b6..c56cec4f50 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -34,14 +34,12 @@ import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; -import org.alfresco.module.org_alfresco_module_rm.RecordsManagementServiceRegistry; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.BeforeFileRecord; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.OnFileRecord; import org.alfresco.module.org_alfresco_module_rm.capability.Capability; import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; -import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionScheduleImpl; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; @@ -547,6 +545,8 @@ public class RecordServiceImpl extends BaseBehaviourBean // create and file the content as a record file(nodeRef); + // recalculate disposition schedule for the record when linking it + dispositionService.updateDispositionWhenLinkingOrUnlinking(nodeRef); } } } @@ -1695,7 +1695,7 @@ public class RecordServiceImpl extends BaseBehaviourBean // ensure we are linking a record to a record folder if(isRecord(record) && isRecordFolder(recordFolder)) { - // ensure that we are not linking a record to an exisiting location + // ensure that we are not linking a record to an existing location List parents = nodeService.getParentAssocs(record); for (ChildAssociationRef parent : parents) { @@ -1718,6 +1718,9 @@ public class RecordServiceImpl extends BaseBehaviourBean record, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, name)); + + // recalculate disposition schedule for the record when linking it + dispositionService.updateDispositionWhenLinkingOrUnlinking(record); } else { @@ -1774,6 +1777,9 @@ public class RecordServiceImpl extends BaseBehaviourBean // remove the link nodeService.removeChild(recordFolder, record); + + // recalculate disposition schedule for record after unlinking it + dispositionService.updateDispositionWhenLinkingOrUnlinking(record); } else { From 4b621be61decde1a07366b7c35d6479a9ed395bc Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Mon, 31 Oct 2016 14:31:24 +0200 Subject: [PATCH 03/36] temporary changed installer location to test with alfresco 5.1.2 --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index dc35b8a092..9477b85324 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From 0a79d24defc9a8ff106b2dfe37f147be9e105823 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 31 Oct 2016 14:41:58 +0200 Subject: [PATCH 04/36] Renamed method for calculating next disposition step and added null check. --- .../rm-service-context.xml | 2 +- .../disposition/DispositionService.java | 2 +- .../disposition/DispositionServiceImpl.java | 25 +++++++++++-------- .../record/RecordServiceImpl.java | 6 ++--- 4 files changed, 19 insertions(+), 16 deletions(-) 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 81a2ad8478..6b39ea2065 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 @@ -142,7 +142,7 @@ org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.updateDispositionActionDefinition=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isNextDispositionActionEligible=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getNextDispositionAction=RM.Read.0 - org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.updateDispositionWhenLinkingOrUnlinking=RM.Read.0 + org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.recalculateNextDispositionStep=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getCompletedDispositionActions=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.getLastCompletedDispostionAction=RM.Read.0 org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService.isDisposableItemCutoff=RM.Read.0 diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java index 67e0ff072d..a666b950c4 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java @@ -271,5 +271,5 @@ public interface DispositionService * * @param record */ - void updateDispositionWhenLinkingOrUnlinking(NodeRef record); + void recalculateNextDispositionStep(NodeRef record); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 272a2beb7a..2dcd859cf4 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -1095,24 +1095,27 @@ public class DispositionServiceImpl extends ServiceBaseImpl return null; } - public void updateDispositionWhenLinkingOrUnlinking(NodeRef record) + public void recalculateNextDispositionStep(NodeRef record) { List recordFolders = recordFolderService.getRecordFolders(record); DispositionAction nextDispositionAction = getNextDispositionAction(record); - NextActionFromDisposition dsNextAction = getNextDispositionAction(record, recordFolders, nextDispositionAction); - final NodeRef action = dsNextAction.getNextActionNodeRef(); - final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); - AuthenticationUtil.runAsSystem(new RunAsWork() + if (nextDispositionAction != null) { - @Override - public Void doWork() + NextActionFromDisposition dsNextAction = getNextDispositionAction(record, recordFolders, nextDispositionAction); + final NodeRef action = dsNextAction.getNextActionNodeRef(); + final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); + AuthenticationUtil.runAsSystem(new RunAsWork() { - nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); - return null; - } - }); + @Override + public Void doWork() + { + nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); + return null; + } + }); + } } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index c56cec4f50..22d4c95733 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -546,7 +546,7 @@ public class RecordServiceImpl extends BaseBehaviourBean // create and file the content as a record file(nodeRef); // recalculate disposition schedule for the record when linking it - dispositionService.updateDispositionWhenLinkingOrUnlinking(nodeRef); + dispositionService.recalculateNextDispositionStep(nodeRef); } } } @@ -1720,7 +1720,7 @@ public class RecordServiceImpl extends BaseBehaviourBean QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, name)); // recalculate disposition schedule for the record when linking it - dispositionService.updateDispositionWhenLinkingOrUnlinking(record); + dispositionService.recalculateNextDispositionStep(record); } else { @@ -1779,7 +1779,7 @@ public class RecordServiceImpl extends BaseBehaviourBean nodeService.removeChild(recordFolder, record); // recalculate disposition schedule for record after unlinking it - dispositionService.updateDispositionWhenLinkingOrUnlinking(record); + dispositionService.recalculateNextDispositionStep(record); } else { From b47d2370d7a47035629f60d644100bda745745b8 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 31 Oct 2016 15:14:14 +0200 Subject: [PATCH 05/36] Added integration test for recalculating disposition for a record when unlinking it. --- .../disposition/MultipleSchedulesTest.java | 29 +++++++++++++++++++ .../UpdateNextDispositionActionTest.java | 2 -- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/MultipleSchedulesTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/MultipleSchedulesTest.java index f166c97a1f..26d119210d 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/MultipleSchedulesTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/MultipleSchedulesTest.java @@ -173,4 +173,33 @@ public class MultipleSchedulesTest extends BaseRMTestCase .from(() -> dispositionService.getNextDispositionAction(record).getAsOfDate()) .because("Record should follow largest rentention schedule period, which is one week."); } + + /** + * RM-4292 + *

+     * Given a record subject to a mixed disposition schedule
+     * When the record is unlinked from one of its secondary parents
+     * Then the next disposition action is recalculated.
+     * 
+ */ + public void testRecalculateDispositionWhenUnlinking() + { + test() + .given(() -> { + setUpFilePlan(); + // Create a record filed under category A and linked to category B. + record = fileFolderService.create(folderA, RECORD_NAME, ContentModel.TYPE_CONTENT).getNodeRef(); + recordService.link(record, folderB); + }) + .when(() -> { + // Cut off the record. + dispositionService.cutoffDisposableItem(record); + // Unlink the record from folder B. + recordService.unlink(record, folderB); + }) + .then() + .expect(true) + .from(() -> dispositionService.isNextDispositionActionEligible(record)) + .because("Destroy action should be available, as the record should follow its origin disposition schedule."); + } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/UpdateNextDispositionActionTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/UpdateNextDispositionActionTest.java index d8dbb0b078..66bf5513b8 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/UpdateNextDispositionActionTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/disposition/UpdateNextDispositionActionTest.java @@ -26,13 +26,11 @@ import static org.alfresco.util.GUID.generate; import java.io.Serializable; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction; -import org.alfresco.module.org_alfresco_module_rm.action.impl.EditDispositionActionAsOfDateAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.TransferAction; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; From 07d010b1645a1ca849d2d5db3125f648aa53a312 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 31 Oct 2016 15:53:17 +0200 Subject: [PATCH 06/36] Added null check. --- .../disposition/DispositionServiceImpl.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 2dcd859cf4..907c6c2b90 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -1104,17 +1104,20 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (nextDispositionAction != null) { NextActionFromDisposition dsNextAction = getNextDispositionAction(record, recordFolders, nextDispositionAction); - final NodeRef action = dsNextAction.getNextActionNodeRef(); - final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); - AuthenticationUtil.runAsSystem(new RunAsWork() + if (dsNextAction != null) { - @Override - public Void doWork() + final NodeRef action = dsNextAction.getNextActionNodeRef(); + final Date dispositionActionDate = dsNextAction.getNextActionDateAsOf(); + AuthenticationUtil.runAsSystem(new RunAsWork() { - nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); - return null; - } - }); + @Override + public Void doWork() + { + nodeService.setProperty(action, PROP_DISPOSITION_AS_OF, dispositionActionDate); + return null; + } + }); + } } } From 21ebb12959fad719e92a0b4b5265d5f680ffc3b7 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 14:22:08 +0200 Subject: [PATCH 07/36] removed /qa from installer path base --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 9477b85324..948d8ddff0 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From fd232d2d727da80ddb5c1c37ad0fc5c5808840b9 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 14:45:52 +0200 Subject: [PATCH 08/36] added bamboo credentials --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 948d8ddff0..cb5f20d102 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From c33db37eb660ad5d31af40a06b9033931aeb0616 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 14:50:04 +0200 Subject: [PATCH 09/36] updated bamboo username --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index cb5f20d102..d42c6d26a3 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From a2c37b4be5a3996c8d53378f13d0de100cb3617d Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 14:57:44 +0200 Subject: [PATCH 10/36] updated bamboo_auth password --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index d42c6d26a3..922d1114e1 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From ce93ceb9305fb65fb89e391467521494ea053dde Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 15:03:06 +0200 Subject: [PATCH 11/36] Revert "updated bamboo_auth password" This reverts commit a2c37b4be5a3996c8d53378f13d0de100cb3617d. --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 922d1114e1..d42c6d26a3 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From 15fdde00095e249823d209e430d4e0c609d9c330 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 15:16:17 +0200 Subject: [PATCH 12/36] try placeholder bamboo_auth_ldap_password --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index d42c6d26a3..47cd642445 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From ff574212d037492881ef35ff355cda259a81d68b Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 15:31:28 +0200 Subject: [PATCH 13/36] Revert "try placeholder bamboo_auth_ldap_password" This reverts commit 15fdde00095e249823d209e430d4e0c609d9c330. --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 47cd642445..d42c6d26a3 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From b1cf8bf93e2be69bcbea4218300ce40cff2a3991 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 15:38:36 +0200 Subject: [PATCH 14/36] changed bamboo user password to bamboo_auth.password --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index d42c6d26a3..d013022460 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,7 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + Installing Alfresco... From 0e8ba89905e01ca3e96bd6d878fe02cca638fb48 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 1 Nov 2016 17:29:27 +0200 Subject: [PATCH 15/36] get the alfresco installer with scp --- rm-automation/pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index d013022460..8e00b85d4f 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -194,7 +194,10 @@ Recreating database... drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - + + + + Installing Alfresco... From e922bac36d7af96bea65b0d4eec9f457d57acbde Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 10:54:18 +0200 Subject: [PATCH 16/36] get RM amps with scp --- rm-automation/pom.xml | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 8e00b85d4f..41c45da52b 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -230,22 +230,15 @@ copy - - - org.alfresco - alfresco-rm-enterprise-share - ${project.version} - amp - - - org.alfresco - alfresco-rm-enterprise-repo - ${project.version} - amp - - - ${project.build.directory}/amps - true + + Fetching repo amp... + + + + Fetching share amp... + + + From 19f16756b42c1f7cc0777a26ee95bb676ea99496 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 10:59:43 +0200 Subject: [PATCH 17/36] changed fetch-amps goal from copy to run --- rm-automation/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 41c45da52b..82c002e3ca 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -227,7 +227,7 @@ fetch-amps process-test-resources - copy + run From 3494f9b826843fb12c48827a71ad00d54f25a250 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 11:06:18 +0200 Subject: [PATCH 18/36] moved fetch-amps execution to maven-antrun-plugin --- rm-automation/pom.xml | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 82c002e3ca..63e2fe5ffa 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -206,24 +206,7 @@ - - - - org.apache.ant - ant-jsch - 1.8.2 - - - postgresql - postgresql - 9.1-901-1.jdbc4 - - - - - maven-dependency-plugin - - + fetch-amps process-test-resources @@ -242,6 +225,18 @@ + + + org.apache.ant + ant-jsch + 1.8.2 + + + postgresql + postgresql + 9.1-901-1.jdbc4 + + org.alfresco.maven.plugin From fb998a4b5fc7ccc89fdb45da0f5703218e67e2dd Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 12:28:19 +0200 Subject: [PATCH 19/36] changed amp artifacts location --- rm-automation/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 63e2fe5ffa..9447d1c0fe 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -215,11 +215,11 @@ Fetching repo amp... - + Fetching share amp... - + From 09963624d629a6ad74638b31d77461d6006a2e15 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 13:42:49 +0200 Subject: [PATCH 20/36] temporary removed fetch amps --- rm-automation/pom.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 9447d1c0fe..918c5edccf 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -205,24 +205,6 @@ - - - fetch-amps - process-test-resources - - run - - - - Fetching repo amp... - - - - Fetching share amp... - - - - From 25264220efbe50103d8ca3c2a8a7d51cce05b316 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 14:31:51 +0200 Subject: [PATCH 21/36] added original fetch amps back --- rm-automation/pom.xml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 918c5edccf..8e00b85d4f 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -220,6 +220,36 @@ + + maven-dependency-plugin + + + fetch-amps + process-test-resources + + copy + + + + + org.alfresco + alfresco-rm-enterprise-share + ${project.version} + amp + + + org.alfresco + alfresco-rm-enterprise-repo + ${project.version} + amp + + + ${project.build.directory}/amps + true + + + + org.alfresco.maven.plugin alfresco-maven-plugin From 8ce501035b71ac14edc0de9c693e33f4413a69b3 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 15:12:49 +0200 Subject: [PATCH 22/36] updated tag for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7ec3fcda41..3d88ad777f 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ scm:git:https://gitlab.alfresco.com/records-management/records-management.git scm:git:https://gitlab.alfresco.com/records-management/records-management.git https://gitlab.alfresco.com/records-management/records-management - V2.5.0 + HEAD From c27ac5cd6a313e326f73b32ecafda3137945397f Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 15:50:21 +0200 Subject: [PATCH 23/36] added classifier to amp atrtifacts --- rm-automation/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 8e00b85d4f..3d532cf143 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -236,12 +236,14 @@ alfresco-rm-enterprise-share ${project.version} amp + amp org.alfresco alfresco-rm-enterprise-repo ${project.version} amp + amp ${project.build.directory}/amps From 49d5d9cb88a9f7c9bc45ef1de60cf37e7f788f1e Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 16:21:55 +0200 Subject: [PATCH 24/36] updated scp alfresco installer path --- rm-automation/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 3d532cf143..5d4e8ed794 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -195,8 +195,8 @@ drop database if exists alfresco; create database alfresco Downloading Alfresco installer... - - + + Installing Alfresco... From 4a542c78a4f767c892a4ff6bc926b4d7c5ca8e2b Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Wed, 2 Nov 2016 16:42:05 +0200 Subject: [PATCH 25/36] Revert "added classifier to amp atrtifacts" This reverts commit c27ac5cd6a313e326f73b32ecafda3137945397f. --- rm-automation/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index 5d4e8ed794..fc21cab5bc 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -236,14 +236,12 @@ alfresco-rm-enterprise-share ${project.version} amp - amp org.alfresco alfresco-rm-enterprise-repo ${project.version} amp - amp ${project.build.directory}/amps From 23a3e9af5d6847d61fdd6e99f4999bb4ccc9df04 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Fri, 14 Oct 2016 18:41:00 +0300 Subject: [PATCH 26/36] RM-4249 - workaround : replaced maxEntries with a positive value (cherry picked from commit 4b76fb838fd24d9c26e7d8d5e58449d71637062e) --- .../audit/RecordsManagementAuditQueryParameters.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditQueryParameters.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditQueryParameters.java index 4cc11842a7..ec77698540 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditQueryParameters.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/RecordsManagementAuditQueryParameters.java @@ -42,7 +42,7 @@ import org.alfresco.service.namespace.QName; @AlfrescoPublicApi public final class RecordsManagementAuditQueryParameters { - private int maxEntries = -1; + private int maxEntries = Integer.MAX_VALUE; private String user; private NodeRef nodeRef; private Date dateFrom; From 43287c103593a10fd05a150451fde37a1a9c6628 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Tue, 18 Oct 2016 18:28:29 +0300 Subject: [PATCH 27/36] fixed audit unit tests (cherry picked from commit 7a33945dffff0d7f29691ead503318daaffea4a4) --- .../RecordsManagementAuditServiceImplTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java index 50511302a7..4c9f507c19 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java @@ -171,9 +171,9 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase // "audit.start", "audit.view" and "Update RM Object"; entries = getAuditTrail(3, ADMIN_USER); - assertEquals(entries.get(0).getEvent(), "audit.start"); + assertEquals(entries.get(2).getEvent(), "audit.start"); assertEquals(entries.get(1).getEvent(), "audit.view"); - assertEquals(entries.get(2).getEvent(), "Update RM Object"); + assertEquals(entries.get(0).getEvent(), "Update RM Object"); // New "audit.view" event was generated - will be visible on next getAuditTrail(). @@ -185,14 +185,14 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase nodeService.deleteNode(record); List entries = getAuditTrail(5, ADMIN_USER); - assertEquals(entries.get(0).getEvent(), "audit.start"); - assertEquals(entries.get(1).getEvent(), "audit.view"); - assertEquals(entries.get(2).getEvent(), "Update RM Object"); + assertEquals(entries.get(4).getEvent(), "audit.start"); assertEquals(entries.get(3).getEvent(), "audit.view"); + assertEquals(entries.get(2).getEvent(), "Update RM Object"); + assertEquals(entries.get(1).getEvent(), "audit.view"); // Show the audit contains a reference to the deleted item: - assertEquals(entries.get(4).getEvent(), "Delete RM Object"); - assertEquals(entries.get(4).getNodeRef(), record); + assertEquals(entries.get(0).getEvent(), "Delete RM Object"); + assertEquals(entries.get(0).getNodeRef(), record); return null; } @@ -212,7 +212,7 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase // show the audit has been updated List entries = getAuditTrail(3, ADMIN_USER); - final RecordsManagementAuditEntry entry = entries.get(2); + final RecordsManagementAuditEntry entry = entries.get(0); assertNotNull(entry); // investigate the contents of the audit entry From d457a67cf6c636530e1e191fb61bb899f0abdb46 Mon Sep 17 00:00:00 2001 From: Ana Bozianu Date: Fri, 4 Nov 2016 17:26:32 +0200 Subject: [PATCH 28/36] Revert "updated tag for next development iteration" This reverts commit 8ce501035b71ac14edc0de9c693e33f4413a69b3. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3d88ad777f..7ec3fcda41 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ scm:git:https://gitlab.alfresco.com/records-management/records-management.git scm:git:https://gitlab.alfresco.com/records-management/records-management.git https://gitlab.alfresco.com/records-management/records-management - HEAD + V2.5.0 From 20e505e50b580e690fb5527d3b17c9ecee4a9592 Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Mon, 7 Nov 2016 12:45:59 +0000 Subject: [PATCH 29/36] [maven-release-plugin] prepare release V2.5.0.1 --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 7ec3fcda41..5604f2b284 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.0.1-SNAPSHOT + 2.5.0.1 Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://gitlab.alfresco.com/records-management/records-management.git scm:git:https://gitlab.alfresco.com/records-management/records-management.git https://gitlab.alfresco.com/records-management/records-management - V2.5.0 + V2.5.0.1 diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index fc21cab5bc..c65dd7f52f 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.0.1-SNAPSHOT + 2.5.0.1 diff --git a/rm-community/pom.xml b/rm-community/pom.xml index 305e5c2765..cbb653979a 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.0.1-SNAPSHOT + 2.5.0.1 diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 5bc7efd8f5..5e0e1757bb 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.0.1-SNAPSHOT + 2.5.0.1 From d3c03b9f767c4842891de8b2f6b04696e396d5d0 Mon Sep 17 00:00:00 2001 From: alfresco-build Date: Mon, 7 Nov 2016 12:46:02 +0000 Subject: [PATCH 30/36] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- rm-automation/pom.xml | 2 +- rm-community/pom.xml | 2 +- rm-community/rm-community-repo/pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 5604f2b284..2de2a93ed7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm pom - 2.5.0.1 + 2.5.0.2-SNAPSHOT Alfresco Records Management @@ -24,7 +24,7 @@ scm:git:https://gitlab.alfresco.com/records-management/records-management.git scm:git:https://gitlab.alfresco.com/records-management/records-management.git https://gitlab.alfresco.com/records-management/records-management - V2.5.0.1 + V2.5.0 diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index c65dd7f52f..8f8ce1a3c8 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.0.1 + 2.5.0.2-SNAPSHOT diff --git a/rm-community/pom.xml b/rm-community/pom.xml index cbb653979a..c7e2c8efbf 100644 --- a/rm-community/pom.xml +++ b/rm-community/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm - 2.5.0.1 + 2.5.0.2-SNAPSHOT diff --git a/rm-community/rm-community-repo/pom.xml b/rm-community/rm-community-repo/pom.xml index 5e0e1757bb..634eebcd11 100644 --- a/rm-community/rm-community-repo/pom.xml +++ b/rm-community/rm-community-repo/pom.xml @@ -9,7 +9,7 @@ org.alfresco alfresco-rm-community - 2.5.0.1 + 2.5.0.2-SNAPSHOT From bae6ca033807cd2c024c50dbaed167ba7c989f8d Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 10 Nov 2016 12:57:49 +0000 Subject: [PATCH 31/36] RM-4247 Re-add changes that were meant to be merged from release/V2.5. The merge in '5f75e3' missed the changes from RM-4247, so this commit adds them back in. --- ...spositionActionDefinitionUpdateAction.java | 2 +- ...nActionDefinitionUpdateActionUnitTest.java | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java index f8f660b3e8..7bc9c72f83 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateAction.java @@ -196,7 +196,7 @@ public class BroadcastDispositionActionDefinitionUpdateAction extends RMActionEx { // the change does effect the nextAction for this node // so go ahead and determine what needs updating - if (changedProps.contains(PROP_DISPOSITION_PERIOD) + if ((changedProps.contains(PROP_DISPOSITION_PERIOD) || changedProps.contains(PROP_DISPOSITION_PERIOD_PROPERTY)) && isNotTrue((Boolean) getNodeService().getProperty(nextAction.getNodeRef(), PROP_MANUALLY_SET_AS_OF))) { persistPeriodChanges(dispositionActionDef, nextAction); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java index f83249dc51..48526d8981 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/BroadcastDispositionActionDefinitionUpdateActionUnitTest.java @@ -27,16 +27,25 @@ package org.alfresco.module.org_alfresco_module_rm.action.impl; +import static java.util.Arrays.asList; +import static org.alfresco.module.org_alfresco_module_rm.action.impl.BroadcastDispositionActionDefinitionUpdateAction.CHANGED_PROPERTIES; +import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_DISPOSITION_LIFECYCLE; import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.PROP_DISPOSITION_AS_OF; +import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.PROP_DISPOSITION_PERIOD_PROPERTY; +import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.TYPE_DISPOSITION_ACTION_DEFINITION; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.io.Serializable; import java.util.Date; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionActionDefinition; +import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; +import org.alfresco.repo.policy.BehaviourFilter; +import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; @@ -63,6 +72,7 @@ public class BroadcastDispositionActionDefinitionUpdateActionUnitTest private NodeService mockNodeService = mock(NodeService.class); private DispositionService mockDispositionService = mock(DispositionService.class); + private BehaviourFilter mockBehaviourFilter = mock(BehaviourFilter.class); /** Inject the mock services into the class under test and link the content and next action nodes. */ @Before @@ -70,6 +80,7 @@ public class BroadcastDispositionActionDefinitionUpdateActionUnitTest { action.setNodeService(mockNodeService); action.setDispositionService(mockDispositionService); + action.setBehaviourFilter(mockBehaviourFilter); ChildAssociationRef mockAssocRef = mock(ChildAssociationRef.class); when(mockNodeService.getPrimaryParent(NEXT_ACTION_NODE_REF)).thenReturn(mockAssocRef); @@ -100,4 +111,61 @@ public class BroadcastDispositionActionDefinitionUpdateActionUnitTest // Check that the "disposition as of" date has been set on the next action. verify(mockNodeService).setProperty(NEXT_ACTION_NODE_REF, PROP_DISPOSITION_AS_OF, asOfDate); } + + /** + * Check that changing the period property triggers a recalculation of the "disposition as of" date. + *

+ * Set up a disposition action definition node under a schedule defintion node, under a category node. Create a + * record whose next action is an instance of the action definition. Check that if the "period property" of the + * action definition changes then the "disposition as of" date is recalculated and persisted against the node of the + * next action. + */ + @Test + public void testChangePeriodProperty() + { + // Set up the action definition node. + String definitionNodeId = "definitionNodeId"; + NodeRef definitionNode = new NodeRef("definition://node/" + definitionNodeId); + DispositionSchedule mockDispositionSchedule = mock(DispositionSchedule.class); + when(mockDispositionSchedule.getNodeRef()).thenReturn(definitionNode); + when(mockNodeService.getType(definitionNode)).thenReturn(TYPE_DISPOSITION_ACTION_DEFINITION); + // Set up the schedule definition node hierarchy. + NodeRef categoryNode = new NodeRef("category://node/"); + NodeRef scheduleNode = new NodeRef("schedule://node/"); + ChildAssociationRef scheduleDefinitionRelationship = new ChildAssociationRef(null, scheduleNode, null, definitionNode); + when(mockNodeService.getPrimaryParent(definitionNode)).thenReturn(scheduleDefinitionRelationship); + ChildAssociationRef categoryScheduleRelationship = new ChildAssociationRef(null, categoryNode, null, scheduleNode); + when(mockNodeService.getPrimaryParent(scheduleNode)).thenReturn(categoryScheduleRelationship); + // Set up the record/step relationship. + NodeRef recordNode = new NodeRef("record://node/"); + NodeRef stepNode = new NodeRef("step://node/"); + ChildAssociationRef recordStepRelationship = new ChildAssociationRef(null, recordNode, null, stepNode); + when(mockNodeService.getPrimaryParent(stepNode)).thenReturn(recordStepRelationship); + // Set up the disposition schedule. + when(mockDispositionService.getAssociatedDispositionSchedule(categoryNode)).thenReturn(mockDispositionSchedule); + when(mockDispositionService.getDisposableItems(mockDispositionSchedule)).thenReturn(asList(recordNode)); + when(mockDispositionService.getDispositionSchedule(recordNode)).thenReturn(mockDispositionSchedule); + // Set up the record. + when(mockNodeService.hasAspect(recordNode, ASPECT_DISPOSITION_LIFECYCLE)).thenReturn(true); + // Set up the next disposition action. + DispositionAction nextAction = mock(DispositionAction.class); + when(nextAction.getId()).thenReturn(definitionNodeId); + when(nextAction.getNodeRef()).thenReturn(stepNode); + when(mockDispositionService.getNextDispositionAction(recordNode)).thenReturn(nextAction); + DispositionActionDefinition mockActionDefinition = mock(DispositionActionDefinition.class); + when(nextAction.getDispositionActionDefinition()).thenReturn(mockActionDefinition); + + // Set up the action so that it looks like the period property has been changed. + Action mockAction = mock(Action.class); + when(mockAction.getParameterValue(CHANGED_PROPERTIES)).thenReturn((Serializable) asList(PROP_DISPOSITION_PERIOD_PROPERTY)); + // Set up the expected "as of" date. + Date newAsOfDate = new Date(123456789000L); + when(mockDispositionService.calculateAsOfDate(recordNode, mockActionDefinition, false)).thenReturn(newAsOfDate); + + // Call the method under test. + action.executeImpl(mockAction, definitionNode); + + // Check that the "as of" date is updated. + verify(mockNodeService).setProperty(stepNode, PROP_DISPOSITION_AS_OF, newAsOfDate); + } } From 9b0aa770f90d38af7a558a1db134f6e33a229a5e Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Thu, 10 Nov 2016 16:58:05 +0200 Subject: [PATCH 32/36] RM-4327: changed InvalidParameterException with IntegrityException --- .../model/BaseBehaviourBean.java | 16 ++++++------ .../model/rma/type/RmSiteType.java | 6 ++--- .../model/rma/type/TransferContainerType.java | 5 ++-- .../model/rma/type/TransferType.java | 5 ++-- .../test/integration/issue/RM3341Test.java | 7 +++-- .../test/integration/issue/RM3450Test.java | 5 ++-- .../model/rma/type/FilePlanTypeUnitTest.java | 10 +++---- .../rma/type/HoldContainerTypeUnitTest.java | 7 +++-- .../model/rma/type/RmSiteTypeUnitTest.java | 26 +++++++++---------- .../type/TransferContainerTypeUnitTest.java | 7 +++-- .../model/rma/type/TransferTypeUnitTest.java | 7 +++-- .../UnfiledRecordContainerTypeUnitTest.java | 7 +++-- .../type/UnfiledRecordFolderTypeUnitTest.java | 7 +++-- 13 files changed, 53 insertions(+), 62 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java index 734b7d34e9..de61dcc7c7 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java @@ -27,13 +27,13 @@ package org.alfresco.module.org_alfresco_module_rm.model; -import java.security.InvalidParameterException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.annotation.BehaviourRegistry; import org.alfresco.service.cmr.repository.NodeRef; @@ -99,9 +99,9 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl * @param childType the child node * @param acceptedUniqueChildType a list of node types that are accepted as children of the provided parent only once * @param acceptedMultipleChildType a list of node types that are accepted as children of the provided parent multiple times - * @throws InvalidParameterException if the child association doesn't comply with the RM rules + * @throws IntegrityException if the child association doesn't comply with the RM rules */ - protected void validateNewChildAssociation(NodeRef parent, NodeRef child, List acceptedUniqueChildType, List acceptedMultipleChildType) throws InvalidParameterException + protected void validateNewChildAssociation(NodeRef parent, NodeRef child, List acceptedUniqueChildType, List acceptedMultipleChildType) throws IntegrityException { QName childType = getInternalNodeService().getType(child); if(acceptedUniqueChildType.contains(childType)) @@ -109,12 +109,12 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl // check the user is not trying to create multiple children of a type that is only accepted once if(nodeService.getChildAssocs(parent, Sets.newHashSet(childType)).size() > 1) { - throw new InvalidParameterException("Operation failed. Multiple children of this type are not allowed."); + throw new IntegrityException("Operation failed. Multiple children of this type are not allowed.", null); } } else if(!acceptedMultipleChildType.contains(childType)) { - throw new InvalidParameterException("Operation failed. Children of type " + childType + " are not allowed"); + throw new IntegrityException("Operation failed. Children of type " + childType + " are not allowed", null); } } @@ -122,9 +122,9 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl * Helper method that checks if the newly created child association is between the sub-types of accepted types. * @param childType the child node * @param acceptedMultipleChildType a list of node types that are accepted as children of the provided parent multiple times - * @throws InvalidParameterException if the child association isn't between the sub-types of accepted types + * @throws IntegrityException if the child association isn't between the sub-types of accepted types */ - protected void validateNewChildAssociationSubTypesIncluded(NodeRef child, List acceptedMultipleChildType) throws InvalidParameterException + protected void validateNewChildAssociationSubTypesIncluded(NodeRef child, List acceptedMultipleChildType) throws IntegrityException { QName childType = getInternalNodeService().getType(child); for(QName type : acceptedMultipleChildType) @@ -135,6 +135,6 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl } } //no match was found in sub-types of permitted types list - throw new InvalidParameterException("Operation failed. Children of type " + childType + " are not allowed"); + throw new IntegrityException("Operation failed. Children of type " + childType + " are not allowed", null); } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java index 9068216fb3..4dce98a20c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java @@ -28,7 +28,6 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import java.io.Serializable; -import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -41,6 +40,7 @@ import org.alfresco.module.org_alfresco_module_rm.capability.CapabilityService; import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.BehaviourBean; @@ -343,14 +343,14 @@ public class RmSiteType extends BaseBehaviourBean */ @Override protected void validateNewChildAssociation(NodeRef parent, NodeRef child, List acceptedUniqueChildType, - List acceptedMultipleChildType) throws InvalidParameterException + List acceptedMultipleChildType) throws IntegrityException { super.validateNewChildAssociation(parent, child, acceptedUniqueChildType, acceptedMultipleChildType); // check the user is not trying to create more than 2 folders that are created by default. if(nodeService.getChildAssocs(parent, Sets.newHashSet(ContentModel.TYPE_FOLDER)).size() > 2) { - throw new InvalidParameterException("Operation failed. Children of type " + ContentModel.TYPE_FOLDER + " are not allowed"); + throw new IntegrityException("Operation failed. Children of type " + ContentModel.TYPE_FOLDER + " are not allowed", null); } } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java index b46fd8c711..6c9657a543 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java @@ -26,12 +26,11 @@ */ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; -import java.security.InvalidParameterException; - import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourKind; @@ -84,7 +83,7 @@ public class TransferContainerType extends BaseBehaviourBean ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) { - throw new InvalidParameterException("Operation failed. Creation is not allowed in Transfer Container"); + throw new IntegrityException("Operation failed. Creation is not allowed in Transfer Container", null); } @Override diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java index 268caa0165..0d8bba494d 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java @@ -27,10 +27,9 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; -import java.security.InvalidParameterException; - import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourKind; @@ -76,6 +75,6 @@ public class TransferType extends BaseBehaviourBean implements NodeServicePolici ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode) { - throw new InvalidParameterException("Operation failed. Creation is not allowed in Transfer Folders"); + throw new IntegrityException("Operation failed. Creation is not allowed in Transfer Folders", null); } } diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3341Test.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3341Test.java index e729e9ac7a..623399f628 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3341Test.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3341Test.java @@ -27,11 +27,10 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.issue; -import java.security.InvalidParameterException; - import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AccessStatus; @@ -78,7 +77,7 @@ public class RM3341Test extends BaseRMTestCase fileFolderService.create(holdContainer, "test file", ContentModel.TYPE_CONTENT); fail("This should have thrown an exception"); } - catch (InvalidParameterException e) + catch (IntegrityException e) { // ("Content can't be added to a hold container. Use record folders to file content.") } @@ -104,7 +103,7 @@ public class RM3341Test extends BaseRMTestCase fail("This should have thrown an exception"); } - catch (InvalidParameterException e) + catch (IntegrityException e) { // ("Content can't be added to a transfer container. Use record folders to file content.") } diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3450Test.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3450Test.java index 02ff9dd758..e2d031f057 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3450Test.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/RM3450Test.java @@ -26,10 +26,9 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.issue; -import java.security.InvalidParameterException; - import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.module.org_alfresco_module_rm.test.util.TestModel; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.util.GUID; import org.springframework.extensions.surf.util.I18NUtil; @@ -50,7 +49,7 @@ public class RM3450Test extends BaseRMTestCase doTestInTransaction(new FailureTest ( I18NUtil.getMessage(MSG_CANNOT_CAST_TO_RM_TYPE), - InvalidParameterException.class + IntegrityException.class ) { @Override diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java index bdad80df6e..ef08b695da 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/FilePlanTypeUnitTest.java @@ -29,11 +29,11 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; import java.util.Arrays; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -69,7 +69,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest * When adding a child of type TYPE_FILE_PLAN * Then an error should be thrown */ - @Test (expected = InvalidParameterException.class) + @Test (expected = IntegrityException.class) public void testAddFileplanToFileplan() { ChildAssociationRef childAssoc = createFileplanContainerChild(TYPE_FILE_PLAN); @@ -112,7 +112,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest * When adding another child of type TYPE_HOLD_CONTAINER * Then an error should be thrown */ - @Test (expected = InvalidParameterException.class) + @Test (expected = IntegrityException.class) public void testCreateMultipleHoldContainers() { ChildAssociationRef existingHoldAssoc = createFileplanContainerChild(TYPE_HOLD_CONTAINER); @@ -141,7 +141,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest * When adding another child of type TYPE_TRANSFER_CONTAINER * Then an error should be thrown */ - @Test (expected = InvalidParameterException.class) + @Test (expected = IntegrityException.class) public void testCreateMultipleTransferContainers() { ChildAssociationRef existingHoldAssoc = createFileplanContainerChild(TYPE_TRANSFER_CONTAINER); @@ -170,7 +170,7 @@ public class FilePlanTypeUnitTest extends BaseUnitTest * When adding another child of type TYPE_UNFILED_RECORD_CONTAINER * Then an error should be thrown */ - @Test (expected = InvalidParameterException.class) + @Test (expected = IntegrityException.class) public void testCreateMultipleUnfiledRecordsContainers() { ChildAssociationRef existingHoldAssoc = createFileplanContainerChild(TYPE_UNFILED_RECORD_CONTAINER); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldContainerTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldContainerTypeUnitTest.java index 1a614fc075..9e414974ca 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldContainerTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldContainerTypeUnitTest.java @@ -29,10 +29,9 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; - import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -52,9 +51,9 @@ public class HoldContainerTypeUnitTest extends BaseUnitTest /** * Given that we try to add a non "rma:hold" type to hold container, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test (expected = InvalidParameterException.class) + @Test (expected = IntegrityException.class) public void testAddNonHoldTypeToHoldContainer() { QName type = AlfMock.generateQName(); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteTypeUnitTest.java index a9483509ad..5e876ffaed 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteTypeUnitTest.java @@ -30,7 +30,6 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; import java.util.ArrayList; import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; @@ -38,6 +37,7 @@ import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; import org.alfresco.module.org_alfresco_module_rm.test.util.MockAuthenticationUtilHelper; import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteInfo; @@ -77,9 +77,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add non allowed type to rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddNonAcceptedTypeToRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_RM_SITE, true); @@ -149,9 +149,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add more than two cm:folder to rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddMoreThanTwhoFolderTypeToRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_RM_SITE, true); @@ -208,9 +208,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add one dod:filePlan to standard rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddDODFilePlanTypeToStandardRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_RM_SITE, true); @@ -225,9 +225,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add more than one rma:filePlan to rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddMoreThanOneFilePlanTypeToRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_RM_SITE, true); @@ -281,9 +281,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add more than one dod:filePlan to rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddMoreThanOneDODFilePlanTypeToRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_DOD_5015_SITE, true); @@ -315,9 +315,9 @@ public class RmSiteTypeUnitTest extends BaseUnitTest implements DOD5015Model /** * Given that we try to add one rma:filePlan to DOD rm site, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddStandardFilePlanTypeToDODRmSite() { NodeRef rmSiteNodeRef = generateNodeRef(TYPE_DOD_5015_SITE, true); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java index 1623164f25..2126da6b8b 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java @@ -29,10 +29,9 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; - import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -52,9 +51,9 @@ public class TransferContainerTypeUnitTest extends BaseUnitTest /** * Given that we try to add to transfer container, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddToTransferContainerTest() { NodeRef transferContainer = generateNodeRef(TYPE_TRANSFER_CONTAINER, true); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferTypeUnitTest.java index d16b49759a..fe5cf4a69a 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferTypeUnitTest.java @@ -30,10 +30,9 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; - import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -53,9 +52,9 @@ public class TransferTypeUnitTest extends BaseUnitTest /** * Given that we try to add to transfer type folder, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddToTransferFolderTest() { NodeRef transferFolder = generateNodeRef(TYPE_TRANSFER, true); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordContainerTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordContainerTypeUnitTest.java index 5ed5fc662e..6edd9c2eda 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordContainerTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordContainerTypeUnitTest.java @@ -30,11 +30,10 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; - import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -54,9 +53,9 @@ public class UnfiledRecordContainerTypeUnitTest extends BaseUnitTest /** * Given that we try to add a type that is not one of "rma:unfiledRecordFolder", "cm:content" or "rma:nonElectronicDocument" types to unfiled record container, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddNonAcceptedTypeToUnfiledRecordContainer() { QName type = AlfMock.generateQName(); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java index 18efc7ecde..34f5411031 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/UnfiledRecordFolderTypeUnitTest.java @@ -30,11 +30,10 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.security.InvalidParameterException; - import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -54,9 +53,9 @@ public class UnfiledRecordFolderTypeUnitTest extends BaseUnitTest /** * Given that we try to add a type that is not one of "rma:unfiledRecordFolder", "cm:content" or "rma:nonElectronicDocument" types to unfiled record folder, - * Then InvalidParameterException is thrown. + * Then IntegrityException is thrown. */ - @Test(expected = InvalidParameterException.class) + @Test(expected = IntegrityException.class) public void testAddNonAcceptedTypeToUnfiledRecordFolder() { QName type = AlfMock.generateQName(); From ce0a3e54aee633aa7d9459abc690a4b0ede6d660 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Fri, 11 Nov 2016 17:39:01 +0200 Subject: [PATCH 33/36] RM-4327: changed exception type on RecordFolderType and added unit tests for the changes --- .../model/rma/type/RecordFolderType.java | 15 +- .../rma/type/RecordFolderTypeUnitTest.java | 226 ++++++++++++++++++ 2 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderTypeUnitTest.java diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index d9b8ffe6b4..9fb22a875c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -32,6 +32,7 @@ import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.behaviour.AbstractDisposableItem; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; @@ -40,6 +41,7 @@ import org.alfresco.repo.copy.CopyBehaviourCallback; import org.alfresco.repo.copy.CopyDetails; import org.alfresco.repo.copy.DefaultCopyBehaviourCallback; import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.Behaviour.NotificationFrequency; import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.BehaviourBean; @@ -219,6 +221,15 @@ public class RecordFolderType extends AbstractDisposableItem if (nodeService.exists(nodeRef)) { + boolean notFolderOrRmFolderSubType = !instanceOf(nodeRef, ContentModel.TYPE_FOLDER) || + instanceOf(nodeRef, RecordsManagementModel.TYPE_RECORDS_MANAGEMENT_CONTAINER) || + instanceOf(nodeRef, RecordsManagementModel.TYPE_RECORD_FOLDER) || + instanceOf(nodeRef, RecordsManagementModel.TYPE_TRANSFER); + + if (!instanceOf(nodeRef, ContentModel.TYPE_CONTENT) && notFolderOrRmFolderSubType) + { + throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER), null); + } // ensure nothing is being added to a closed record folder NodeRef recordFolder = childAssocRef.getParentRef(); Boolean isClosed = (Boolean) nodeService.getProperty(recordFolder, PROP_IS_CLOSED); @@ -245,9 +256,9 @@ public class RecordFolderType extends AbstractDisposableItem final NodeRef recordFolder = childAssocRef.getChildRef(); // only records can be added in a record folder or hidden folders(is the case of e-mail attachments) - if (!instanceOf(recordFolder, ContentModel.TYPE_CONTENT) && !nodeService.hasAspect(recordFolder, ContentModel.ASPECT_HIDDEN)) + if (instanceOf(recordFolder, ContentModel.TYPE_FOLDER) && !nodeService.hasAspect(recordFolder, ContentModel.ASPECT_HIDDEN)) { - throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER)); + throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER), null); } behaviourFilter.disableBehaviour(); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderTypeUnitTest.java new file mode 100644 index 0000000000..c058675604 --- /dev/null +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderTypeUnitTest.java @@ -0,0 +1,226 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * 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 . + * #L% + */ + +package org.alfresco.module.org_alfresco_module_rm.model.rma.type; + +import static org.mockito.Mockito.when; + +import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.module.org_alfresco_module_rm.test.util.MockAuthenticationUtilHelper; +import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil; +import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService; +import org.alfresco.repo.node.integrity.IntegrityException; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +/** + * Unit test class for RecordFolderType + * + * @author Silviu Dinuta + * @since 2.6 + * + */ +public class RecordFolderTypeUnitTest extends BaseUnitTest +{ + @Mock + private AuthenticationUtil mockAuthenticationUtil; + + @Mock + private VitalRecordService mockedVitalRecordService; + + private @InjectMocks RecordFolderType recordFolderType; + + @Before + public void setup() + { + MockitoAnnotations.initMocks(this); + MockAuthenticationUtilHelper.setup(mockAuthenticationUtil); + when(mockedApplicationContext.getBean("dbNodeService")).thenReturn(mockedNodeService); + } + + /** + * Given that we try to add one rma:transfer to a record folder, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateTransferFolder() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_TRANSFER)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add one record folder to a record folder, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateRecordFolder() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_RECORD_FOLDER)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add sub-type of rma:recordsManagementContainer to a record folder, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateSubTypesOfRecordManagementContainer() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_RECORDS_MANAGEMENT_CONTAINER)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add cm:folder sub-type to a record folder, + * Then the operation is successful. + */ + @Test + public void testCreateFolderSubType() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add non cm:folder sub-type to a record folder, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateNonFolderSubType() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(false); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add cm:content sub-type to a record folder, + * Then the operation is successful. + */ + public void testCreateContent() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_CONTENT)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add non cm:content or non cm:folder sub-type to a record folder, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateNonContent() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_CONTENT)).thenReturn(false); + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(false); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add not hidden cm:folder sub-type to a record folder, + * Then IntegrityException is thrown on commit. + */ + @Test(expected = IntegrityException.class) + public void testCreateNotHiddenFolderSubTypeOnCommit() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(true); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociationOnCommit(childAssocRef, true); + } + + /** + * Given that we try to add hidden cm:folder sub-type to a record folder, + * Then the operation is successful. + */ + @Test + public void testCreateHiddenFolderSubTypeOnCommit() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(true); + when(mockedNodeService.hasAspect(nodeRef, ASPECT_HIDDEN)).thenReturn(true); + + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociationOnCommit(childAssocRef, true); + } + + /** + * Given that we try to add non cm:folder sub-type to a record folder, + * Then the operation is successful. + */ + @Test + public void testCreateNonFolderSubTypeOnCommit() throws Exception + { + NodeRef recordFolderNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER); + QName type = AlfMock.generateQName(); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + + when(mockedDictionaryService.isSubClass(type, TYPE_FOLDER)).thenReturn(false); + + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordFolderNodeRef, nodeRef); + recordFolderType.onCreateChildAssociationOnCommit(childAssocRef, true); + } +} From dd3117bdaa58b0a2c8b937052a143ac646937d54 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Mon, 14 Nov 2016 10:20:00 +0200 Subject: [PATCH 34/36] RM-4367: restricted types created under record category and added unit tests for RecordCategoryType --- .../model/rma/type/RecordCategoryType.java | 17 +-- .../rma/type/RecordCategoryTypeUnitTest.java | 111 ++++++++++++++++++ 2 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java index 8a16406151..a060a18a21 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java @@ -27,8 +27,10 @@ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.model.ContentModel; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.module.org_alfresco_module_rm.security.FilePlanPermissionService; @@ -61,6 +63,9 @@ public class RecordCategoryType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnCreateNodePolicy { + private final static List ACCEPTED_UNIQUE_CHILD_TYPES = new ArrayList(); + private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_RECORD_CATEGORY, TYPE_RECORD_FOLDER); + /** vital record service */ protected VitalRecordService vitalRecordService; @@ -106,13 +111,9 @@ public class RecordCategoryType extends BaseBehaviourBean ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) { - // ensure content is not placed directly into a record category NodeRef nodeRef = childAssocRef.getChildRef(); - if (instanceOf(nodeRef, ContentModel.TYPE_CONTENT)) - { - throw new AlfrescoRuntimeException("Operation failed, because you can't place content directly into a record category."); - } - + NodeRef parentRef = childAssocRef.getParentRef(); + validateNewChildAssociation(parentRef, nodeRef, ACCEPTED_UNIQUE_CHILD_TYPES, ACCEPTED_NON_UNIQUE_CHILD_TYPES); if (bNew) { // setup the record folder diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java new file mode 100644 index 0000000000..4b264f3c70 --- /dev/null +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryTypeUnitTest.java @@ -0,0 +1,111 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * 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 . + * #L% + */ + +package org.alfresco.module.org_alfresco_module_rm.model.rma.type; + +import static org.mockito.Mockito.when; + +import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.module.org_alfresco_module_rm.test.util.MockAuthenticationUtilHelper; +import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil; +import org.alfresco.module.org_alfresco_module_rm.vital.VitalRecordService; +import org.alfresco.repo.node.integrity.IntegrityException; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +/** + * Unit test class for RecordCategoryType + * + * @author Silviu Dinuta + * @since 2.6 + * + */ +public class RecordCategoryTypeUnitTest extends BaseUnitTest +{ + @Mock + private AuthenticationUtil mockAuthenticationUtil; + + @Mock + private VitalRecordService mockedVitalRecordService; + + private @InjectMocks RecordCategoryType recordCategoryType; + + @Before + public void setup() + { + MockitoAnnotations.initMocks(this); + MockAuthenticationUtilHelper.setup(mockAuthenticationUtil); + when(mockedApplicationContext.getBean("dbNodeService")).thenReturn(mockedNodeService); + } + + /** + * Given that we try to add types different than "rma:recordCategory" and "rma:recordFolder" to a record category, + * Then IntegrityException is thrown. + */ + @Test(expected = IntegrityException.class) + public void testCreateNonAceptedTypes() throws Exception + { + NodeRef recordCategoryNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY); + QName type = AlfMock.generateQName(); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef); + recordCategoryType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add "rma:recordCategory" type to a record category, + * Then operation is successful. + */ + @Test + public void testCreateRecordCategory() throws Exception + { + NodeRef recordCategoryNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef); + recordCategoryType.onCreateChildAssociation(childAssocRef, true); + } + + /** + * Given that we try to add "rma:recordFolder" type to a record category, + * Then operation is successful. + */ + @Test + public void testCreateRecordFolder() throws Exception + { + NodeRef recordCategoryNodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_CATEGORY); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, TYPE_RECORD_FOLDER, true); + ChildAssociationRef childAssocRef = generateChildAssociationRef(recordCategoryNodeRef, nodeRef); + recordCategoryType.onCreateChildAssociation(childAssocRef, true); + } +} From 515475b87020fb3d2b703153099f74304d92ca38 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Mon, 14 Nov 2016 11:21:32 +0200 Subject: [PATCH 35/36] RM-4327: extracted error messages for type restrictions in action.service.properties --- .../messages/action-service.properties | 7 ++++++- .../model/BaseBehaviourBean.java | 11 ++++++++--- .../model/rma/type/RecordFolderType.java | 6 +++--- .../model/rma/type/RmSiteType.java | 3 ++- .../model/rma/type/TransferContainerType.java | 3 ++- .../model/rma/type/TransferType.java | 4 +++- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties index 2c89111f41..fe9a6d959e 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties @@ -36,7 +36,12 @@ rm.action.records_only_undeclared=You can only complete records. rm.action.event-not-undone=You can't undo the event {0} because it's not defined on the retention lifecycle. rm.action.node-not-record-category=You can't create a retention schedule for ({0}) because it's not a record category. rm.action.parameter-not-supplied=Add a ''{0}'' to continue. -rm.action.delete-not-hold-type=We couldn't delete the hold because {1} isn't of type {0}. +rm.action.delete-not-hold-type=We couldn't delete the hold because {1} isn't of type {0}. rm.action.cast-to-rm-type=You can't upload a custom folder type to the records management file plan. rm.action.record-folder-create=You can't create a record folder in another record folder. +rm.action.unique.child.type-error-message=Operation failed. Multiple children of this type are not allowed. +rm.action.multiple.children.type-error-message=Operation failed. Children of type {0} are not allowed +rm.action.create.transfer.container.child-error-message=Operation failed. Creation is not allowed in Transfer Container. +rm.action.create.transfer.child-error-message=Operation failed. Creation is not allowed in Transfer Folders. +rm.action.create.record.folder.child-error-message=Only records can be created in record folders but it was {0} diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java index de61dcc7c7..306740dae1 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/BaseBehaviourBean.java @@ -40,6 +40,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.surf.util.I18NUtil; import com.google.common.collect.Sets; @@ -56,6 +57,10 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl /** Logger */ protected static final Log LOGGER = LogFactory.getLog(BaseBehaviourBean.class); + /** I18N */ + protected static final String UNIQUE_CHILD_TYPE_ERROR = "rm.action.unique.child.type-error-message"; + protected static final String MULTIPLE_CHILDREN_TYPE_ERROR = "rm.action.multiple.children.type-error-message"; + /** behaviour filter */ protected BehaviourFilter behaviourFilter; @@ -109,12 +114,12 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl // check the user is not trying to create multiple children of a type that is only accepted once if(nodeService.getChildAssocs(parent, Sets.newHashSet(childType)).size() > 1) { - throw new IntegrityException("Operation failed. Multiple children of this type are not allowed.", null); + throw new IntegrityException(I18NUtil.getMessage(UNIQUE_CHILD_TYPE_ERROR), null); } } else if(!acceptedMultipleChildType.contains(childType)) { - throw new IntegrityException("Operation failed. Children of type " + childType + " are not allowed", null); + throw new IntegrityException(I18NUtil.getMessage(MULTIPLE_CHILDREN_TYPE_ERROR, childType), null); } } @@ -135,6 +140,6 @@ public abstract class BaseBehaviourBean extends ServiceBaseImpl } } //no match was found in sub-types of permitted types list - throw new IntegrityException("Operation failed. Children of type " + childType + " are not allowed", null); + throw new IntegrityException(I18NUtil.getMessage(MULTIPLE_CHILDREN_TYPE_ERROR, childType), null); } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 9fb22a875c..bf43fc7210 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -78,7 +78,7 @@ public class RecordFolderType extends AbstractDisposableItem protected VitalRecordService vitalRecordService; /** I18N */ - private static final String MSG_CANNOT_CREATE_RECORD_FOLDER = "rm.action.record-folder-create"; + private static final String MSG_CANNOT_CREATE_RECORD_FOLDER_CHILD = "rm.action.create.record.folder.child-error-message"; /** * @param recordService record service @@ -228,7 +228,7 @@ public class RecordFolderType extends AbstractDisposableItem if (!instanceOf(nodeRef, ContentModel.TYPE_CONTENT) && notFolderOrRmFolderSubType) { - throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER), null); + throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER_CHILD, nodeService.getType(nodeRef)), null); } // ensure nothing is being added to a closed record folder NodeRef recordFolder = childAssocRef.getParentRef(); @@ -258,7 +258,7 @@ public class RecordFolderType extends AbstractDisposableItem // only records can be added in a record folder or hidden folders(is the case of e-mail attachments) if (instanceOf(recordFolder, ContentModel.TYPE_FOLDER) && !nodeService.hasAspect(recordFolder, ContentModel.ASPECT_HIDDEN)) { - throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER), null); + throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_RECORD_FOLDER_CHILD, nodeService.getType(recordFolder)), null); } behaviourFilter.disableBehaviour(); diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java index 4dce98a20c..82eb0b57ac 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RmSiteType.java @@ -59,6 +59,7 @@ import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.QName; import org.alfresco.util.ParameterCheck; import org.alfresco.util.PropertyMap; +import org.springframework.extensions.surf.util.I18NUtil; import com.google.common.collect.Sets; @@ -350,7 +351,7 @@ public class RmSiteType extends BaseBehaviourBean // check the user is not trying to create more than 2 folders that are created by default. if(nodeService.getChildAssocs(parent, Sets.newHashSet(ContentModel.TYPE_FOLDER)).size() > 2) { - throw new IntegrityException("Operation failed. Children of type " + ContentModel.TYPE_FOLDER + " are not allowed", null); + throw new IntegrityException(I18NUtil.getMessage(MULTIPLE_CHILDREN_TYPE_ERROR, ContentModel.TYPE_FOLDER), null); } } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java index 6c9657a543..d0fba4ff99 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java @@ -49,6 +49,7 @@ public class TransferContainerType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnCreateNodePolicy { private final static String MSG_ERROR_ADD_CONTENT_CONTAINER = "rm.service.error-add-content-container"; + private final static String MSG_ERROR_ADD_CHILD_TO_TRANSFER_CONTAINER = "rm.action.create.transfer.container.child-error-message"; private static final String BEHAVIOUR_NAME = "onCreateChildAssocsForTransferContainer"; /** @@ -83,7 +84,7 @@ public class TransferContainerType extends BaseBehaviourBean ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) { - throw new IntegrityException("Operation failed. Creation is not allowed in Transfer Container", null); + throw new IntegrityException(I18NUtil.getMessage(MSG_ERROR_ADD_CHILD_TO_TRANSFER_CONTAINER), null); } @Override diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java index 0d8bba494d..aa8be553e4 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferType.java @@ -34,6 +34,7 @@ import org.alfresco.repo.policy.annotation.Behaviour; import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.springframework.extensions.surf.util.I18NUtil; /** * rma:transfer behaviour bean @@ -44,6 +45,7 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef; @BehaviourBean(defaultType = "rma:transfer") public class TransferType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy { + private final static String MSG_ERROR_ADD_CHILD_TO_TRANSFER = "rm.action.create.transfer.child-error-message"; private static final String BEHAVIOUR_NAME = "onCreateChildAssocsForTransferType"; /** @@ -75,6 +77,6 @@ public class TransferType extends BaseBehaviourBean implements NodeServicePolici ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode) { - throw new IntegrityException("Operation failed. Creation is not allowed in Transfer Folders", null); + throw new IntegrityException(I18NUtil.getMessage(MSG_ERROR_ADD_CHILD_TO_TRANSFER), null); } } From 70216c44d476d62b6c823378b4746ba8def768db Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Mon, 14 Nov 2016 12:20:18 +0200 Subject: [PATCH 36/36] RM-4368: change entity resource name from sites to ig-sites --- .../org/alfresco/rm/rest/api/sites/RMSiteEntityResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/sites/RMSiteEntityResource.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/sites/RMSiteEntityResource.java index eb11498de8..903d19e41c 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/sites/RMSiteEntityResource.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/sites/RMSiteEntityResource.java @@ -46,7 +46,7 @@ import org.alfresco.rm.rest.api.model.SiteUpdate; * @since 2.6 * */ -@EntityResource(name = "sites", title = "IG Sites") +@EntityResource(name = "ig-sites", title = "IG Sites") public class RMSiteEntityResource implements EntityResourceAction.Delete, EntityResourceAction.Create, EntityResourceAction.Update, EntityResourceAction.ReadById {