MNT-20145 Duplicate the content url when declaring node as record, version as record, classifying or securing if the node has copies or it is a copy

This commit is contained in:
cagache
2019-02-15 16:41:18 +02:00
parent 01f7bc013d
commit 54010f6ab9
7 changed files with 61 additions and 60 deletions

View File

@@ -143,7 +143,6 @@
<property name="recordService" ref="RecordService" /> <property name="recordService" ref="RecordService" />
<property name="dispositionService" ref="DispositionService" /> <property name="dispositionService" ref="DispositionService" />
<property name="quickShareService" ref="QuickShareService"/> <property name="quickShareService" ref="QuickShareService"/>
<property name="fileFolderService" ref="FileFolderService"/>
</bean> </bean>
<bean id="rma.recordComponentIdentifier" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordComponentIdentifierAspect" parent="rm.baseBehaviour"> <bean id="rma.recordComponentIdentifier" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.RecordComponentIdentifierAspect" parent="rm.baseBehaviour">

View File

@@ -45,6 +45,7 @@
<property name="authenticationUtil" ref="rm.authenticationUtil"/> <property name="authenticationUtil" ref="rm.authenticationUtil"/>
<property name="transactionalResourceHelper" ref="rm.transactionalResourceHelper" /> <property name="transactionalResourceHelper" ref="rm.transactionalResourceHelper" />
<property name="renditionService" ref="RenditionService" /> <property name="renditionService" ref="RenditionService" />
<property name="fileFolderService" ref="FileFolderService" />
</bean> </bean>
<!-- Records Management Service Registry --> <!-- Records Management Service Registry -->

View File

@@ -16,7 +16,6 @@
<bean id="rmv.versionRecord" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.VersionRecordAspect" parent="rm.baseBehaviour"> <bean id="rmv.versionRecord" class="org.alfresco.module.org_alfresco_module_rm.model.rma.aspect.VersionRecordAspect" parent="rm.baseBehaviour">
<property name="recordableVersionService" ref="RecordableVersionService" /> <property name="recordableVersionService" ref="RecordableVersionService" />
<property name="relationshipService" ref="RelationshipService" /> <property name="relationshipService" ref="RelationshipService" />
<property name="fileFolderService" ref="FileFolderService"/>
</bean> </bean>
<!-- extended version service bean definition --> <!-- extended version service bean definition -->

View File

@@ -215,10 +215,6 @@ public class ContentDestructionComponent
// get content data // get content data
ContentData dataContent = (ContentData)entry.getValue(); ContentData dataContent = (ContentData)entry.getValue();
// destroy the node's content properties only if it doesn't have copies or it is a copy
if (getNodeService().getTargetAssocs(nodeRef, ContentModel.ASSOC_ORIGINAL).isEmpty() &&
getNodeService().getSourceAssocs(nodeRef, ContentModel.ASSOC_ORIGINAL).isEmpty())
{
// if enabled cleanse content // if enabled cleanse content
if (isCleansingEnabled()) if (isCleansingEnabled())
{ {
@@ -230,7 +226,6 @@ public class ContentDestructionComponent
// register for immediate destruction // register for immediate destruction
getEagerContentStoreCleaner().registerOrphanedContentUrl(dataContent.getContentUrl(), true); getEagerContentStoreCleaner().registerOrphanedContentUrl(dataContent.getContentUrl(), true);
} }
}
// clear the property // clear the property
if (clearContentProperty) if (clearContentProperty)

View File

