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
This commit is contained in:
Tuna Aksoy
2015-01-30 13:17:30 +00:00
parent 96bc46f689
commit 31fb488b0c
6 changed files with 124 additions and 59 deletions

View File

@@ -57,7 +57,7 @@
</bean> </bean>
<!-- dm model type --> <!-- dm model type -->
<bean id="dm.object" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.ObjectType" parent="rm.baseBehaviour"/> <bean id="cm.object" class="org.alfresco.module.org_alfresco_module_rm.model.rma.type.CmObjectType" parent="rm.baseBehaviour"/>
<!-- rma model types --> <!-- rma model types -->

View File

@@ -19,6 +19,7 @@
<property name="relationshipService" ref="RelationshipService" /> <property name="relationshipService" ref="RelationshipService" />
<property name="recordService" ref="RecordService" /> <property name="recordService" ref="RecordService" />
<property name="modelSecurityService" ref="ModelSecurityService" /> <property name="modelSecurityService" ref="ModelSecurityService" />
<property name="cmObjectType" ref="cm.object" />
</bean> </bean>
<bean class="org.alfresco.util.BeanExtender"> <bean class="org.alfresco.util.BeanExtender">
<property name="beanName" value="versionService" /> <property name="beanName" value="versionService" />
@@ -33,7 +34,7 @@
<property name="beanName" value="versionNodeService" /> <property name="beanName" value="versionNodeService" />
<property name="extendingBeanName" value="rm.versionNodeService" /> <property name="extendingBeanName" value="rm.versionNodeService" />
</bean> </bean>
<!-- rmv:versionable aspect behaviour bean --> <!-- rmv:versionable aspect behaviour bean -->
<bean id="rm.versionableAspect" class="org.alfresco.module.org_alfresco_module_rm.version.model.VersionableAspect" parent="rm.baseBehaviour"> <bean id="rm.versionableAspect" class="org.alfresco.module.org_alfresco_module_rm.version.model.VersionableAspect" parent="rm.baseBehaviour">
</bean> </bean>

View File

@@ -42,15 +42,58 @@ import org.alfresco.service.namespace.QName;
( (
defaultType = "cm:cmobject" 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) * @see org.alfresco.repo.node.NodeServicePolicies.OnMoveNodePolicy#onMoveNode(org.alfresco.service.cmr.repository.ChildAssociationRef, org.alfresco.service.cmr.repository.ChildAssociationRef)
*/ */
@Override @Override
@Behaviour @Behaviour
( (
kind = BehaviourKind.CLASS kind = BehaviourKind.CLASS,
name = MOVE_BEHAVIOUR_NAME
) )
public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef)
{ {
@@ -92,11 +135,11 @@ public class ObjectType extends BaseBehaviourBean implements NodeServicePolicies
@Override @Override
@Behaviour @Behaviour
( (
kind = BehaviourKind.CLASS kind = BehaviourKind.CLASS,
name = COPY_BEHAVIOUR_NAME
) )
public void beforeCopy(QName classRef, NodeRef sourceNodeRef, NodeRef targetNodeRef) public void beforeCopy(QName classRef, NodeRef sourceNodeRef, NodeRef targetNodeRef)
{ {
/*
mandatory("sourceNodeRef", sourceNodeRef); mandatory("sourceNodeRef", sourceNodeRef);
mandatory("targetNodeRef", targetNodeRef); 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."); throw new AlfrescoRuntimeException("Nothing can be copied from a collaboration site into a RM site.");
} }
*/
} }
} }

View File

