From 31fb488b0ccc6eeb7f8709fdc0bfcaa7b38f5a5d Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Fri, 30 Jan 2015 13:17:30 +0000 Subject: [PATCH] RM-978 (Unable to navigate to copied folder from a collaboration site to RM site) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/BRANCHES/V2.3@94453 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rm-model-context.xml | 2 +- .../rm-version-context.xml | 3 +- .../{ObjectType.java => CmObjectType.java} | 52 +++++++- .../version/RecordableVersionServiceImpl.java | 114 ++++++++++-------- .../integration/issue/IssueTestSuite.java | 4 +- .../test/util/BaseUnitTest.java | 8 +- 6 files changed, 124 insertions(+), 59 deletions(-) rename rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/{ObjectType.java => CmObjectType.java} (78%) 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")