diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml index fe6cedfd6d..9cfd1a90ae 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-model-context.xml @@ -86,6 +86,8 @@ + + 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 7d4b163dc7..d2ea0c746e 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 @@ -1062,8 +1062,8 @@ - - + + @@ -1499,6 +1499,7 @@ + . + * #L% + */ + +package org.alfresco.module.org_alfresco_module_rm.model.rma.type; + +import java.security.InvalidParameterException; + +import org.alfresco.module.org_alfresco_module_rm.model.BaseBehaviourBean; +import org.alfresco.repo.node.NodeServicePolicies; +import org.alfresco.repo.policy.annotation.Behaviour; +import org.alfresco.repo.policy.annotation.BehaviourBean; +import org.alfresco.repo.policy.annotation.BehaviourKind; +import org.alfresco.service.cmr.repository.ChildAssociationRef; + +/** + * rma:transferContainer behaviour bean + * + * @author Silviu Dinuta + * @since 2.6 + */ +@BehaviourBean(defaultType = "rma:hold") +public class HoldType extends BaseBehaviourBean implements NodeServicePolicies.OnCreateChildAssociationPolicy +{ + private static final String BEHAVIOUR_NAME = "onCreateChildAssocsForHoldType"; + + /** + * 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(); + } + + @Override + @Behaviour + ( + kind = BehaviourKind.ASSOCIATION, + name = BEHAVIOUR_NAME + ) + public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode) + { + throw new InvalidParameterException("Operation failed. Creation is not allowed in Hold Folders"); + } + +} 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 198c75afab..b2cb97d3a0 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 @@ -407,22 +407,14 @@ public class RMNodesImpl extends NodesImpl implements RMNodes public void checkPostPermission(String nodeId) { NodeRef parentNodeRef = validateOrLookupNode(nodeId, null); - QName parentNodeRefType = nodeService.getType(parentNodeRef); - if(RecordsManagementModel.TYPE_HOLD.equals(parentNodeRefType)) + SiteInfo siteInfo = siteService.getSite(FilePlanService.DEFAULT_RM_SITE_ID); + if(siteInfo !=null) { - throw new PermissionDeniedException("POST request not allowed in Hold Folder."); - } - else - { - SiteInfo siteInfo = siteService.getSite(FilePlanService.DEFAULT_RM_SITE_ID); - if(siteInfo !=null) + NodeRef rmNodeRef = siteInfo.getNodeRef(); + if(rmNodeRef.equals(parentNodeRef)) { - NodeRef rmNodeRef = siteInfo.getNodeRef(); - if(rmNodeRef.equals(parentNodeRef)) - { - throw new PermissionDeniedException("POST request not allowed in RM site."); - } + throw new PermissionDeniedException("POST request not allowed in RM site."); } } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelation.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelation.java index eca43b2f5f..2ff63ba601 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelation.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/nodes/FileplanComponentChildrenRelation.java @@ -31,7 +31,6 @@ import java.util.ArrayList; import java.util.List; import org.alfresco.rest.api.model.Node; -import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException; import org.alfresco.rest.framework.resource.RelationshipResource; import org.alfresco.rest.framework.resource.actions.interfaces.MultiPartRelationshipResourceAction; import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction; diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java index 169a6bc694..cc4bf8c36c 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/hold/HoldServiceImplUnitTest.java @@ -51,6 +51,7 @@ import java.util.Map; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.module.org_alfresco_module_rm.model.rma.type.HoldType; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -61,6 +62,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.Spy; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -82,6 +84,9 @@ public class HoldServiceImplUnitTest extends BaseUnitTest protected NodeRef hold; protected NodeRef hold2; + @Mock + private HoldType mockedHoldType; + @Spy @InjectMocks HoldServiceImpl holdService; @Before diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldTypeUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldTypeUnitTest.java new file mode 100644 index 0000000000..339bb290d9 --- /dev/null +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/model/rma/type/HoldTypeUnitTest.java @@ -0,0 +1,72 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * - + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * - + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ + +package org.alfresco.module.org_alfresco_module_rm.model.rma.type; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.security.InvalidParameterException; + +import org.alfresco.module.org_alfresco_module_rm.test.util.AlfMock; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.junit.Test; +import org.mockito.InjectMocks; + +/** + * Unit test for HoldType + * + * @author Silviu Dinuta + * @since 2.6 + * + */ +public class HoldTypeUnitTest extends BaseUnitTest +{ + /** test object */ + private @InjectMocks HoldType holdType; + + /** + * Given that we try to add to hold folder, + * Then InvalidParameterException is thrown. + */ + @Test(expected = InvalidParameterException.class) + public void testAddToHoldFolderTest() + { + NodeRef holdFolder = generateNodeRef(TYPE_HOLD, true); + + QName type = AlfMock.generateQName(); + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService, type); + + ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); + when(mockedChildAssoc.getChildRef()).thenReturn(nodeRef); + when(mockedChildAssoc.getParentRef()).thenReturn(holdFolder); + holdType.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 21c0ab62f5..166af4c5bb 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 testCheckPostPermissionForHoldFolder() throws Exception - { - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedNodeService.getType(parentNodeRef)).thenReturn(RecordsManagementModel.TYPE_HOLD); - try - { - rmNodesImpl.checkPostPermission(parentNodeRef.getId()); - fail("Expected ecxeption as post should not be permitted on the Hold Folder"); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Hold Folder.", ex.getMsgId()); - } - } - @Test public void testCheckPostPermission() 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 df7e599d01..f16cc01103 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 testCreateOnHoldFolder() 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 Hold Folder.")).when(mockedRMNodes).checkPostPermission(parentNodeRef.getId()); - try - { - filePlanComponentChildrenRelation.create(parentNodeRef.getId(), nodeInfos, mockedParameters); - fail("Expected ecxeption as POST request is not allowed in Hold Folder."); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Hold Folder.", ex.getMsgId()); - } - verify(mockedRMNodes, never()).createNode(parentNodeRef.getId(), nodeInfos.get(0), mockedParameters); - } - @Test public void testUpload() throws Exception { @@ -176,25 +153,4 @@ public class FileplanComponentChildrenRelationUnitTest extends BaseUnitTest } verify(mockedRMNodes, never()).upload(parentNodeRef.getId(), mockedFormData, mockedParameters); } - - @Test - public void testUploadOnHoldFolder() 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 Hold Folder.")).when(mockedRMNodes).checkPostPermission(parentNodeRef.getId()); - try - { - filePlanComponentChildrenRelation.create(parentNodeRef.getId(), mockedFormData, mockedParameters, mockedWithResponse); - fail("Expected ecxeption as POST request is not allowed in Hold Folder."); - } - catch(PermissionDeniedException ex) - { - assertEquals("POST request not allowed in Hold Folder.", ex.getMsgId()); - } - verify(mockedRMNodes, never()).upload(parentNodeRef.getId(), mockedFormData, mockedParameters); - } }