diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
index a579ccda39..451ec7e270 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml
@@ -105,6 +105,8 @@
+
+
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionActionImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionActionImpl.java
index 6af426aa63..2661a5b61b 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionActionImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionActionImpl.java
@@ -472,28 +472,33 @@ public class DispositionActionImpl implements DispositionAction,
if (!events.isEmpty())
{
- if (!getDispositionActionDefinition().eligibleOnFirstCompleteEvent())
- {
- // if one event is complete then the disposition action is eligible
- eligible = true;
- for (EventCompletionDetails event : events)
+ // get the disposition action definition
+ DispositionActionDefinition dispositionActionDefinition = getDispositionActionDefinition();
+ if (dispositionActionDefinition != null)
+ {
+ if (!dispositionActionDefinition.eligibleOnFirstCompleteEvent())
{
- if (!event.isEventComplete())
+ // if one event is complete then the disposition action is eligible
+ eligible = true;
+ for (EventCompletionDetails event : events)
{
- eligible = false;
- break;
+ if (!event.isEventComplete())
+ {
+ eligible = false;
+ break;
+ }
}
}
- }
- else
- {
- // all events must be complete for the disposition action to be eligible
- for (EventCompletionDetails event : events)
+ else
{
- if (event.isEventComplete())
+ // all events must be complete for the disposition action to be eligible
+ for (EventCompletionDetails event : events)
{
- eligible = true;
- break;
+ if (event.isEventComplete())
+ {
+ eligible = true;
+ break;
+ }
}
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/AbstractDisposableItem.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/AbstractDisposableItem.java
new file mode 100644
index 0000000000..5a8d161bd7
--- /dev/null
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/behaviour/AbstractDisposableItem.java
@@ -0,0 +1,65 @@
+/**
+ *
+ */
+package org.alfresco.module.org_alfresco_module_rm.model.behaviour;
+
+import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction;
+import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
+import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.namespace.QName;
+
+/**
+ * Abstract disposable item, containing commonality between record and record folder.
+ *
+ * @author Roy Wetherall
+ * @since 2.2
+ */
+public abstract class AbstractDisposableItem extends BaseBehaviourBean
+{
+ /** unwanted aspects */
+ protected QName[] unwantedAspects =
+ {
+ ASPECT_VITAL_RECORD,
+ ASPECT_DISPOSITION_LIFECYCLE,
+ RecordsManagementSearchBehaviour.ASPECT_RM_SEARCH
+ };
+
+ /** disposition service */
+ protected DispositionService dispositionService;
+
+ /**
+ * @param dispositionService disposition service
+ */
+ public void setDispositionService(DispositionService dispositionService)
+ {
+ this.dispositionService = dispositionService;
+ }
+
+ /**
+ * Removes unwanted aspects
+ *
+ * @param nodeService
+ * @param nodeRef
+ */
+ protected void cleanDisposableItem(NodeService nodeService, NodeRef nodeRef)
+ {
+ // Remove unwanted aspects
+ for (QName aspect : unwantedAspects)
+ {
+ if (nodeService.hasAspect(nodeRef, aspect))
+ {
+ nodeService.removeAspect(nodeRef, aspect);
+ }
+ }
+
+ // remove the current disposition action (if there is one)
+ DispositionAction dispositionAction = dispositionService.getNextDispositionAction(nodeRef);
+ if (dispositionAction != null)
+ {
+ nodeService.deleteNode(dispositionAction.getNodeRef());
+ }
+ }
+
+}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
index e2b55580e1..15106e3e76 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/aspect/RecordAspect.java
@@ -25,9 +25,9 @@ import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies;
-import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel;
-import org.alfresco.module.org_alfresco_module_rm.model.behaviour.RecordsManagementSearchBehaviour;
+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.security.ExtendedSecurityService;
import org.alfresco.repo.copy.CopyBehaviourCallback;
import org.alfresco.repo.copy.CopyDetails;
@@ -54,7 +54,7 @@ import org.alfresco.service.namespace.QName;
(
defaultType = "rma:record"
)
-public class RecordAspect extends BaseBehaviourBean
+public class RecordAspect extends AbstractDisposableItem
implements NodeServicePolicies.OnCreateChildAssociationPolicy,
RecordsManagementPolicies.OnCreateReference,
RecordsManagementPolicies.OnRemoveReference,
@@ -69,6 +69,9 @@ public class RecordAspect extends BaseBehaviourBean
/** script service */
protected ScriptService scriptService;
+
+ /** record service */
+ protected RecordService recordService;
/**
* @param extendedSecurityService extended security service
@@ -85,6 +88,14 @@ public class RecordAspect extends BaseBehaviourBean
{
this.scriptService = scriptService;
}
+
+ /**
+ * @param recordService record service
+ */
+ public void setRecordService(RecordService recordService)
+ {
+ this.recordService = recordService;
+ }
/**
* Behaviour to ensure renditions have the appropriate extended security.
@@ -219,15 +230,18 @@ public class RecordAspect extends BaseBehaviourBean
// check the records parent has actually changed
if (!oldChildAssocRef.getParentRef().equals(newChildAssocRef.getParentRef()))
{
- final NodeRef newNodeRef = newChildAssocRef.getChildRef();
+ final NodeRef record = newChildAssocRef.getChildRef();
AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork