RM-1330 (Implement REST API for getting the hold(s) for a given node)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@63826 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tuna Aksoy
2014-03-10 11:07:41 +00:00
parent e77273f7b4
commit 8633c30242
11 changed files with 80 additions and 28 deletions

View File

@@ -1669,7 +1669,8 @@
<property name="objectDefinitionSource"> <property name="objectDefinitionSource">
<value> <value>
<![CDATA[ <![CDATA[
org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.getHolds=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.getHoldsInFilePlan=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.getHoldsForItem=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.addToHoldContainer=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.addToHoldContainer=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.addToHoldContainers=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.addToHoldContainers=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.removeFromHoldContainer=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService.removeFromHoldContainer=RM_ALLOW

View File

@@ -1,8 +1,8 @@
<webscript> <webscript>
<shortname>Get the list of holds</shortname> <shortname>Get the list of holds</shortname>
<description>WebScript to get the list of available holds in the holds container</description> <description>WebScript to get the list of available holds in the holds container</description>
<url>/api/rma/{store_type}/{store_id}/{id}/holds</url> <url>/api/rma/{store_type}/{store_id}/{id}/holds?itemNodeRef={itemNodeRef?}</url>
<url>/api/rma/holds</url> <url>/api/rma/holds?itemNodeRef={itemNodeRef?}</url>
<format default="json">argument</format> <format default="json">argument</format>
<authentication>user</authentication> <authentication>user</authentication>
<transaction>required</transaction> <transaction>required</transaction>

View File

@@ -31,12 +31,20 @@ import org.alfresco.service.cmr.repository.NodeRef;
public interface HoldService 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 * @param filePlan The {@link NodeRef} of the file plan
* @return List of hold node references * @return List of hold node references
*/ */
List<NodeRef> getHolds(NodeRef filePlan); List<NodeRef> 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<NodeRef> getHoldsForItem(NodeRef nodeRef);
/** /**
* Adds the record to the given hold * Adds the record to the given hold

View File

@@ -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 @Override
public List<NodeRef> getHolds(NodeRef filePlan) public List<NodeRef> getHoldsInFilePlan(NodeRef filePlan)
{ {
ParameterCheck.mandatory("filePlan", filePlan); ParameterCheck.mandatory("filePlan", filePlan);
NodeRef holdContainer = filePlanService.getHoldContainer(filePlan); NodeRef holdContainer = filePlanService.getHoldContainer(filePlan);
List<ChildAssociationRef> holdsAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); List<ChildAssociationRef> holdsAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
List<NodeRef> holds = new ArrayList<NodeRef>(holdsAssocs.size()); List<NodeRef> holds = new ArrayList<NodeRef>(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<NodeRef> getHoldsForItem(NodeRef nodeRef)
{
ParameterCheck.mandatory("nodeRef", nodeRef);
List<ChildAssociationRef> holdsAssocs = nodeService.getParentAssocs(nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS);
List<NodeRef> holds = new ArrayList<NodeRef>(holdsAssocs.size());
for (ChildAssociationRef holdAssoc : holdsAssocs)
{
holds.add(holdAssoc.getParentRef());
} }
return holds; return holds;

View File

@@ -149,7 +149,7 @@ public interface FreezeService
* @param filePlan file plan for which the hold nodes will be retrieved * @param filePlan file plan for which the hold nodes will be retrieved
* @return Set<NodeRef> hold node references * @return Set<NodeRef> 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 @Deprecated
Set<NodeRef> getHolds(NodeRef filePlan); Set<NodeRef> getHolds(NodeRef filePlan);

View File

@@ -381,7 +381,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl
{ {
ParameterCheck.mandatory("filePlan", filePlan); ParameterCheck.mandatory("filePlan", filePlan);
return new HashSet<NodeRef>(holdService.getHolds(filePlan)); return new HashSet<NodeRef>(holdService.getHoldsInFilePlan(filePlan));
} }
/** /**

View File

@@ -92,7 +92,18 @@ public class HoldsGet extends DeclarativeWebScript
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{ {
NodeRef filePlan = getFilePlan(req); NodeRef filePlan = getFilePlan(req);
List<NodeRef> holds = holdService.getHolds(filePlan); NodeRef itemNodeRef = getItemNodeRef(req);
List<NodeRef> holds = new ArrayList<NodeRef>();
if (itemNodeRef == null)
{
holds.addAll(holdService.getHoldsInFilePlan(filePlan));
}
else
{
holds.addAll(holdService.getHoldsForItem(itemNodeRef));
}
List<String> holdNames = new ArrayList<String>(holds.size()); List<String> holdNames = new ArrayList<String>(holds.size());
for (NodeRef hold : holds) for (NodeRef hold : holds)
{ {
@@ -138,6 +149,23 @@ public class HoldsGet extends DeclarativeWebScript
return filePlan; 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 * Helper method to sort the holds by their names
* *

View File

@@ -127,7 +127,7 @@ public class RM1008Test extends BaseRMTestCase
{ {
// create hold object // create hold object
freezeService.freeze("test", rmFolder); freezeService.freeze("test", rmFolder);
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
return holds.iterator().next(); return holds.iterator().next();
} }
}, rmAdminName); }, rmAdminName);

View File

@@ -46,7 +46,7 @@ public class RM1030Test extends BaseRMTestCase
public NodeRef run() public NodeRef run()
{ {
// show there are no holds when we start // show there are no holds when we start
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holds); assertNotNull(holds);
assertEquals(0, holds.size()); assertEquals(0, holds.size());
@@ -64,7 +64,7 @@ public class RM1030Test extends BaseRMTestCase
assertTrue(freezeService.isFrozen(recordOne)); assertTrue(freezeService.isFrozen(recordOne));
// count the number of holds // count the number of holds
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holds); assertNotNull(holds);
assertEquals(1, holds.size()); assertEquals(1, holds.size());
} }
@@ -91,7 +91,7 @@ public class RM1030Test extends BaseRMTestCase
assertTrue(freezeService.isFrozen(rmFolder)); assertTrue(freezeService.isFrozen(rmFolder));
// count the number of holds // count the number of holds
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holds); assertNotNull(holds);
assertEquals(2, holds.size()); assertEquals(2, holds.size());
} }
@@ -113,7 +113,7 @@ public class RM1030Test extends BaseRMTestCase
assertTrue(freezeService.isFrozen(recordOne)); assertTrue(freezeService.isFrozen(recordOne));
assertFalse(freezeService.isFrozen(rmFolder)); assertFalse(freezeService.isFrozen(rmFolder));
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holds); assertNotNull(holds);
assertEquals(1, holds.size()); assertEquals(1, holds.size());
} }
@@ -135,7 +135,7 @@ public class RM1030Test extends BaseRMTestCase
assertFalse(freezeService.isFrozen(recordOne)); assertFalse(freezeService.isFrozen(recordOne));
assertFalse(freezeService.isFrozen(rmFolder)); assertFalse(freezeService.isFrozen(rmFolder));
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holds); assertNotNull(holds);
assertEquals(0, holds.size()); assertEquals(0, holds.size());
} }

View File

@@ -65,7 +65,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
assertTrue(freezeService.hasFrozenChildren(rmFolder)); assertTrue(freezeService.hasFrozenChildren(rmFolder));
// Check the hold exists // Check the hold exists
List<NodeRef> holdAssocs = holdService.getHolds(filePlan); List<NodeRef> holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holdAssocs); assertNotNull(holdAssocs);
assertEquals(1, holdAssocs.size()); assertEquals(1, holdAssocs.size());
NodeRef holdNodeRef = holdAssocs.iterator().next(); NodeRef holdNodeRef = holdAssocs.iterator().next();
@@ -98,7 +98,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
assertTrue(freezeService.isHold(newHold)); assertTrue(freezeService.isHold(newHold));
// Check the holds exist // Check the holds exist
holdAssocs = holdService.getHolds(filePlan); holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holdAssocs); assertNotNull(holdAssocs);
assertEquals(2, holdAssocs.size()); assertEquals(2, holdAssocs.size());
for (NodeRef hold : holdAssocs) for (NodeRef hold : holdAssocs)
@@ -136,7 +136,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
freezeService.unFreeze(recordThree); freezeService.unFreeze(recordThree);
// Check the holds // Check the holds
holdAssocs = holdService.getHolds(filePlan); holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holdAssocs); assertNotNull(holdAssocs);
assertEquals(2, holdAssocs.size()); assertEquals(2, holdAssocs.size());
for (NodeRef hold : holdAssocs) for (NodeRef hold : holdAssocs)
@@ -175,7 +175,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
freezeService.relinquish(holdNodeRef); freezeService.relinquish(holdNodeRef);
// Check the existing hold // Check the existing hold
holdAssocs = holdService.getHolds(filePlan); holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holdAssocs); assertNotNull(holdAssocs);
assertEquals(1, holdAssocs.size()); assertEquals(1, holdAssocs.size());
@@ -184,7 +184,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
freezeService.unFreeze(freezeService.getFrozen(holdNodeRef)); freezeService.unFreeze(freezeService.getFrozen(holdNodeRef));
// All holds should be deleted // All holds should be deleted
holdAssocs = holdService.getHolds(filePlan); holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertEquals(0, holdAssocs.size()); assertEquals(0, holdAssocs.size());
// Check the nodes are unfrozen // Check the nodes are unfrozen
@@ -204,7 +204,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
assertTrue(freezeService.hasFrozenChildren(rmFolder)); assertTrue(freezeService.hasFrozenChildren(rmFolder));
// Check the hold // Check the hold
holdAssocs = holdService.getHolds(filePlan); holdAssocs = holdService.getHoldsInFilePlan(filePlan);
assertNotNull(holdAssocs); assertNotNull(holdAssocs);
assertEquals(1, holdAssocs.size()); assertEquals(1, holdAssocs.size());

View File

@@ -433,7 +433,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
{ {
if (filePlan != null && nodeService.exists(filePlan) == true) if (filePlan != null && nodeService.exists(filePlan) == true)
{ {
List<NodeRef> holds = holdService.getHolds(filePlan); List<NodeRef> holds = holdService.getHoldsInFilePlan(filePlan);
for (NodeRef hold : holds) for (NodeRef hold : holds)
{ {
freezeService.relinquish(hold); freezeService.relinquish(hold);