RM-989: Can create a folder within a Record Folder in CIFS which breaks the Share UI

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@56007 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2013-09-26 01:58:09 +00:00
parent c69c9964cc
commit 44c1fef683

View File

@@ -18,17 +18,18 @@
*/ */
package org.alfresco.module.org_alfresco_module_rm.recordfolder; package org.alfresco.module.org_alfresco_module_rm.recordfolder;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
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.util.ServiceBaseImpl;
import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.node.NodeServicePolicies;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.policy.Behaviour.NotificationFrequency;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
/** /**
* Record Folder Service Implementation * Record Folder Service Implementation
@@ -36,24 +37,26 @@ import org.alfresco.service.cmr.repository.NodeService;
* @author Roy Wetherall * @author Roy Wetherall
* @since 2.1 * @since 2.1
*/ */
public class RecordFolderServiceImpl implements RecordFolderService, public class RecordFolderServiceImpl extends ServiceBaseImpl
implements RecordFolderService,
RecordsManagementModel, RecordsManagementModel,
NodeServicePolicies.OnCreateChildAssociationPolicy NodeServicePolicies.OnCreateChildAssociationPolicy
{ {
/** Policy component */ /** Policy component */
private PolicyComponent policyComponent; private PolicyComponent policyComponent;
/** Node service */
private NodeService nodeService;
/** Disposition service */ /** Disposition service */
private DispositionService dispositionService; private DispositionService dispositionService;
/** Behaviours */ /** Behaviours */
private JavaBehaviour onCreateChildAssociation = new JavaBehaviour( private JavaBehaviour onCreateChildAssociation
this, = new JavaBehaviour(this,
"onCreateChildAssociation", "onCreateChildAssociation",
NotificationFrequency.FIRST_EVENT); NotificationFrequency.FIRST_EVENT);
private JavaBehaviour onCreateChildAssociationInRecordFolderFolder
= new JavaBehaviour(this,
"onCreateChildAssociationInRecordFolder",
NotificationFrequency.FIRST_EVENT);
/** /**
* @param policyComponent policy component * @param policyComponent policy component
@@ -63,14 +66,6 @@ public class RecordFolderServiceImpl implements RecordFolderService,
this.policyComponent = policyComponent; this.policyComponent = policyComponent;
} }
/**
* @param nodeService node service
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/** /**
* @param dispositionService disposition service * @param dispositionService disposition service
*/ */
@@ -89,6 +84,12 @@ public class RecordFolderServiceImpl implements RecordFolderService,
TYPE_RECORD_CATEGORY, TYPE_RECORD_CATEGORY,
ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS,
onCreateChildAssociation); onCreateChildAssociation);
policyComponent.bindAssociationBehaviour(
NodeServicePolicies.OnCreateChildAssociationPolicy.QNAME,
TYPE_RECORD_FOLDER,
ContentModel.ASSOC_CONTAINS,
onCreateChildAssociationInRecordFolderFolder);
} }
/** /**
@@ -104,6 +105,19 @@ public class RecordFolderServiceImpl implements RecordFolderService,
} }
} }
/**
* Prevent folders being created within existing record folders.
*/
public void onCreateChildAssociationInRecordFolder(ChildAssociationRef childAssocRef, boolean bNew)
{
NodeRef nodeRef = childAssocRef.getChildRef();
if (nodeService.exists(nodeRef) == true &&
instanceOf(nodeRef, ContentModel.TYPE_FOLDER) == true)
{
throw new AlfrescoRuntimeException("You can't create a folder within an exisiting record folder.");
}
}
/** /**
* *
* @param nodeRef * @param nodeRef