@@ -51,13 +51,9 @@ import org.alfresco.repo.policy.annotation.BehaviourBean;
import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.repo.policy.annotation.BehaviourKind;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.quickshare.QuickShareService; import org.alfresco.service.cmr.quickshare.QuickShareService;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.ScriptService; import org.alfresco.service.cmr.repository.ScriptService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
@@ -98,9 +94,6 @@ public class RecordAspect extends AbstractDisposableItem
/** quickShare service */ /** quickShare service */
private QuickShareService quickShareService; private QuickShareService quickShareService;
/** File folder service */
private FileFolderService fileFolderService;
/** I18N */ /** I18N */
private static final String MSG_CANNOT_UPDATE_RECORD_CONTENT = "rm.service.update-record-content"; private static final String MSG_CANNOT_UPDATE_RECORD_CONTENT = "rm.service.update-record-content";
@@ -137,15 +130,6 @@ public class RecordAspect extends AbstractDisposableItem
this.quickShareService = quickShareService; this.quickShareService = quickShareService;
} }
/**
*
* @param fileFolderService file folder service
*/
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService = fileFolderService;
}
/** /**
* Behaviour to ensure renditions have the appropriate extended security. * Behaviour to ensure renditions have the appropriate extended security.
* *
@@ -376,12 +360,7 @@ public class RecordAspect extends AbstractDisposableItem
extendedSecurityService.remove(targetNodeRef); extendedSecurityService.remove(targetNodeRef);
//create a new content URL for the copy //create a new content URL for the copy
ContentReader reader = fileFolderService.getReader(targetNodeRef); createNewContentURL(targetNodeRef);
if (reader != null)
{
ContentWriter writer = fileFolderService.getWriter(targetNodeRef);
writer.putContent(reader);
}
} }
} }
@@ -402,6 +381,7 @@ public class RecordAspect extends AbstractDisposableItem
/** /**
* Behaviour to remove the shared link before declare a record * Behaviour to remove the shared link before declare a record
* and to create new bin if the node is a copy or has copies
* *
* @see org.alfresco.repo.node.NodeServicePolicies.BeforeAddAspectPolicy#beforeAddAspect(org.alfresco.service.cmr.repository.NodeRef, * @see org.alfresco.repo.node.NodeServicePolicies.BeforeAddAspectPolicy#beforeAddAspect(org.alfresco.service.cmr.repository.NodeRef,
* org.alfresco.service.namespace.QName) * org.alfresco.service.namespace.QName)
@@ -421,6 +401,26 @@ public class RecordAspect extends AbstractDisposableItem
quickShareService.unshareContent(sharedId); quickShareService.unshareContent(sharedId);
} }
// if the node has a copy or is a copy of an existing node
if (!nodeService.getTargetAssocs(nodeRef, ContentModel.ASSOC_ORIGINAL).isEmpty() ||
!nodeService.getSourceAssocs(nodeRef, ContentModel.ASSOC_ORIGINAL).isEmpty())
{
//disabling versioning and auditing
behaviourFilter.disableBehaviour(ContentModel.ASPECT_AUDITABLE);
behaviourFilter.disableBehaviour(ContentModel.ASPECT_VERSIONABLE);
try
{
//create a new content URL for the copy/original node
createNewContentURL(nodeRef);
}
finally
{
//enable versioning and auditing
behaviourFilter.enableBehaviour(ContentModel.ASPECT_AUDITABLE);
behaviourFilter.enableBehaviour(ContentModel.ASPECT_VERSIONABLE);
}
}
return null; return null;
} }
}, AuthenticationUtil.getSystemUserName()); }, AuthenticationUtil.getSystemUserName());

View File

@@ -39,9 +39,6 @@ import org.alfresco.repo.policy.annotation.Behaviour;
import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourBean;
import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.repo.policy.annotation.BehaviourKind;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.version.Version; import org.alfresco.service.cmr.version.Version;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
@@ -66,9 +63,6 @@ public class VersionRecordAspect extends BaseBehaviourBean
/** relationship service */ /** relationship service */
private RelationshipService relationshipService; private RelationshipService relationshipService;
/** File folder service */
private FileFolderService fileFolderService;
/** /**
* @param recordableVersionService recordable version service * @param recordableVersionService recordable version service
*/ */
@@ -85,15 +79,6 @@ public class VersionRecordAspect extends BaseBehaviourBean
this.relationshipService = relationshipService; this.relationshipService = relationshipService;
} }
/**
*
* @param fileFolderService file folder service
*/
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService = fileFolderService;
}
/** /**
* If the record is a version record then delete the associated version entry * If the record is a version record then delete the associated version entry
* *
@@ -159,11 +144,6 @@ public class VersionRecordAspect extends BaseBehaviourBean
public void beforeAddAspect(NodeRef nodeRef, QName qName) public void beforeAddAspect(NodeRef nodeRef, QName qName)
{ {
//create a new content URL for the version record //create a new content URL for the version record
ContentReader reader = fileFolderService.getReader(nodeRef); createNewContentURL(nodeRef);
if (reader != null)
{
ContentWriter writer = fileFolderService.getWriter(nodeRef);
writer.putContent(reader);
}
} }
} }

View File

@@ -36,8 +36,11 @@ 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.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.rendition.RenditionService; import org.alfresco.service.cmr.rendition.RenditionService;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
@@ -75,6 +78,9 @@ public class ServiceBaseImpl implements RecordsManagementModel, ApplicationConte
/** transactional resource helper */ /** transactional resource helper */
protected TransactionalResourceHelper transactionalResourceHelper; protected TransactionalResourceHelper transactionalResourceHelper;
/** File folder service */
protected FileFolderService fileFolderService;
/** /**
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/ */
@@ -124,6 +130,16 @@ public class ServiceBaseImpl implements RecordsManagementModel, ApplicationConte
this.transactionalResourceHelper = transactionalResourceHelper; this.transactionalResourceHelper = transactionalResourceHelper;
} }
/**
* Set the file folder service
*
* @param fileFolderService file folder service
*/
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService = fileFolderService;
}
/** /**
* Helper to get internal node service. * Helper to get internal node service.
* <p> * <p>
@@ -537,4 +553,15 @@ public class ServiceBaseImpl implements RecordsManagementModel, ApplicationConte
result.add(nodeService.getType(nodeRef)); result.add(nodeService.getType(nodeRef));
return result; return result;
} }
protected void createNewContentURL(NodeRef nodeRef)
{
//create a new content URL for the copy
ContentReader reader = fileFolderService.getReader(nodeRef);
if (reader != null)
{
ContentWriter writer = fileFolderService.getWriter(nodeRef);
writer.putContent(reader);
}
}
} }