diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 65f9af3a2d..47a7b2b0a6 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -1669,7 +1669,8 @@ Get the list of holds WebScript to get the list of available holds in the holds container - /api/rma/{store_type}/{store_id}/{id}/holds - /api/rma/holds + /api/rma/{store_type}/{store_id}/{id}/holds?itemNodeRef={itemNodeRef?} + /api/rma/holds?itemNodeRef={itemNodeRef?} argument user required diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldService.java index 21d937d9ac..bf0a7a8e57 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldService.java @@ -31,12 +31,20 @@ import org.alfresco.service.cmr.repository.NodeRef; public interface HoldService { /** - * Gets the list of the holds within the holds container for the given file plan + * Gets the list of all the holds within the holds container in the given file plan * * @param filePlan The {@link NodeRef} of the file plan * @return List of hold node references */ - List getHolds(NodeRef filePlan); + List getHoldsInFilePlan(NodeRef filePlan); + + /** + * Gets the list of all the holds within the holds container for the given node reference + * + * @param nodeRef The {@link NodeRef} of the record / record folder which will be in the retrieved list of hold(s) + * @return List of hold node references which has the node reference of the given record / record folder in it + */ + List getHoldsForItem(NodeRef nodeRef); /** * Adds the record to the given hold diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldServiceImpl.java index abdcb026fe..62a8b279ca 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/fileplan/hold/HoldServiceImpl.java @@ -105,22 +105,37 @@ public class HoldServiceImpl implements HoldService, RecordsManagementModel } /** - * @see org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService#getHolds(org.alfresco.service.cmr.repository.NodeRef) + * @see org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService#getHoldsInFilePlan(org.alfresco.service.cmr.repository.NodeRef) */ @Override - public List getHolds(NodeRef filePlan) + public List getHoldsInFilePlan(NodeRef filePlan) { ParameterCheck.mandatory("filePlan", filePlan); NodeRef holdContainer = filePlanService.getHoldContainer(filePlan); List holdsAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); List holds = new ArrayList(holdsAssocs.size()); - if (holdsAssocs != null && !holdsAssocs.isEmpty()) + for (ChildAssociationRef holdAssoc : holdsAssocs) { - for (ChildAssociationRef holdAssoc : holdsAssocs) - { - holds.add(holdAssoc.getChildRef()); - } + holds.add(holdAssoc.getChildRef()); + } + + return holds; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService#getHoldsForItem(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public List getHoldsForItem(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + List holdsAssocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS); + List holds = new ArrayList(holdsAssocs.size()); + for (ChildAssociationRef holdAssoc : holdsAssocs) + { + holds.add(holdAssoc.getParentRef()); } return holds; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java index 415b821990..e6bb759537 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java @@ -149,7 +149,7 @@ public interface FreezeService * @param filePlan file plan for which the hold nodes will be retrieved * @return Set hold node references * - * @deprecated as of 2.2, use {@link HoldService#getHolds(NodeRef)} instead + * @deprecated as of 2.2, use {@link HoldService#getHoldsInFilePlan(NodeRef)} instead */ @Deprecated Set getHolds(NodeRef filePlan); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java index 1fe2cdc567..ad5bf17117 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java @@ -381,7 +381,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl { ParameterCheck.mandatory("filePlan", filePlan); - return new HashSet(holdService.getHolds(filePlan)); + return new HashSet(holdService.getHoldsInFilePlan(filePlan)); } /** diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/hold/HoldsGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/hold/HoldsGet.java index a4cc25ffdb..7c75d9ec03 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/hold/HoldsGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/hold/HoldsGet.java @@ -92,7 +92,18 @@ public class HoldsGet extends DeclarativeWebScript protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { NodeRef filePlan = getFilePlan(req); - List holds = holdService.getHolds(filePlan); + NodeRef itemNodeRef = getItemNodeRef(req); + List holds = new ArrayList(); + + if (itemNodeRef == null) + { + holds.addAll(holdService.getHoldsInFilePlan(filePlan)); + } + else + { + holds.addAll(holdService.getHoldsForItem(itemNodeRef)); + } + List holdNames = new ArrayList(holds.size()); for (NodeRef hold : holds) { @@ -138,6 +149,23 @@ public class HoldsGet extends DeclarativeWebScript return filePlan; } + /** + * Helper method to get the item node reference + * + * @param req The webscript request + * @return The {@link NodeRef} of the item (record / record folder) or null if the parameter has not been passed + */ + private NodeRef getItemNodeRef(WebScriptRequest req) + { + String nodeRef = req.getParameter("itemNodeRef"); + NodeRef itemNodeRef = null; + if (StringUtils.isNotBlank(nodeRef)) + { + itemNodeRef = new NodeRef(nodeRef); + } + return itemNodeRef; + } + /** * Helper method to sort the holds by their names * diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1008Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1008Test.java index 2ff2718e1d..e6bce4247b 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1008Test.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1008Test.java @@ -127,7 +127,7 @@ public class RM1008Test extends BaseRMTestCase { // create hold object freezeService.freeze("test", rmFolder); - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); return holds.iterator().next(); } }, rmAdminName); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1030Test.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1030Test.java index bc4edd702e..719601519d 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1030Test.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/issue/RM1030Test.java @@ -46,7 +46,7 @@ public class RM1030Test extends BaseRMTestCase public NodeRef run() { // show there are no holds when we start - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holds); assertEquals(0, holds.size()); @@ -64,7 +64,7 @@ public class RM1030Test extends BaseRMTestCase assertTrue(freezeService.isFrozen(recordOne)); // count the number of holds - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holds); assertEquals(1, holds.size()); } @@ -91,7 +91,7 @@ public class RM1030Test extends BaseRMTestCase assertTrue(freezeService.isFrozen(rmFolder)); // count the number of holds - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holds); assertEquals(2, holds.size()); } @@ -113,7 +113,7 @@ public class RM1030Test extends BaseRMTestCase assertTrue(freezeService.isFrozen(recordOne)); assertFalse(freezeService.isFrozen(rmFolder)); - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holds); assertEquals(1, holds.size()); } @@ -135,7 +135,7 @@ public class RM1030Test extends BaseRMTestCase assertFalse(freezeService.isFrozen(recordOne)); assertFalse(freezeService.isFrozen(rmFolder)); - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holds); assertEquals(0, holds.size()); } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/FreezeServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/FreezeServiceImplTest.java index 187cc4d326..9fa5fd6253 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/FreezeServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/service/FreezeServiceImplTest.java @@ -65,7 +65,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertTrue(freezeService.hasFrozenChildren(rmFolder)); // Check the hold exists - List holdAssocs = holdService.getHolds(filePlan); + List holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); NodeRef holdNodeRef = holdAssocs.iterator().next(); @@ -98,7 +98,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertTrue(freezeService.isHold(newHold)); // Check the holds exist - holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holdAssocs); assertEquals(2, holdAssocs.size()); for (NodeRef hold : holdAssocs) @@ -136,7 +136,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase freezeService.unFreeze(recordThree); // Check the holds - holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holdAssocs); assertEquals(2, holdAssocs.size()); for (NodeRef hold : holdAssocs) @@ -175,7 +175,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase freezeService.relinquish(holdNodeRef); // Check the existing hold - holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); @@ -184,7 +184,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase freezeService.unFreeze(freezeService.getFrozen(holdNodeRef)); // All holds should be deleted - holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertEquals(0, holdAssocs.size()); // Check the nodes are unfrozen @@ -204,7 +204,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertTrue(freezeService.hasFrozenChildren(rmFolder)); // Check the hold - holdAssocs = holdService.getHolds(filePlan); + holdAssocs = holdService.getHoldsInFilePlan(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java index 2215981553..b2ff35e132 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseRMTestCase.java @@ -433,7 +433,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase { if (filePlan != null && nodeService.exists(filePlan) == true) { - List holds = holdService.getHolds(filePlan); + List holds = holdService.getHoldsInFilePlan(filePlan); for (NodeRef hold : holds) { freezeService.relinquish(hold);