diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index 58631a2149..71261bb47f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -894,79 +894,70 @@ public class DispositionServiceImpl extends ServiceBaseImpl @Override public boolean isNextDispositionActionEligible(NodeRef nodeRef) { - boolean result = false; - // Get the disposition instructions - DispositionSchedule di = getDispositionSchedule(nodeRef); - DispositionAction nextDa = getNextDispositionAction(nodeRef); - if (di != null && - this.nodeService.hasAspect(nodeRef, ASPECT_DISPOSITION_LIFECYCLE) && - nextDa != null) + return authenticationUtil.runAsSystem(new RunAsWork() { - // for accession step we can have also AND between step conditions - Boolean combineSteps = false; - if (nextDa.getName().equals("accession")) + public Boolean doWork() throws Exception { - NodeRef accessionNodeRef = di.getDispositionActionDefinitionByName("accession").getNodeRef(); - if (accessionNodeRef != null) { - Boolean combineStepsProp = (Boolean)this.nodeService.getProperty(accessionNodeRef, PROP_COMBINE_DISPOSITION_STEP_CONDITIONS); - if (combineStepsProp != null) - { - combineSteps = combineStepsProp; - } - } - } - Date asOf = (Date)this.nodeService.getProperty(nextDa.getNodeRef(), PROP_DISPOSITION_AS_OF); - Boolean asOfDateInPast = false; - if (asOf != null) - { - asOfDateInPast = asOf.before(new Date()); - } - if (asOfDateInPast && !combineSteps) - { - return true; - } - else if(!asOfDateInPast && combineSteps) - { - return false; - } - DispositionAction da = new DispositionActionImpl(serviceRegistry, nextDa.getNodeRef()); - DispositionActionDefinition dad = da.getDispositionActionDefinition(); - if (dad != null) - { - boolean firstComplete = dad.eligibleOnFirstCompleteEvent(); - - List assocs = this.nodeService.getChildAssocs(nextDa.getNodeRef(), ASSOC_EVENT_EXECUTIONS, RegexQNamePattern.MATCH_ALL); - for (ChildAssociationRef assoc : assocs) - { - NodeRef eventExecution = assoc.getChildRef(); - Boolean isCompleteValue = (Boolean)this.nodeService.getProperty(eventExecution, PROP_EVENT_EXECUTION_COMPLETE); - boolean isComplete = false; - if (isCompleteValue != null) - { - isComplete = isCompleteValue.booleanValue(); - - // implement AND and OR combination of event completions - if (isComplete) - { - result = true; - if (firstComplete) - { - break; + boolean result = false; + // Get the disposition instructions + DispositionSchedule di = getDispositionSchedule(nodeRef); + DispositionAction nextDa = getNextDispositionAction(nodeRef); + if (di != null && + nodeService.hasAspect(nodeRef, ASPECT_DISPOSITION_LIFECYCLE) && + nextDa != null) { + // for accession step we can have also AND between step conditions + Boolean combineSteps = false; + if (nextDa.getName().equals("accession")) { + NodeRef accessionNodeRef = di.getDispositionActionDefinitionByName("accession").getNodeRef(); + if (accessionNodeRef != null) { + Boolean combineStepsProp = (Boolean) nodeService.getProperty(accessionNodeRef, PROP_COMBINE_DISPOSITION_STEP_CONDITIONS); + if (combineStepsProp != null) { + combineSteps = combineStepsProp; } } - else - { - result = false; - if (!firstComplete) - { - break; + } + Date asOf = (Date) nodeService.getProperty(nextDa.getNodeRef(), PROP_DISPOSITION_AS_OF); + Boolean asOfDateInPast = false; + if (asOf != null) { + asOfDateInPast = asOf.before(new Date()); + } + if (asOfDateInPast && !combineSteps) { + return true; + } else if (!asOfDateInPast && combineSteps) { + return false; + } + DispositionAction da = new DispositionActionImpl(serviceRegistry, nextDa.getNodeRef()); + DispositionActionDefinition dad = da.getDispositionActionDefinition(); + if (dad != null) { + boolean firstComplete = dad.eligibleOnFirstCompleteEvent(); + + List assocs = nodeService.getChildAssocs(nextDa.getNodeRef(), ASSOC_EVENT_EXECUTIONS, RegexQNamePattern.MATCH_ALL); + for (ChildAssociationRef assoc : assocs) { + NodeRef eventExecution = assoc.getChildRef(); + Boolean isCompleteValue = (Boolean) nodeService.getProperty(eventExecution, PROP_EVENT_EXECUTION_COMPLETE); + boolean isComplete = false; + if (isCompleteValue != null) { + isComplete = isCompleteValue.booleanValue(); + + // implement AND and OR combination of event completions + if (isComplete) { + result = true; + if (firstComplete) { + break; + } + } else { + result = false; + if (!firstComplete) { + break; + } + } } } } } + return result; } - } - return result; + }); } /** diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java index 578c475847..d1b0a50374 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/jscript/app/JSONConversionComponent.java @@ -510,13 +510,14 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JS // Set the indicators array setIndicators(rmNodeValues, nodeRef); - AuthenticationUtil.runAsSystem(new RunAsWork() { - @Override - public Void doWork() { + // Set the actions array + setActions(rmNodeValues, nodeRef); + + AuthenticationUtil.runAsSystem(new RunAsWork() + { + public Void doWork() throws Exception + { - // Set the actions array - setActions(rmNodeValues, nodeRef); - //Add details of the next incomplete event in the disposition schedule if (dispositionService.getNextDispositionAction(nodeRef) != null) { @@ -525,9 +526,10 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JS if (!details.isEventComplete()) { HashMap properties = ((HashMap) rmNodeValues.get("properties")); - properties.put("combineDispositionStepConditions", nodeService.getProperty(dispositionService.getNextDispositionAction(nodeRef).getDispositionActionDefinition().getNodeRef(), PROP_COMBINE_DISPOSITION_STEP_CONDITIONS)); - properties.put("incompleteDispositionEvent", details.getEventName()); - properties.put("dispositionEventCombination", nodeService.getProperty(dispositionService.getNextDispositionAction(nodeRef).getDispositionActionDefinition().getNodeRef(), PROP_DISPOSITION_EVENT_COMBINATION)); + properties.put("combineDispositionStepConditions", nodeService.getProperty(dispositionService.getNextDispositionAction(nodeRef).getDispositionActionDefinition().getNodeRef(), PROP_COMBINE_DISPOSITION_STEP_CONDITIONS)); + properties.put("incompleteDispositionEvent", details.getEventName()); + properties.put("dispositionEventCombination", nodeService.getProperty(dispositionService.getNextDispositionAction(nodeRef).getDispositionActionDefinition().getNodeRef(), PROP_DISPOSITION_EVENT_COMBINATION)); + break; } }