@@ -29,6 +29,7 @@ import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; 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.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService; import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService;
@@ -76,13 +77,16 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
/** relationship service */ /** relationship service */
private RelationshipService relationshipService; private RelationshipService relationshipService;
/** record service */ /** record service */
private RecordService recordService; private RecordService recordService;
/** model security service */ /** model security service */
private ModelSecurityService modelSecurityService; private ModelSecurityService modelSecurityService;
/** cm object type */
private CmObjectType cmObjectType;
/** /**
* @param filePlanService file plan service * @param filePlanService file plan service
*/ */
@@ -106,7 +110,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
{ {
this.relationshipService = relationshipService; this.relationshipService = relationshipService;
} }
/** /**
* @param recordService record service * @param recordService record service
*/ */
@@ -114,7 +118,7 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
{ {
this.recordService = recordService; this.recordService = recordService;
} }
/** /**
* @param modelSecurityService model security service * @param modelSecurityService model security service
*/ */
@@ -123,6 +127,14 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
this.modelSecurityService = modelSecurityService; 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) * @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 // disable other behaviours that we don't want to trigger during this process
policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT); policyBehaviourFilter.disableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT);
policyBehaviourFilter.disableBehaviour(ContentModel.TYPE_MULTILINGUAL_CONTAINER); policyBehaviourFilter.disableBehaviour(ContentModel.TYPE_MULTILINGUAL_CONTAINER);
// disable model security check // disable model security check
modelSecurityService.disable(); modelSecurityService.disable();
// disable property editable check // disable property editable check
recordService.disablePropertyEditableCheck(); recordService.disablePropertyEditableCheck();
@@ -304,51 +316,59 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
// create a copy of the source node and place in the file plan // 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); final NodeRef nodeRef = (NodeRef)standardVersionProperties.get(Version2Model.PROP_QNAME_FROZEN_NODE_REF);
// create record cmObjectType.disableCopy();
final NodeRef record = recordService.createRecordFromCopy(filePlan, nodeRef); try
{
// create record
final NodeRef record = recordService.createRecordFromCopy(filePlan, nodeRef);
// apply version record aspect to record // apply version record aspect to record
PropertyMap versionRecordProps = new PropertyMap(3); PropertyMap versionRecordProps = new PropertyMap(3);
versionRecordProps.put(PROP_VERSIONED_NODEREF, nodeRef); versionRecordProps.put(PROP_VERSIONED_NODEREF, nodeRef);
versionRecordProps.put(RecordableVersionModel.PROP_VERSION_LABEL, versionRecordProps.put(RecordableVersionModel.PROP_VERSION_LABEL,
standardVersionProperties.get( standardVersionProperties.get(
QName.createQName(Version2Model.NAMESPACE_URI, QName.createQName(Version2Model.NAMESPACE_URI,
Version2Model.PROP_VERSION_LABEL))); Version2Model.PROP_VERSION_LABEL)));
versionRecordProps.put(RecordableVersionModel.PROP_VERSION_DESCRIPTION, versionRecordProps.put(RecordableVersionModel.PROP_VERSION_DESCRIPTION,
standardVersionProperties.get( standardVersionProperties.get(
QName.createQName(Version2Model.NAMESPACE_URI, QName.createQName(Version2Model.NAMESPACE_URI,
Version2Model.PROP_VERSION_DESCRIPTION))); Version2Model.PROP_VERSION_DESCRIPTION)));
nodeService.addAspect(record, ASPECT_VERSION_RECORD, versionRecordProps); nodeService.addAspect(record, ASPECT_VERSION_RECORD, versionRecordProps);
// wire record up to previous record // wire record up to previous record
linkToPreviousVersionRecord(nodeRef, record); linkToPreviousVersionRecord(nodeRef, record);
// create version nodeRef // create version nodeRef
ChildAssociationRef childAssocRef = dbNodeService.createNode( ChildAssociationRef childAssocRef = dbNodeService.createNode(
versionHistoryRef, versionHistoryRef,
Version2Model.CHILD_QNAME_VERSIONS, Version2Model.CHILD_QNAME_VERSIONS,
QName.createQName(Version2Model.NAMESPACE_URI, Version2Model.CHILD_VERSIONS + "-" + versionNumber), QName.createQName(Version2Model.NAMESPACE_URI, Version2Model.CHILD_VERSIONS + "-" + versionNumber),
sourceTypeRef, sourceTypeRef,
null); null);
versionNodeRef = childAssocRef.getChildRef(); versionNodeRef = childAssocRef.getChildRef();
// add aspect with the standard version properties to the 'version' node // add aspect with the standard version properties to the 'version' node
nodeService.addAspect(versionNodeRef, Version2Model.ASPECT_VERSION, standardVersionProperties); nodeService.addAspect(versionNodeRef, Version2Model.ASPECT_VERSION, standardVersionProperties);
// add the recordedVersion aspect with link to record // add the recordedVersion aspect with link to record
nodeService.addAspect(versionNodeRef, ASPECT_RECORDED_VERSION, Collections.singletonMap(PROP_RECORD_NODE_REF, (Serializable)record)); nodeService.addAspect(versionNodeRef, ASPECT_RECORDED_VERSION, Collections.singletonMap(PROP_RECORD_NODE_REF, (Serializable)record));
// freeze auditable aspect information // freeze auditable aspect information
freezeAuditableAspect(nodeRef, versionNodeRef); freezeAuditableAspect(nodeRef, versionNodeRef);
}
finally
{
cmObjectType.enableCopy();
}
} }
finally finally
{ {
// enable model security check // enable model security check
modelSecurityService.enable(); modelSecurityService.enable();
// enable property editable check // enable property editable check
recordService.enablePropertyEditableCheck(); recordService.enablePropertyEditableCheck();
// Enable behaviours // Enable behaviours
this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_VERSIONABLE); this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_VERSIONABLE);
this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT); this.policyBehaviourFilter.enableBehaviour(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT);
@@ -368,10 +388,10 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
return versionNodeRef; return versionNodeRef;
} }
/** /**
* Helper method to link the record to the previous version record * Helper method to link the record to the previous version record
* *
* @param nodeRef noderef source node reference * @param nodeRef noderef source node reference
* @param record record record node reference * @param record record record node reference
*/ */
@@ -390,19 +410,19 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
return null; return null;
} }
}); });
} }
} }
/** /**
* Helper to get the latest version record for a given document (ie non-record) * Helper to get the latest version record for a given document (ie non-record)
* *
* @param nodeRef node reference * @param nodeRef node reference
* @return NodeRef latest version record, null otherwise * @return NodeRef latest version record, null otherwise
*/ */
private NodeRef getLatestVersionRecord(NodeRef nodeRef) private NodeRef getLatestVersionRecord(NodeRef nodeRef)
{ {
NodeRef versionRecord = null; NodeRef versionRecord = null;
// wire record up to previous record // wire record up to previous record
VersionHistory versionHistory = getVersionHistory(nodeRef); VersionHistory versionHistory = getVersionHistory(nodeRef);
if (versionHistory != null) if (versionHistory != null)
@@ -418,9 +438,9 @@ public class RecordableVersionServiceImpl extends Version2ServiceImpl
break; break;
} }
} }
} }
return versionRecord; return versionRecord;
} }
/** /**

View File

@@ -43,8 +43,8 @@ import org.junit.runners.Suite.SuiteClasses;
RM994Test.class, RM994Test.class,
RM1039Test.class, RM1039Test.class,
RM1799Test.class, RM1799Test.class,
RM1814Test.class/*, RM1814Test.class,
RM978Test.class*/ RM978Test.class
}) })
public class IssueTestSuite public class IssueTestSuite
{ {

View File

@@ -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.hold.HoldService;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService; 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.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.model.security.ModelSecurityService;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.recordableversion.RecordableVersionConfigService; 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="extendedPermissionService") protected ExtendedPermissionService mockedExtendedPermissionService;
@Mock(name="extendedSecurityService") protected ExtendedSecurityService mockedExtendedSecurityService; @Mock(name="extendedSecurityService") protected ExtendedSecurityService mockedExtendedSecurityService;
@Mock(name="recordableVersionConfigService") protected RecordableVersionConfigService mockedRecordableVersionConfigService; @Mock(name="recordableVersionConfigService") protected RecordableVersionConfigService mockedRecordableVersionConfigService;
@Mock(name="cmObjectType") protected CmObjectType cmObjectType;
/** application context mock */ /** application context mock */
@Mock(name="applicationContext") protected ApplicationContext mockedApplicationContext; @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).getAdminUserName();
doReturn("admin").when(mockedAuthenticationUtil).getFullyAuthenticatedUser(); 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 * value or node name
*/ */
protected String generateText() protected String generateText()
@@ -405,7 +407,7 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
assocs.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child)); assocs.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child));
doReturn(assocs).when(mockedNodeService).getParentAssocs(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") @SuppressWarnings("unchecked")