From 7529a82c095da6e006a1197a322b1af166187456 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 24 Oct 2016 10:16:58 +0300 Subject: [PATCH 1/5] When the last step of the current disposition is completed, no more calculation is needed. --- .../disposition/DispositionServiceImpl.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 2111674ec5..91cb2be3bd 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 @@ -278,6 +278,13 @@ public class DispositionServiceImpl extends ServiceBaseImpl NodeRef dsNodeRef = null; if (isRecord(nodeRef)) { + DispositionSchedule originDispositionSchedule = getOriginDispositionSchedule(nodeRef); + // if the initial disposition schedule of the record is folder based + if (isNotTrue(originDispositionSchedule.isRecordLevelDisposition())) + { + return null; + } + final NextActionFromDisposition dsNextAction = getDispositionActionByNameForRecord(nodeRef); if (dsNextAction != null) @@ -1143,6 +1150,13 @@ public class DispositionServiceImpl extends ServiceBaseImpl if (nextDispositionAction == null) { + DispositionAction lastCompletedDispositionAction = getLastCompletedDispostionAction(record); + if (lastCompletedDispositionAction != null) + { + // all disposition actions upon the given record were completed + return null; + } + return getFirstDispositionAction(record, recordFolders); } else From 1f544e2d12279085d2b7093f0bc9ae62071dde84 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 24 Oct 2016 11:09:32 +0300 Subject: [PATCH 2/5] Added null check --- .../disposition/DispositionServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 91cb2be3bd..6e258baba3 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 @@ -280,7 +280,8 @@ public class DispositionServiceImpl extends ServiceBaseImpl { DispositionSchedule originDispositionSchedule = getOriginDispositionSchedule(nodeRef); // if the initial disposition schedule of the record is folder based - if (isNotTrue(originDispositionSchedule.isRecordLevelDisposition())) + if (originDispositionSchedule!= null && + isNotTrue(originDispositionSchedule.isRecordLevelDisposition())) { return null; } From bab20b2dc6322b6eebd18549677675d392e33ae8 Mon Sep 17 00:00:00 2001 From: roxana Date: Mon, 24 Oct 2016 15:30:37 +0300 Subject: [PATCH 3/5] I've tweaked the tests a bit to handle daylight savings. --- .../disposition/DispositionServiceImpl.java | 2 +- .../disposition/MultipleSchedulesTest.java | 21 ++++++++++++------- 2 files changed, 14 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 6e258baba3..297455098a 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 @@ -280,7 +280,7 @@ public class DispositionServiceImpl extends ServiceBaseImpl { DispositionSchedule originDispositionSchedule = getOriginDispositionSchedule(nodeRef); // if the initial disposition schedule of the record is folder based - if (originDispositionSchedule!= null && + if (originDispositionSchedule == null || isNotTrue(originDispositionSchedule.isRecordLevelDisposition())) { return null; 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 f97a7fee3a..f166c97a1f 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 @@ -3,11 +3,10 @@ package org.alfresco.module.org_alfresco_module_rm.test.integration.disposition; import static org.alfresco.module.org_alfresco_module_rm.test.util.bdt.BehaviourTest.test; import java.io.Serializable; +import java.util.Calendar; import java.util.Date; import java.util.Map; -import com.google.common.collect.ImmutableMap; - import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction; @@ -21,6 +20,8 @@ import org.alfresco.service.namespace.QName; import org.alfresco.util.ApplicationContextHelper; import org.springframework.extensions.webscripts.GUID; +import com.google.common.collect.ImmutableMap; + public class MultipleSchedulesTest extends BaseRMTestCase { /** A unique prefix for the constants in this test. */ @@ -118,6 +119,7 @@ public class MultipleSchedulesTest extends BaseRMTestCase */ public void testLinkedToLongerSchedule() { + Calendar calendar = Calendar.getInstance(); test() .given(() -> { setUpFilePlan(); @@ -130,11 +132,12 @@ public class MultipleSchedulesTest extends BaseRMTestCase dispositionService.cutoffDisposableItem(record); // Ensure the update has been applied to the record. internalDispositionService.updateNextDispositionAction(record); + calendar.setTime((Date) nodeService.getProperty(record, PROP_CUT_OFF_DATE)); + calendar.add(Calendar.WEEK_OF_YEAR, 1); }) .then() - .expect(7 * 24 * 60 * 60 * 1000L) - .from(() -> dispositionService.getNextDispositionAction(record).getAsOfDate().getTime() - - ((Date) nodeService.getProperty(record, PROP_CUT_OFF_DATE)).getTime()) + .expect(calendar.getTime()) + .from(() -> dispositionService.getNextDispositionAction(record).getAsOfDate()) .because("Record should follow largest rentention schedule period, which is one week."); } @@ -149,6 +152,7 @@ public class MultipleSchedulesTest extends BaseRMTestCase */ public void testLinkedToShorterSchedule() { + Calendar calendar = Calendar.getInstance(); test() .given(() -> { setUpFilePlan(); @@ -161,11 +165,12 @@ public class MultipleSchedulesTest extends BaseRMTestCase dispositionService.cutoffDisposableItem(record); // Ensure the update has been applied to the record. internalDispositionService.updateNextDispositionAction(record); + calendar.setTime((Date) nodeService.getProperty(record, PROP_CUT_OFF_DATE)); + calendar.add(Calendar.WEEK_OF_YEAR, 1); }) .then() - .expect(7 * 24 * 60 * 60 * 1000L) - .from(() -> dispositionService.getNextDispositionAction(record).getAsOfDate().getTime() - - ((Date) nodeService.getProperty(record, PROP_CUT_OFF_DATE)).getTime()) + .expect(calendar.getTime()) + .from(() -> dispositionService.getNextDispositionAction(record).getAsOfDate()) .because("Record should follow largest rentention schedule period, which is one week."); } } From 1d3bfe74a08fe66e2287fb94b4e5ed17357f7bbc Mon Sep 17 00:00:00 2001 From: roxana Date: Tue, 25 Oct 2016 15:51:39 +0300 Subject: [PATCH 4/5] Run as system when getting disposition schedule for a record. --- .../disposition/DispositionServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 297455098a..3a6e1d5beb 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 @@ -278,7 +278,15 @@ public class DispositionServiceImpl extends ServiceBaseImpl NodeRef dsNodeRef = null; if (isRecord(nodeRef)) { - DispositionSchedule originDispositionSchedule = getOriginDispositionSchedule(nodeRef); + // calculate disposition schedule without taking into account the user + DispositionSchedule originDispositionSchedule = AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public DispositionSchedule doWork() + { + return getOriginDispositionSchedule(nodeRef); + } + }); // if the initial disposition schedule of the record is folder based if (originDispositionSchedule == null || isNotTrue(originDispositionSchedule.isRecordLevelDisposition())) From 1acd25241e697801b9f49a459a3e7feaf37684e1 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 27 Oct 2016 12:30:05 +0100 Subject: [PATCH 5/5] Update version to 2.3.2-SNAPSHOT. --- pom.xml | 2 +- rm-automation/pom.xml | 2 +- rm-server/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 7d56dd2c18..70593388a6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.alfresco alfresco-rm-parent pom - 2.3.1-SNAPSHOT + 2.3.2-SNAPSHOT Alfresco Records Management http://www.alfresco.org/ diff --git a/rm-automation/pom.xml b/rm-automation/pom.xml index e88c8062f1..02900fdb16 100644 --- a/rm-automation/pom.xml +++ b/rm-automation/pom.xml @@ -8,7 +8,7 @@ org.alfresco alfresco-rm-parent - 2.3.1-SNAPSHOT + 2.3.2-SNAPSHOT diff --git a/rm-server/pom.xml b/rm-server/pom.xml index 7d347cf2a7..8803399995 100644 --- a/rm-server/pom.xml +++ b/rm-server/pom.xml @@ -5,7 +5,7 @@ org.alfresco alfresco-rm-parent - 2.3.1-SNAPSHOT + 2.3.2-SNAPSHOT 4.0.0 alfresco-rm-server