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
{