diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 97f6a97480..d41b69d8f0 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -161,6 +161,7 @@ + @@ -373,10 +374,10 @@ - + - @@ -566,9 +567,9 @@ parent="baseService"> - - - + + + @@ -1060,8 +1061,8 @@ - - + + @@ -1522,20 +1523,20 @@ diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java index 07a2d3fe9c..15a2320bd0 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerType.java @@ -26,8 +26,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.model.rma.type; -import java.util.Arrays; -import java.util.List; +import java.security.InvalidParameterException; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; @@ -38,7 +37,6 @@ import org.alfresco.repo.policy.annotation.BehaviourBean; import org.alfresco.repo.policy.annotation.BehaviourKind; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.namespace.QName; import org.springframework.extensions.surf.util.I18NUtil; /** @@ -52,7 +50,25 @@ public class TransferContainerType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy, NodeServicePolicies.OnCreateNodePolicy { private final static String MSG_ERROR_ADD_CONTENT_CONTAINER = "rm.service.error-add-content-container"; - private final static List ACCEPTED_NON_UNIQUE_CHILD_TYPES = Arrays.asList(TYPE_TRANSFER); + private static final String BEHAVIOUR_NAME = "onCreateChildAssocsForTransferContainer"; + + /** + * Disable the behaviours for this transaction + * + */ + public void disable() + { + getBehaviour(BEHAVIOUR_NAME).disable(); + } + + /** + * Enable behaviours for this transaction + * + */ + public void enable() + { + getBehaviour(BEHAVIOUR_NAME).enable(); + } /** * On every event @@ -61,11 +77,14 @@ public class TransferContainerType extends BaseBehaviourBean * boolean) */ @Override - @Behaviour(kind = BehaviourKind.ASSOCIATION) + @Behaviour + ( + kind = BehaviourKind.ASSOCIATION, + name = BEHAVIOUR_NAME + ) public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean bNew) { - // check the created child is of an accepted type - validateNewChildAssociationSubTypesIncluded(childAssocRef.getChildRef(), ACCEPTED_NON_UNIQUE_CHILD_TYPES); + throw new InvalidParameterException("Operation failed. Creation is not allowed in Transfer Container"); } @Override diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java index 8bc00da79d..89b1227eef 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/transfer/TransferServiceImpl.java @@ -41,6 +41,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; +import org.alfresco.module.org_alfresco_module_rm.model.rma.type.TransferContainerType; import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl; @@ -87,6 +88,8 @@ public class TransferServiceImpl extends ServiceBaseImpl /** Freeze Service */ protected FreezeService freezeService; + protected TransferContainerType transferContainerType; + /** * @param filePlanService file plan service */ @@ -127,6 +130,11 @@ public class TransferServiceImpl extends ServiceBaseImpl this.freezeService = freezeService; } + public void setTransferContainerType(TransferContainerType transferContainerType) + { + this.transferContainerType = transferContainerType; + } + /** * @see org.alfresco.module.org_alfresco_module_rm.transfer.TransferService#transfer(NodeRef, boolean) */ @@ -164,12 +172,21 @@ public class TransferServiceImpl extends ServiceBaseImpl } NodeRef transferContainer = filePlanService.getTransferContainer(root); - transferNodeRef = nodeService.createNode(transferContainer, - ContentModel.ASSOC_CONTAINS, - QName.createQName(RM_URI, transferName), - TYPE_TRANSFER, - transferProps).getChildRef(); + transferContainerType.disable(); + try + { + transferNodeRef = nodeService.createNode(transferContainer, + ContentModel.ASSOC_CONTAINS, + QName.createQName(RM_URI, transferName), + TYPE_TRANSFER, + transferProps).getChildRef(); + + } + finally + { + transferContainerType.enable(); + } // Bind the hold node reference to the transaction AlfrescoTransactionSupport.bindResource(KEY_TRANSFER_NODEREF, transferNodeRef); } @@ -253,12 +270,12 @@ public class TransferServiceImpl extends ServiceBaseImpl { throw new AlfrescoRuntimeException("Could not complete a transfer that contains held folders"); } - + if(freezeService.hasFrozenChildren(assoc.getChildRef())) { throw new AlfrescoRuntimeException("Cound not complete a transfer that contains folders with held children"); } - + markComplete(assoc.getChildRef(), accessionIndicator, transferLocation); } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java index 6c6dca808b..94effa0345 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java @@ -413,10 +413,6 @@ public class RMNodesImpl extends NodesImpl implements RMNodes { throw new PermissionDeniedException("POST request not allowed in Transfer Folder."); } - else if(RecordsManagementModel.TYPE_TRANSFER_CONTAINER.equals(parentNodeRefType)) - { - throw new PermissionDeniedException("POST request not allowed in Transfer Container."); - } else if(RecordsManagementModel.TYPE_HOLD.equals(parentNodeRefType)) { throw new PermissionDeniedException("POST request not allowed in Hold Folder."); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java index 2e3a3135b1..5e622ecc93 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/TransferContainerTypeUnitTest.java @@ -68,22 +68,4 @@ public class TransferContainerTypeUnitTest extends BaseUnitTest when(mockedChildAssoc.getParentRef()).thenReturn(transferContainer); transferContainerType.onCreateChildAssociation(mockedChildAssoc, true); } - - /** - * Given that we try to add "rma:transfer" type to transfer container, - * Then the operation is successful. - */ - @Test - public void testAddTransferFolderToTransferContainer() - { - QName type = AlfMock.generateQName(); - when(mockedDictionaryService.isSubClass(type, TYPE_TRANSFER)).thenReturn(true); - NodeRef transferFolder= AlfMock.generateNodeRef(mockedNodeService, type); - - NodeRef transferContainer = generateNodeRef(TYPE_TRANSFER_CONTAINER, true); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getChildRef()).thenReturn(transferFolder); - when(mockedChildAssoc.getParentRef()).thenReturn(transferContainer); - transferContainerType.onCreateChildAssociation(mockedChildAssoc, true); - } } diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java index 4107b81759..47042d1d5f 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java @@ -755,22 +755,6 @@ public class RMNodesImplUnitTest extends BaseUnitTest rmNodesImpl.checkPostPermission(parentNodeRef.getId()); } - @Test - public void testCheckPostPermissionForTransferContainer() throws Exception - { - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedNodeService.getType(parentNodeRef)).thenReturn(RecordsManagementModel.TYPE_TRANSFER_CONTAINER); - try - { - rmNodesImpl.checkPostPermission(parentNodeRef.getId()); - fail("Expected ecxeption as post should not be permitted on the Transfer Container"); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Transfer Container.", ex.getMsgId()); - } - } - @Test public void testCheckPostPermissionForTransferFolder() throws Exception { diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelationUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelationUnitTest.java index a27fa04a78..a5bca8b366 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelationUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelationUnitTest.java @@ -122,29 +122,6 @@ public class FileplanComponentChildrenRelationUnitTest extends BaseUnitTest verify(mockedRMNodes, never()).createNode(parentNodeRef.getId(), nodeInfos.get(0), mockedParameters); } - @Test - public void testCreateOnTransferContainer() throws Exception - { - Parameters mockedParameters = mock(Parameters.class); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - - List nodeInfos = new ArrayList(); - Node mokedNodeInfo = mock(Node.class); - nodeInfos.add(mokedNodeInfo); - - Mockito.doThrow(new PermissionDeniedException("POST request not allowed in Transfer Container.")).when(mockedRMNodes).checkPostPermission(parentNodeRef.getId()); - try - { - filePlanComponentChildrenRelation.create(parentNodeRef.getId(), nodeInfos, mockedParameters); - fail("Expected ecxeption as POST request is not allowed in Transfer Container."); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Transfer Container.", ex.getMsgId()); - } - verify(mockedRMNodes, never()).createNode(parentNodeRef.getId(), nodeInfos.get(0), mockedParameters); - } - @Test public void testCreateOnHoldFolder() throws Exception { @@ -223,27 +200,6 @@ public class FileplanComponentChildrenRelationUnitTest extends BaseUnitTest verify(mockedRMNodes, never()).upload(parentNodeRef.getId(), mockedFormData, mockedParameters); } - @Test - public void testUploadOnTransferContainer() throws Exception - { - Parameters mockedParameters = mock(Parameters.class); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - FormData mockedFormData = mock(FormData.class); - WithResponse mockedWithResponse = mock(WithResponse.class); - - Mockito.doThrow(new PermissionDeniedException("POST request not allowed in Transfer Container.")).when(mockedRMNodes).checkPostPermission(parentNodeRef.getId()); - try - { - filePlanComponentChildrenRelation.create(parentNodeRef.getId(), mockedFormData, mockedParameters, mockedWithResponse); - fail("Expected ecxeption as POST request is not allowed in Transfer Container."); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Transfer Container.", ex.getMsgId()); - } - verify(mockedRMNodes, never()).upload(parentNodeRef.getId(), mockedFormData, mockedParameters); - } - @Test public void testUploadOnHoldFolder() throws Exception {