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 99d02683da..1319ba79ef 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
@@ -57,7 +57,7 @@
-
+
diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-version-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-version-context.xml
index 224648258d..42cb478e25 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-version-context.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-version-context.xml
@@ -19,6 +19,7 @@
+
@@ -33,7 +34,7 @@
-
+
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/ObjectType.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/CmObjectType.java
similarity index 78%
rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/ObjectType.java
rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/CmObjectType.java
index 947606e6f1..bcafbfc2e8 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/ObjectType.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/CmObjectType.java
@@ -42,15 +42,58 @@ import org.alfresco.service.namespace.QName;
(
defaultType = "cm:cmobject"
)
-public class ObjectType extends BaseBehaviourBean implements NodeServicePolicies.OnMoveNodePolicy, CopyServicePolicies.BeforeCopyPolicy
+public class CmObjectType extends BaseBehaviourBean implements NodeServicePolicies.OnMoveNodePolicy, CopyServicePolicies.BeforeCopyPolicy
{
+ /** Move behaviour name */
+ private static final String MOVE_BEHAVIOUR_NAME = "onMoveCmObjectType";
+
+ /** Copy behaviour name */
+ private static final String COPY_BEHAVIOUR_NAME = "onCopyCmObjectType";
+
+ /**
+ * Disable the move behaviour for this transaction
+ *
+ */
+ public void disableMove()
+ {
+ getBehaviour(MOVE_BEHAVIOUR_NAME).disable();
+ }
+
+ /**
+ * Enable the move behaviour for this transaction
+ *
+ */
+ public void enableMove()
+ {
+ getBehaviour(MOVE_BEHAVIOUR_NAME).enable();
+ }
+
+ /**
+ * Disable the copy behaviour for this transaction
+ *
+ */
+ public void disableCopy()
+ {
+ getBehaviour(COPY_BEHAVIOUR_NAME).disable();
+ }
+
+ /**
+ * Enable the copy behaviour for this transaction
+ *
+ */
+ public void enableCopy()
+ {
+ getBehaviour(COPY_BEHAVIOUR_NAME).enable();
+ }
+
/**
* @see org.alfresco.repo.node.NodeServicePolicies.OnMoveNodePolicy#onMoveNode(org.alfresco.service.cmr.repository.ChildAssociationRef, org.alfresco.service.cmr.repository.ChildAssociationRef)
*/
@Override
@Behaviour
(
- kind = BehaviourKind.CLASS
+ kind = BehaviourKind.CLASS,
+ name = MOVE_BEHAVIOUR_NAME
)
public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef)
{
@@ -92,11 +135,11 @@ public class ObjectType extends BaseBehaviourBean implements NodeServicePolicies
@Override
@Behaviour
(
- kind = BehaviourKind.CLASS
+ kind = BehaviourKind.CLASS,
+ name = COPY_BEHAVIOUR_NAME
)
public void beforeCopy(QName classRef, NodeRef sourceNodeRef, NodeRef targetNodeRef)
{
- /*
mandatory("sourceNodeRef", sourceNodeRef);
mandatory("targetNodeRef", targetNodeRef);
@@ -118,6 +161,5 @@ public class ObjectType extends BaseBehaviourBean implements NodeServicePolicies
{
throw new AlfrescoRuntimeException("Nothing can be copied from a collaboration site into a RM site.");
}
- */
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
index bf6f64c1fc..5094eef9f4 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/version/RecordableVersionServiceImpl.java
@@ -29,6 +29,7 @@ import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
+import org.alfresco.module.org_alfresco_module_rm.model.rma.type.CmObjectType;
import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService;
@@ -76,13 +77,16 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
/** relationship service */
private RelationshipService relationshipService;
-
+
/** record service */
private RecordService recordService;
-
+
/** model security service */
private ModelSecurityService modelSecurityService;
+ /** cm object type */
+ private CmObjectType cmObjectType;
+
/**
* @param filePlanService file plan service
*/
@@ -106,7 +110,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
{
this.relationshipService = relationshipService;
}
-
+
/**
* @param recordService record service
*/
@@ -114,7 +118,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
{
this.recordService = recordService;
}
-
+
/**
* @param modelSecurityService model security service
*/
@@ -123,6 +127,14 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
this.modelSecurityService = modelSecurityService;
}
+ /**
+ * @param cmObjectType the cmObjectType to set
+ */
+ public void setCmObjectType(CmObjectType cmObjectType)
+ {
+ this.cmObjectType = cmObjectType;
+ }
+
/**
* @see org.alfresco.repo.version.Version2ServiceImpl#createVersion(org.alfresco.service.cmr.repository.NodeRef, java.util.Map, int)
*/
@@ -285,10 +297,10 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
// disable other behaviours that we don't want to trigger during this process
policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT);
policyBehaviourFilter.disableBehaviour(ContentModel.TYPE_MULTILINGUAL_CONTAINER);
-
+
// disable model security check
modelSecurityService.disable();
-
+
// disable property editable check
recordService.disablePropertyEditableCheck();
@@ -304,51 +316,59 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
// create a copy of the source node and place in the file plan
final NodeRef nodeRef = (NodeRef)standardVersionProperties.get(Version2Model.PROP_QNAME_FROZEN_NODE_REF);
- // create record
- final NodeRef record = recordService.createRecordFromCopy(filePlan, nodeRef);
+ cmObjectType.disableCopy();
+ try
+ {
+ // create record
+ final NodeRef record = recordService.createRecordFromCopy(filePlan, nodeRef);
- // apply version record aspect to record
- PropertyMap versionRecordProps = new PropertyMap(3);
- versionRecordProps.put(PROP_VERSIONED_NODEREF, nodeRef);
- versionRecordProps.put(RecordableVersionModel.PROP_VERSION_LABEL,
- standardVersionProperties.get(
- QName.createQName(Version2Model.NAMESPACE_URI,
- Version2Model.PROP_VERSION_LABEL)));
- versionRecordProps.put(RecordableVersionModel.PROP_VERSION_DESCRIPTION,
- standardVersionProperties.get(
- QName.createQName(Version2Model.NAMESPACE_URI,
- Version2Model.PROP_VERSION_DESCRIPTION)));
- nodeService.addAspect(record, ASPECT_VERSION_RECORD, versionRecordProps);
+ // apply version record aspect to record
+ PropertyMap versionRecordProps = new PropertyMap(3);
+ versionRecordProps.put(PROP_VERSIONED_NODEREF, nodeRef);
+ versionRecordProps.put(RecordableVersionModel.PROP_VERSION_LABEL,
+ standardVersionProperties.get(
+ QName.createQName(Version2Model.NAMESPACE_URI,
+ Version2Model.PROP_VERSION_LABEL)));
+ versionRecordProps.put(RecordableVersionModel.PROP_VERSION_DESCRIPTION,
+ standardVersionProperties.get(
+ QName.createQName(Version2Model.NAMESPACE_URI,
+ Version2Model.PROP_VERSION_DESCRIPTION)));
+ nodeService.addAspect(record, ASPECT_VERSION_RECORD, versionRecordProps);
- // wire record up to previous record
- linkToPreviousVersionRecord(nodeRef, record);
+ // wire record up to previous record
+ linkToPreviousVersionRecord(nodeRef, record);
- // create version nodeRef
- ChildAssociationRef childAssocRef = dbNodeService.createNode(
- versionHistoryRef,
- Version2Model.CHILD_QNAME_VERSIONS,
- QName.createQName(Version2Model.NAMESPACE_URI, Version2Model.CHILD_VERSIONS + "-" + versionNumber),
- sourceTypeRef,
- null);
- versionNodeRef = childAssocRef.getChildRef();
+ // create version nodeRef
+ ChildAssociationRef childAssocRef = dbNodeService.createNode(
+ versionHistoryRef,
+ Version2Model.CHILD_QNAME_VERSIONS,
+ QName.createQName(Version2Model.NAMESPACE_URI, Version2Model.CHILD_VERSIONS + "-" + versionNumber),
+ sourceTypeRef,
+ null);
+ versionNodeRef = childAssocRef.getChildRef();
- // add aspect with the standard version properties to the 'version' node
- nodeService.addAspect(versionNodeRef, Version2Model.ASPECT_VERSION, standardVersionProperties);
+ // add aspect with the standard version properties to the 'version' node
+ nodeService.addAspect(versionNodeRef, Version2Model.ASPECT_VERSION, standardVersionProperties);
- // add the recordedVersion aspect with link to record
- nodeService.addAspect(versionNodeRef, ASPECT_RECORDED_VERSION, Collections.singletonMap(PROP_RECORD_NODE_REF, (Serializable)record));
+ // add the recordedVersion aspect with link to record
+ nodeService.addAspect(versionNodeRef, ASPECT_RECORDED_VERSION, Collections.singletonMap(PROP_RECORD_NODE_REF, (Serializable)record));
- // freeze auditable aspect information
- freezeAuditableAspect(nodeRef, versionNodeRef);
+ // freeze auditable aspect information
+ freezeAuditableAspect(nodeRef, versionNodeRef);
+ }
+ finally
+ {
+ cmObjectType.enableCopy();
+ }
}
finally
{
// enable model security check
modelSecurityService.enable();
-
+
// enable property editable check
recordService.enablePropertyEditableCheck();
-
+
// Enable behaviours
this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_VERSIONABLE);
this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT);
@@ -368,10 +388,10 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
return versionNodeRef;
}
-
+
/**
* Helper method to link the record to the previous version record
- *
+ *
* @param nodeRef noderef source node reference
* @param record record record node reference
*/
@@ -390,19 +410,19 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
return null;
}
});
- }
+ }
}
-
+
/**
* Helper to get the latest version record for a given document (ie non-record)
- *
+ *
* @param nodeRef node reference
* @return NodeRef latest version record, null otherwise
*/
private NodeRef getLatestVersionRecord(NodeRef nodeRef)
{
NodeRef versionRecord = null;
-
+
// wire record up to previous record
VersionHistory versionHistory = getVersionHistory(nodeRef);
if (versionHistory != null)
@@ -418,9 +438,9 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
break;
}
}
- }
-
- return versionRecord;
+ }
+
+ return versionRecord;
}
/**
diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java
index b73a1f1df5..100ef501fc 100755
--- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java
+++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/issue/IssueTestSuite.java
@@ -43,8 +43,8 @@ import org.junit.runners.Suite.SuiteClasses;
RM994Test.class,
RM1039Test.class,
RM1799Test.class,
- RM1814Test.class/*,
- RM978Test.class*/
+ RM1814Test.class,
+ RM978Test.class
})
public class IssueTestSuite
{
diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java
index 079a1f33d9..f684370515 100644
--- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java
+++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java
@@ -38,6 +38,7 @@ import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldService;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
+import org.alfresco.module.org_alfresco_module_rm.model.rma.type.CmObjectType;
import org.alfresco.module.org_alfresco_module_rm.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService;
@@ -124,6 +125,7 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
@Mock(name="extendedPermissionService") protected ExtendedPermissionService mockedExtendedPermissionService;
@Mock(name="extendedSecurityService") protected ExtendedSecurityService mockedExtendedSecurityService;
@Mock(name="recordableVersionConfigService") protected RecordableVersionConfigService mockedRecordableVersionConfigService;
+ @Mock(name="cmObjectType") protected CmObjectType cmObjectType;
/** application context mock */
@Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext;
@@ -222,9 +224,9 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
doReturn("admin").when(mockedAuthenticationUtil).getAdminUserName();
doReturn("admin").when(mockedAuthenticationUtil).getFullyAuthenticatedUser();
}
-
+
/**
- * Helper to generate random text value suitable for a property
+ * Helper to generate random text value suitable for a property
* value or node name
*/
protected String generateText()
@@ -405,7 +407,7 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
assocs.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child));
doReturn(assocs).when(mockedNodeService).getParentAssocs(child);
}
- doReturn(assocs).when(mockedNodeService).getChildAssocs(parent, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
+ doReturn(assocs).when(mockedNodeService).getChildAssocs(parent, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
}
@SuppressWarnings("unchecked")