nodeRefs);
/**
- * Unfreeze a frozen node.
+ * Unfreeze a frozen node.
*
* The unfrozen node is automatically removed from the hold(s) it is in. If the hold is
* subsequently empty, the hold is automatically deleted.
- *
+ *
* @param nodeRef node reference
*/
void unFreeze(NodeRef nodeRef);
@@ -110,21 +114,21 @@ public interface FreezeService
*
* The unfrozen nodes are automatically removed from the hold(s) the are in. If the hold(s) is
* subsequently empty, the hold is automatically deleted.
- *
+ *
* @param nodeRefs set of nodes to unfreeze
*/
void unFreeze(Set nodeRefs);
/**
* Unfreezes all nodes within a hold and deletes the hold.
- *
+ *
* @param hold hold node reference
*/
void relinquish(NodeRef hold);
/**
* Gets the freeze reason for a hold.
- *
+ *
* @param hold hold node reference
* @return String freeze reason
*/
@@ -132,7 +136,7 @@ public interface FreezeService
/**
* Updates the freeze reason for a given hold.
- *
+ *
* @param hold hold node reference
* @param reason updated reason
*/
@@ -141,15 +145,18 @@ public interface FreezeService
/**
* Gets the hold node references for a given file plan
* or an empty set if there is not any hold node available
- *
+ *
* @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
Set getHolds(NodeRef filePlan);
/**
* Checks whether or not the given node has frozen children
- *
+ *
* @param nodeRef The nodeRef for which will be checked if it has frozen children
* @return true if the given nodeRef has frozen children, false otherwise
*/
@@ -157,15 +164,15 @@ public interface FreezeService
/**
* 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
+ * @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
*/
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 30bf115d99..1fe2cdc567 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
@@ -29,16 +29,14 @@ import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
+import org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
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.role.FilePlanRoleService;
import org.alfresco.module.org_alfresco_module_rm.util.ServiceBaseImpl;
-import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
-import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.alfresco.util.ParameterCheck;
@@ -74,15 +72,12 @@ public class FreezeServiceImpl extends ServiceBaseImpl
/** File Plan Service */
protected FilePlanService filePlanService;
- /** Permission service */
- protected PermissionService permissionService;
-
- /** File plan role service */
- protected FilePlanRoleService filePlanRoleService;
-
/** Record folder service */
protected RecordFolderService recordFolderService;
-
+
+ /** Hold service */
+ protected HoldService holdService;
+
/**
* @param recordService record service
*/
@@ -99,22 +94,6 @@ public class FreezeServiceImpl extends ServiceBaseImpl
this.filePlanService = filePlanService;
}
- /**
- * @param permissionService permission service
- */
- public void setPermissionService(PermissionService permissionService)
- {
- this.permissionService = permissionService;
- }
-
- /**
- * @param filePlanRoleService file plan role service
- */
- public void setFilePlanRoleService(FilePlanRoleService filePlanRoleService)
- {
- this.filePlanRoleService = filePlanRoleService;
- }
-
/**
* @param recordFolderService record folder service
*/
@@ -123,6 +102,14 @@ public class FreezeServiceImpl extends ServiceBaseImpl
this.recordFolderService = recordFolderService;
}
+ /**
+ * @param holdService hold service
+ */
+ public void setHoldService(HoldService holdService)
+ {
+ this.holdService = holdService;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isHold(org.alfresco.service.cmr.repository.NodeRef)
*/
@@ -227,43 +214,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl
ParameterCheck.mandatory("hold", hold);
ParameterCheck.mandatory("nodeRef", nodeRef);
- // Link the record to the hold
- nodeService.addChild(hold, nodeRef, ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_RECORDS);
-
- // Apply the freeze aspect
- Map props = new HashMap(2);
- props.put(PROP_FROZEN_AT, new Date());
- props.put(PROP_FROZEN_BY, AuthenticationUtil.getFullyAuthenticatedUser());
- nodeService.addAspect(nodeRef, ASPECT_FROZEN, props);
-
- // Log a message about applying the the frozen aspect
- if (logger.isDebugEnabled())
- {
- StringBuilder msg = new StringBuilder();
- msg.append("Frozen aspect applied to '").append(nodeRef).append("'.");
- logger.debug(msg.toString());
- }
-
- // Mark all the folders contents as frozen
- if (recordFolderService.isRecordFolder(nodeRef))
- {
- List records = recordService.getRecords(nodeRef);
- for (NodeRef record : records)
- {
- // no need to freeze if already frozen!
- if (nodeService.hasAspect(record, ASPECT_FROZEN) == false)
- {
- nodeService.addAspect(record, ASPECT_FROZEN, props);
-
- if (logger.isDebugEnabled())
- {
- StringBuilder msg = new StringBuilder();
- msg.append("Frozen aspect applied to '").append(record).append("'.");
- logger.debug(msg.toString());
- }
- }
- }
- }
+ holdService.addToHoldContainer(hold, nodeRef);
}
/**
@@ -430,18 +381,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl
{
ParameterCheck.mandatory("filePlan", filePlan);
- Set holds = new HashSet();
- NodeRef holdContainer = filePlanService.getHoldContainer(filePlan);
- List childAssocs = nodeService.getChildAssocs(holdContainer, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL);
- if (childAssocs != null && !childAssocs.isEmpty())
- {
- for (ChildAssociationRef childAssoc : childAssocs)
- {
- holds.add(childAssoc.getChildRef());
- }
- }
-
- return holds;
+ return new HashSet(holdService.getHolds(filePlan));
}
/**
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 06c4fa68cb..386ec816f9 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
@@ -22,7 +22,6 @@ import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
@@ -128,7 +127,7 @@ public class RM1008Test extends BaseRMTestCase
{
// create hold object
freezeService.freeze("test", rmFolder);
- Set holds = freezeService.getHolds(filePlan);
+ List holds = holdService.getHolds(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 45675916bb..bc4edd702e 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
@@ -18,7 +18,7 @@
*/
package org.alfresco.module.org_alfresco_module_rm.test.issue;
-import java.util.Set;
+import java.util.List;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -26,18 +26,18 @@ import org.alfresco.service.cmr.repository.NodeRef;
/**
* Unit test for RM-1030 .. can't freeze a record folder that already has a frozen record contained within
- *
+ *
* @author Roy Wetherall
* @since 2.1
*/
-public class RM1030Test extends BaseRMTestCase
-{
+public class RM1030Test extends BaseRMTestCase
+{
@Override
protected boolean isRecordTest()
{
return true;
}
-
+
public void testRM1030() throws Exception
{
final NodeRef recordHold = doTestInTransaction(new Test()
@@ -46,100 +46,100 @@ public class RM1030Test extends BaseRMTestCase
public NodeRef run()
{
// show there are no holds when we start
- Set holds = freezeService.getHolds(filePlan);
+ List holds = holdService.getHolds(filePlan);
assertNotNull(holds);
assertEquals(0, holds.size());
-
+
// freeze record contained within the record folder
NodeRef hold = freezeService.freeze("in true life for serious", recordOne);
assertNotNull(hold);
-
+
return hold;
}
-
+
@Override
public void test(NodeRef hold) throws Exception
{
// show the record is frozen
assertTrue(freezeService.isFrozen(recordOne));
-
+
// count the number of holds
- Set holds = freezeService.getHolds(filePlan);
+ List holds = holdService.getHolds(filePlan);
assertNotNull(holds);
assertEquals(1, holds.size());
}
-
+
});
-
+
final NodeRef recordFolderHold = doTestInTransaction(new Test()
{
@Override
public NodeRef run()
- {
+ {
// freeze the record folder that contains the frozen record
NodeRef folderHold = freezeService.freeze("innit but", rmFolder);
assertNotNull(folderHold);
-
+
return folderHold;
}
-
+
@Override
public void test(NodeRef hold) throws Exception
{
// show that the record and the record folder are frozen
assertTrue(freezeService.isFrozen(recordOne));
assertTrue(freezeService.isFrozen(rmFolder));
-
+
// count the number of holds
- Set holds = freezeService.getHolds(filePlan);
+ List holds = holdService.getHolds(filePlan);
assertNotNull(holds);
assertEquals(2, holds.size());
}
});
-
+
doTestInTransaction(new Test()
{
@Override
public Void run()
- {
+ {
// relinquish the record folder hold
- freezeService.relinquish(recordFolderHold);
+ freezeService.relinquish(recordFolderHold);
return null;
}
-
+
@Override
public void test(Void result) throws Exception
{
assertTrue(freezeService.isFrozen(recordOne));
assertFalse(freezeService.isFrozen(rmFolder));
-
- Set holds = freezeService.getHolds(filePlan);
+
+ List holds = holdService.getHolds(filePlan);
assertNotNull(holds);
assertEquals(1, holds.size());
}
});
-
+
doTestInTransaction(new Test()
{
@Override
public Void run()
- {
+ {
// relinquish the record hold
- freezeService.relinquish(recordHold);
+ freezeService.relinquish(recordHold);
return null;
}
-
+
@Override
public void test(Void result) throws Exception
{
assertFalse(freezeService.isFrozen(recordOne));
assertFalse(freezeService.isFrozen(rmFolder));
-
- Set holds = freezeService.getHolds(filePlan);
+
+ List holds = holdService.getHolds(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 1f3733249a..187cc4d326 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
@@ -29,7 +29,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
/**
* Freeze service implementation test.
- *
+ *
* @author Tuna Aksoy
* @since 2.1
*/
@@ -65,7 +65,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
assertTrue(freezeService.hasFrozenChildren(rmFolder));
// Check the hold exists
- Set holdAssocs = freezeService.getHolds(filePlan);
+ List holdAssocs = holdService.getHolds(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 = freezeService.getHolds(filePlan);
+ holdAssocs = holdService.getHolds(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 = freezeService.getHolds(filePlan);
+ holdAssocs = holdService.getHolds(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 = freezeService.getHolds(filePlan);
+ holdAssocs = holdService.getHolds(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 = freezeService.getHolds(filePlan);
+ holdAssocs = holdService.getHolds(filePlan);
assertEquals(0, holdAssocs.size());
// Check the nodes are unfrozen
@@ -196,7 +196,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
// Test freezing nodes, adding them to an existing hold
NodeRef hold = freezeService.freeze("AnotherFreezeReason", recordFour);
- freezeService.freeze(hold, recordOne);
+ holdService.addToHoldContainer(hold, recordOne);
Set nodes = new HashSet();
nodes.add(recordTwo);
nodes.add(recordThree);
@@ -204,7 +204,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase
assertTrue(freezeService.hasFrozenChildren(rmFolder));
// Check the hold
- holdAssocs = freezeService.getHolds(filePlan);
+ holdAssocs = holdService.getHolds(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 9a31105ae8..2215981553 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
@@ -20,8 +20,8 @@ package org.alfresco.module.org_alfresco_module_rm.test.util;
import java.io.Serializable;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService;
@@ -34,6 +34,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEventService;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
+import org.alfresco.module.org_alfresco_module_rm.fileplan.hold.HoldService;
import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService;
import org.alfresco.module.org_alfresco_module_rm.identifier.IdentifierService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
@@ -146,6 +147,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected ReportService reportService;
protected RecordsManagementAuditService rmAuditService;
protected IdentifierService identifierService;
+ protected HoldService holdService;
/** test data */
protected String siteId;
@@ -251,15 +253,15 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected String dmCollaborator;
protected NodeRef dmCollaboratorNodeRef;
- /**
- * Indicates whether this is a RM site test or not. If true then the test RM site is created along with a basic
+ /**
+ * Indicates whether this is a RM site test or not. If true then the test RM site is created along with a basic
* file plan structure, otherwise not.
*/
protected boolean isRMSiteTest()
{
return true;
}
-
+
/**
* Indicates whether this is a multi-hierarchy test or not. If it is then the multi-hierarchy record
* taxonomy test data is loaded.
@@ -395,6 +397,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
reportService = (ReportService) applicationContext.getBean("ReportService");
rmAuditService = (RecordsManagementAuditService) applicationContext.getBean("RecordsManagementAuditService");
identifierService = (IdentifierService) applicationContext.getBean("recordsManagementIdentifierService");
+ holdService = (HoldService) applicationContext.getBean("HoldService");
}
/**
@@ -430,7 +433,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
{
if (filePlan != null && nodeService.exists(filePlan) == true)
{
- Set holds = freezeService.getHolds(filePlan);
+ List holds = holdService.getHolds(filePlan);
for (NodeRef hold : holds)
{
freezeService.relinquish(hold);
@@ -500,7 +503,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
utils.declareRecord(recordDeclaredOne);
utils.declareRecord(recordDeclaredTwo);
}
-
+
// unfiled container
unfiledContainer = filePlanService.getUnfiledContainer(filePlan);
assertNotNull(unfiledContainer);
@@ -540,7 +543,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
permissionService.setPermission(folder, "rmadmin", PermissionService.ADD_CHILDREN, true);
if (isRMSiteTest() == true)
- {
+ {
siteId = GUID.generate();
siteInfo = siteService.createSite(
"rm-site-dashboard",
@@ -549,17 +552,17 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
"descrition",
SiteVisibility.PUBLIC,
RecordsManagementModel.TYPE_RM_SITE);
-
+
filePlan = siteService.getContainer(siteId, RmSiteType.COMPONENT_DOCUMENT_LIBRARY);
assertNotNull("Site document library container was not created successfully.", filePlan);
-
+
// Create RM container
rmContainer = filePlanService.createRecordCategory(filePlan, "rmContainer");
assertNotNull("Could not create rm container", rmContainer);
-
+
// Create disposition schedule
dispositionSchedule = utils.createBasicDispositionSchedule(rmContainer);
-
+
// Create RM folder
rmFolder = recordFolderService.createRecordFolder(rmContainer, "rmFolder");
assertNotNull("Could not create rm folder", rmFolder);