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 dacbf19a53..087d869996 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 @@ -18,6 +18,7 @@ */ package org.alfresco.module.org_alfresco_module_rm.freeze; +import java.util.Date; import java.util.Set; import org.alfresco.service.cmr.repository.NodeRef; @@ -153,4 +154,20 @@ public interface FreezeService * @return true if the given nodeRef has frozen children, false otherwise */ boolean hasFrozenChildren(NodeRef nodeRef); + + /** + * Gets the date of the freeze for the given node, null if the node is not frozen + * + * @param nodeRef The nodeRef for which the date check will be performed + * @return Date The of the freeze or null + */ + Date getFreezeDate(NodeRef nodeRef); + + /** + * Gets the initiator of the freeze for the given node, null if the node is not frozen + * + * @param nodeRef The nodeRef for which the initiator check will be performed + * @return String The initiator of the freeze or null + */ + String getFreezeInitiator(NodeRef nodeRef); } 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 dda6ab853f..ab1f9ec2e8 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 @@ -489,6 +489,50 @@ public class FreezeServiceImpl implements FreezeService, return getFrozen(nodeRef).size() > 0 ? true : false; } + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeDate(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public Date getFreezeDate(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + if (isFrozen(nodeRef)) + { + Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_AT); + if (property != null) + { + return (Date) property; + } + } + + return null; + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeInitiator(org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public String getFreezeInitiator(NodeRef nodeRef) + { + ParameterCheck.mandatory("nodeRef", nodeRef); + + if (isFrozen(nodeRef)) + { + Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_BY); + if (property != null) + { + return (String) property; + } + } + + return null; + } + + /** + * Helper Methods + */ + /** * Creates a hold using the given nodeRef and reason * 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 86ab479bb6..d9a1436a4b 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 @@ -1,22 +1,23 @@ package org.alfresco.module.org_alfresco_module_rm.test.service; import java.io.Serializable; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService; import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; -import org.alfresco.service.namespace.RegexQNamePattern; public class FreezeServiceImplTest extends BaseRMTestCase { @@ -52,10 +53,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase freezeService = (FreezeService) applicationContext.getBean("freezeService"); } - /** - * @see FreezeService#freeze(String, NodeRef) - */ - public void testFreeze() throws Exception + public void testFreezeService() throws Exception { doTestInTransaction(new Test() { @@ -74,26 +72,26 @@ public class FreezeServiceImplTest extends BaseRMTestCase @Override public void test(Void result) throws Exception { - assertTrue(nodeService.hasAspect(recordOne, ASPECT_RECORD)); - assertTrue(nodeService.hasAspect(recordOne, ASPECT_FILE_PLAN_COMPONENT)); + assertTrue(rmService.isRecord(recordOne)); + assertTrue(rmService.isFilePlanComponent(recordOne)); freezeService.freeze("FreezeReason", recordOne); // Check the hold exists - List holdAssocs = nodeService.getChildAssocs(filePlan, ASSOC_HOLDS, RegexQNamePattern.MATCH_ALL); + Set holdAssocs = freezeService.getHolds(filePlan); assertNotNull(holdAssocs); assertEquals(1, holdAssocs.size()); - NodeRef holdNodeRef = holdAssocs.get(0).getChildRef(); + NodeRef holdNodeRef = holdAssocs.iterator().next(); assertTrue(freezeService.isHold(holdNodeRef)); assertEquals("FreezeReason", freezeService.getReason(holdNodeRef)); - Set freezeAssocs = freezeService.getFrozen(holdNodeRef); - assertNotNull(freezeAssocs); - assertEquals(1, freezeAssocs.size()); + Set frozenNodes = freezeService.getFrozen(holdNodeRef); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); // Check the nodes are frozen assertTrue(freezeService.isFrozen(recordOne)); - assertNotNull(nodeService.getProperty(recordOne, PROP_FROZEN_AT)); - assertNotNull(nodeService.getProperty(recordOne, PROP_FROZEN_BY)); + assertNotNull(freezeService.getFreezeDate(recordOne)); + assertNotNull(freezeService.getFreezeInitiator(recordOne)); assertFalse(freezeService.isFrozen(recordTwo)); assertFalse(freezeService.isFrozen(recordThree)); @@ -102,8 +100,98 @@ public class FreezeServiceImplTest extends BaseRMTestCase // Check the hold has been updated assertEquals("NewFreezeReason", freezeService.getReason(holdNodeRef)); + + // Freeze a number of records + Set records = new HashSet(); + records.add(recordOne); + records.add(recordTwo); + records.add(recordThree); + NodeRef newHold = freezeService.freeze("Freeze a set of nodes", records); + assertNotNull(newHold); + assertTrue(freezeService.isHold(newHold)); + + // Check the holds exist + holdAssocs = freezeService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(2, holdAssocs.size()); + for (NodeRef hold : holdAssocs) + { + String reason = freezeService.getReason(hold); + if (reason.equals("Freeze a set of nodes")) + { + assertEquals(newHold, hold); + frozenNodes = freezeService.getFrozen(hold); + assertNotNull(frozenNodes); + assertEquals(3, frozenNodes.size()); + } + else if (reason.equals("NewFreezeReason")) + { + frozenNodes = freezeService.getFrozen(hold); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + } + else + { + throw new AlfrescoRuntimeException("The reason '" + reason + "' was not found in the existing holds."); + } + } + + // Check the nodes are frozen + final List testRecords = Arrays.asList(new NodeRef[]{recordOne, recordTwo, recordThree}); + for (NodeRef nr : testRecords) + { + assertTrue(freezeService.isFrozen(nr)); + assertNotNull(freezeService.getFreezeDate(nr)); + assertNotNull(freezeService.getFreezeInitiator(nr)); + } + + // Unfreeze a node + freezeService.unFreeze(recordThree); + + // Check the holds + holdAssocs = freezeService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(2, holdAssocs.size()); + for (NodeRef hold : holdAssocs) + { + String reason = freezeService.getReason(hold); + if (reason.equals("Freeze a set of nodes")) + { + frozenNodes = freezeService.getFrozen(hold); + assertNotNull(frozenNodes); + assertEquals(2, frozenNodes.size()); + } + else if (reason.equals("NewFreezeReason")) + { + frozenNodes = freezeService.getFrozen(hold); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); + } + else + { + throw new AlfrescoRuntimeException("The reason '" + reason + "' was not found in the existing holds."); + } + } + + // Check the nodes are frozen + assertTrue(freezeService.isFrozen(recordOne)); + assertNotNull(freezeService.getFreezeDate(recordOne)); + assertNotNull(freezeService.getFreezeInitiator(recordOne)); + assertTrue(freezeService.isFrozen(recordTwo)); + assertNotNull(freezeService.getFreezeDate(recordTwo)); + assertNotNull(freezeService.getFreezeInitiator(recordTwo)); + assertFalse(freezeService.isFrozen(recordThree)); + + // FIXME + freezeService.unFreeze(recordTwo); + freezeService.unFreeze(recordOne); } + /** + * Helper method for getting a record folder from the test data + * + * @return NodeRef of a record folder from the test data + */ private NodeRef getRecordFolder() { // Load the data set into the specified file plan @@ -126,6 +214,14 @@ public class FreezeServiceImplTest extends BaseRMTestCase return recFol13; } + /** + * Helper method for creating a record + * + * @param recordFolder Record folder in which the record will be created + * @param name The name of the record + * @param someTextContent The content of the record + * @return NodeRef of the created record + */ private NodeRef createRecord(NodeRef recordFolder, String name, String someTextContent) { // Create the document @@ -146,36 +242,4 @@ public class FreezeServiceImplTest extends BaseRMTestCase } }); } - - /** - * @see FreezeService#unFreeze(NodeRef) - */ - public void testUnFreeze() throws Exception - { - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { - // FIXME - return null; - } - }); - } - - /** - * @see FreezeService#relinquish(NodeRef) - */ - public void testRelinquish() throws Exception - { - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { - // FIXME - return null; - } - }); - } }