diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java index 4d6d476ebf..b1d7e7a60f 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordCategoryType.java @@ -178,13 +178,18 @@ public class RecordCategoryType extends BaseBehaviourBean @Override public Void doWork() { + // Check the parent is either a file plan or a category. + if (!isFilePlan(childAssocRef.getParentRef()) && !isRecordCategory(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record categories must go under file plans or categories."); + } + // setup record category permissions filePlanPermissionService.setupRecordCategoryPermissions(childAssocRef.getChildRef()); return null; } }); - } /** diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java index 2b60c6ff2b..20badd2005 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/RecordFolderType.java @@ -64,6 +64,7 @@ import org.springframework.extensions.surf.util.I18NUtil; ) public class RecordFolderType extends AbstractDisposableItem implements NodeServicePolicies.OnMoveNodePolicy, + NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.OnCreateChildAssociationPolicy { /** record service */ @@ -123,6 +124,7 @@ public class RecordFolderType extends AbstractDisposableItem AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() { + @Override public Object doWork() { // clean record folder @@ -270,4 +272,40 @@ public class RecordFolderType extends AbstractDisposableItem behaviourFilter.enableBehaviour(); } } + + /** {@inheritDoc}} */ + @Override + @Behaviour + ( + kind = BehaviourKind.CLASS, + notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT + ) + public void onCreateNode(final ChildAssociationRef childAssocRef) + { + // execute behaviour code as system user + AuthenticationUtil.runAsSystem(new RunAsWork() + { + @Override + public Void doWork() + { + if (childAssocRef.isPrimary()) + { + // Check the primary parent is a category. + if (!isRecordFolder(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders must go under categories."); + } + } + else + { + // Check the secondary parent is a hold or transfer. + if (!isHold(childAssocRef.getParentRef()) && !isTransfer(childAssocRef.getParentRef())) + { + throw new AlfrescoRuntimeException("Operation failed: Record folders can only have secondary parents of holds or transfers."); + } + } + return null; + } + }); + } }