From 6f88d04bb31f20cfc156d686ec63748dfca4b9b5 Mon Sep 17 00:00:00 2001 From: bdwiwedi Date: Tue, 10 Aug 2021 00:46:16 +0530 Subject: [PATCH] RM-6941 added slf4j and junit test [ags] --- .../messages/action-service.properties | 2 +- .../org_alfresco_module_rm/rm-job-context.xml | 1 + .../rm-service-context.xml | 6 +- .../RecordsManagementActionServiceImpl.java | 179 ++++---- .../disposition/DispositionService.java | 7 - .../disposition/DispositionServiceImpl.java | 31 -- .../freeze/FreezeService.java | 8 + .../freeze/FreezeServiceImpl.java | 226 +++++----- .../job/DispositionLifecycleJobExecuter.java | 182 ++++---- .../legacy/service/FreezeServiceImplTest.java | 394 +++++++++--------- amps/module-info.java | 5 + 11 files changed, 497 insertions(+), 544 deletions(-) create mode 100644 amps/module-info.java diff --git a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties index 0a1f596e61..ad0fbb49fd 100644 --- a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties +++ b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/action-service.properties @@ -45,4 +45,4 @@ rm.action.create.transfer.container.child-error-message=You can't create items i rm.action.create.transfer.child-error-message=You can't create items in Transfer Folders. rm.action.create.record.folder.child-error-message=You can only create records in record folders and this was a {0}. rm.action.transfer-non-editable=You can't edit transfer folder or container metadata. -rm.action.node.frozen.error-message=unable to perform action {0} because node is frozen or has frozen children +rm.action.node.frozen.error-message=Unable to perform action {0} because node is frozen or has frozen children. diff --git a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-job-context.xml b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-job-context.xml index 139ffbd577..949ce23b70 100644 --- a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-job-context.xml +++ b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-job-context.xml @@ -80,6 +80,7 @@ + diff --git a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index 5dff18ec63..366a38eb8e 100644 --- a/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/amps/ags/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -112,7 +112,6 @@ - @@ -699,11 +698,10 @@ - cutoff retain - + @@ -908,6 +906,8 @@ + + diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionServiceImpl.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionServiceImpl.java index a4c816d04c..9c6283ebce 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionServiceImpl.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/action/RecordsManagementActionServiceImpl.java @@ -35,59 +35,72 @@ import java.util.List; import java.util.Map; import java.util.Set; +import lombok.extern.slf4j.Slf4j; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.BeforeRMActionExecution; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.OnRMActionExecution; +import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.module.org_alfresco_module_rm.util.PoliciesUtil; -import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.QName; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.extensions.surf.util.I18NUtil; -import org.springframework.beans.factory.annotation.Autowired; /** * Records Management Action Service Implementation * * @author Roy Wetherall */ -public class RecordsManagementActionServiceImpl implements RecordsManagementActionService -{ - /** I18N */ +@Slf4j +public class RecordsManagementActionServiceImpl implements RecordsManagementActionService { + /** + * I18N + */ private static final String MSG_NOT_DEFINED = "rm.action.not-defined"; private static final String MSG_NO_IMPLICIT_NODEREF = "rm.action.no-implicit-noderef"; private static final String MSG_NODE_FROZEN = "rm.action.node.frozen.error-message"; - /** Logger */ - private static final Log logger = LogFactory.getLog(RecordsManagementActionServiceImpl.class); - /** Registered records management actions */ + /** + * Registered records management actions + */ private Map rmActions = new HashMap<>(13); private Map rmConditions = new HashMap<>(13); private Map dispositionActions = new HashMap<>(5); - /** Policy component */ + /** + * Policy component + */ private PolicyComponent policyComponent; - /** Node service */ + /** + * Node service + */ private NodeService nodeService; - /** Policy delegates */ + /** + * Policy delegates + */ private ClassPolicyDelegate beforeRMActionExecutionDelegate; private ClassPolicyDelegate onRMActionExecutionDelegate; - private DispositionService dispositionService; + /** + * Freeze Service + */ + private FreezeService freezeService; - public void setDispositionService(DispositionService dispositionService) { - this.dispositionService = dispositionService; + /** + * @param freezeService freeze service + */ + public void setFreezeService(FreezeService freezeService) { + this.freezeService = freezeService; } - - /** list of disposition actions to automatically execute */ + /** + * list of retention actions to automatically execute + */ private List retentionActions; public void setRetentionActions(List retentionActions) { @@ -97,16 +110,14 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @return Policy component */ - protected PolicyComponent getPolicyComponent() - { + protected PolicyComponent getPolicyComponent() { return this.policyComponent; } /** * @return Node Service */ - protected NodeService getNodeService() - { + protected NodeService getNodeService() { return this.nodeService; } @@ -115,26 +126,23 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi * * @param policyComponent policy component */ - public void setPolicyComponent(PolicyComponent policyComponent) - { + public void setPolicyComponent(PolicyComponent policyComponent) { this.policyComponent = policyComponent; } /** * Set the node service * - * @param nodeService node service + * @param nodeService node service */ - public void setNodeService(NodeService nodeService) - { + public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } /** * Initialise RM action service */ - public void init() - { + public void init() { // Register the various policies beforeRMActionExecutionDelegate = getPolicyComponent().registerClassPolicy(BeforeRMActionExecution.class); onRMActionExecutionDelegate = getPolicyComponent().registerClassPolicy(OnRMActionExecution.class); @@ -143,23 +151,18 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#register(org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction) */ - public void register(RecordsManagementAction rmAction) - { - if (!rmActions.containsKey(rmAction.getName())) - { + public void register(RecordsManagementAction rmAction) { + if (!rmActions.containsKey(rmAction.getName())) { rmActions.put(rmAction.getName(), rmAction); - if (rmAction.isDispositionAction()) - { + if (rmAction.isDispositionAction()) { dispositionActions.put(rmAction.getName(), rmAction); } } } - public void register(RecordsManagementActionCondition rmCondition) - { - if (!rmConditions.containsKey(rmCondition.getBeanName())) - { + public void register(RecordsManagementActionCondition rmCondition) { + if (!rmConditions.containsKey(rmCondition.getBeanName())) { rmConditions.put(rmCondition.getBeanName(), rmCondition); } } @@ -167,12 +170,11 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * Invoke beforeRMActionExecution policy * - * @param nodeRef node reference - * @param name action name - * @param parameters action parameters + * @param nodeRef node reference + * @param name action name + * @param parameters action parameters */ - protected void invokeBeforeRMActionExecution(NodeRef nodeRef, String name, Map parameters) - { + protected void invokeBeforeRMActionExecution(NodeRef nodeRef, String name, Map parameters) { // get qnames to invoke against Set qnames = PoliciesUtil.getTypeAndAspectQNames(getNodeService(), nodeRef); // execute policy for node type and aspects @@ -183,12 +185,11 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * Invoke onRMActionExecution policy * - * @param nodeRef node reference - * @param name action name - * @param parameters action parameters + * @param nodeRef node reference + * @param name action name + * @param parameters action parameters */ - protected void invokeOnRMActionExecution(NodeRef nodeRef, String name, Map parameters) - { + protected void invokeOnRMActionExecution(NodeRef nodeRef, String name, Map parameters) { // get qnames to invoke against Set qnames = PoliciesUtil.getTypeAndAspectQNames(getNodeService(), nodeRef); // execute policy for node type and aspects @@ -199,8 +200,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#getRecordsManagementActions() */ - public List getRecordsManagementActions() - { + public List getRecordsManagementActions() { List result = new ArrayList<>(this.rmActions.size()); result.addAll(this.rmActions.values()); return Collections.unmodifiableList(result); @@ -210,8 +210,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#getRecordsManagementActionConditions() */ @Override - public List getRecordsManagementActionConditions() - { + public List getRecordsManagementActionConditions() { List result = new ArrayList<>(rmConditions.size()); result.addAll(rmConditions.values()); return Collections.unmodifiableList(result); @@ -224,12 +223,10 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi * @return List of records management action */ @SuppressWarnings("unused") - public List getDispositionActions(NodeRef nodeRef) - { + public List getDispositionActions(NodeRef nodeRef) { List result = new ArrayList<>(this.rmActions.size()); - for (RecordsManagementAction action : this.rmActions.values()) - { + for (RecordsManagementAction action : this.rmActions.values()) { // TODO check the permissions on the action ... } @@ -239,8 +236,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#getDispositionActions() */ - public List getDispositionActions() - { + public List getDispositionActions() { List result = new ArrayList<>(dispositionActions.size()); result.addAll(dispositionActions.values()); return Collections.unmodifiableList(result); @@ -249,65 +245,50 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#getDispositionAction(java.lang.String) */ - public RecordsManagementAction getDispositionAction(String name) - { + public RecordsManagementAction getDispositionAction(String name) { return dispositionActions.get(name); } /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#getRecordsManagementAction(java.lang.String) */ - public RecordsManagementAction getRecordsManagementAction(String name) - { + public RecordsManagementAction getRecordsManagementAction(String name) { return this.rmActions.get(name); } /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#executeRecordsManagementAction(org.alfresco.service.cmr.repository.NodeRef, java.lang.String) */ - public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name) - { + public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name) { return executeRecordsManagementAction(nodeRef, name, null); } /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#executeRecordsManagementAction(java.util.List, java.lang.String) */ - public Map executeRecordsManagementAction(List nodeRefs, String name) - { + public Map executeRecordsManagementAction(List nodeRefs, String name) { return executeRecordsManagementAction(nodeRefs, name, null); } /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#executeRecordsManagementAction(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, java.util.Map) */ - public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name, Map parameters) - { - if (logger.isDebugEnabled()) - { - logger.debug("Executing record management action on " + nodeRef); - logger.debug(" actionName = " + name); - logger.debug(" parameters = " + parameters); - } + public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name, Map parameters) { + log.debug("Executing record management action on " + nodeRef); + log.debug(" actionName = " + name); + log.debug(" parameters = " + parameters); RecordsManagementAction rmAction = this.rmActions.get(name); - if (rmAction == null) - { + if (rmAction == null) { String msg = I18NUtil.getMessage(MSG_NOT_DEFINED, name); - if (logger.isWarnEnabled()) - { - logger.warn(msg); - } + log.warn(msg); throw new AlfrescoRuntimeException(msg); } - if (dispositionService.isFrozenOrHasFrozenChildren(nodeRef) && retentionActions.contains(name.toLowerCase())) { - String msg = I18NUtil.getMessage(MSG_NODE_FROZEN, rmAction.getName()); + if (freezeService.isFrozenOrHasFrozenChildren(nodeRef) && retentionActions.contains(name.toLowerCase())) { + String msg = I18NUtil.getMessage(MSG_NODE_FROZEN, name); - if (logger.isDebugEnabled()) - { - logger.debug(msg); - } + log.debug(msg); throw new AlfrescoRuntimeException(msg); } @@ -315,8 +296,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi // Execute action invokeBeforeRMActionExecution(nodeRef, name, parameters); RecordsManagementActionResult result = rmAction.execute(nodeRef, parameters); - if (getNodeService().exists(nodeRef)) - { + if (getNodeService().exists(nodeRef)) { invokeOnRMActionExecution(nodeRef, name, parameters); } @@ -326,22 +306,15 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#executeRecordsManagementAction(java.lang.String, java.util.Map) */ - public RecordsManagementActionResult executeRecordsManagementAction(String name, Map parameters) - { + public RecordsManagementActionResult executeRecordsManagementAction(String name, Map parameters) { RecordsManagementAction rmAction = rmActions.get(name); NodeRef implicitTargetNode = rmAction.getImplicitTargetNodeRef(); - if (implicitTargetNode == null) - { + if (implicitTargetNode == null) { String msg = I18NUtil.getMessage(MSG_NO_IMPLICIT_NODEREF, name); - if (logger.isWarnEnabled()) - { - logger.warn(msg); - } + log.warn(msg); throw new AlfrescoRuntimeException(msg); - } - else - { + } else { return this.executeRecordsManagementAction(implicitTargetNode, name, parameters); } } @@ -349,12 +322,10 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi /** * @see org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService#executeRecordsManagementAction(java.util.List, java.lang.String, java.util.Map) */ - public Map executeRecordsManagementAction(List nodeRefs, String name, Map parameters) - { + public Map executeRecordsManagementAction(List nodeRefs, String name, Map parameters) { // Execute the action on each node in the list Map results = new HashMap<>(nodeRefs.size()); - for (NodeRef nodeRef : nodeRefs) - { + for (NodeRef nodeRef : nodeRefs) { RecordsManagementActionResult result = executeRecordsManagementAction(nodeRef, name, parameters); results.put(nodeRef, result); } diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java index f307a62927..4c71ac55e5 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionService.java @@ -289,11 +289,4 @@ public interface DispositionService */ void recalculateNextDispositionStep(NodeRef record); - /** - * Check given node or its children are frozen - * The node should be record or record folder for retention schedule - * - * @param nodeRef - */ - boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef); } diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java index b4684e4869..d8675595f1 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/disposition/DispositionServiceImpl.java @@ -45,7 +45,6 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.property.Dispositi import org.alfresco.module.org_alfresco_module_rm.event.RecordsManagementEvent; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; -import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; 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; @@ -116,9 +115,6 @@ public class DispositionServiceImpl extends ServiceBaseImpl /** Record Service */ private RecordService recordService; - /** Freeze Service */ - private FreezeService freezeService; - /** Transaction service */ private TransactionService transactionService; @@ -191,14 +187,6 @@ public class DispositionServiceImpl extends ServiceBaseImpl this.recordService = recordService; } - /** - * @param freezeService freeze service - */ - public void setFreezeService(FreezeService freezeService) - { - this.freezeService = freezeService; - } - /** * @param transactionService transaction service */ @@ -1469,23 +1457,4 @@ public class DispositionServiceImpl extends ServiceBaseImpl newDispositionActionName, newDispositionActionDateAsOf, WriteMode.DATE_AND_NAME); } - /** - * Helper method to determine if a node is frozen or has frozen children - * - * @param nodeRef Node to be checked - * @return true if the node is frozen or has frozen children, false otherwise - */ - @Override - public boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef) - { - if (recordFolderService.isRecordFolder(nodeRef)) - { - return freezeService.isFrozen(nodeRef) || freezeService.hasFrozenChildren(nodeRef); - } - else if (recordService.isRecord(nodeRef)) - { - return freezeService.isFrozen(nodeRef); - } - return Boolean.FALSE; - } } diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java index eb9f8a1c7a..bbd84ea295 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeService.java @@ -150,4 +150,12 @@ public interface FreezeService */ @Deprecated Set getHolds(NodeRef filePlan); + + /** + * Check given node or its children are frozen + * The node should be record or record folder for retention schedule + * + * @param nodeRef + */ + boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef); } diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java index 9f77ed6121..4a679b4460 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/freeze/FreezeServiceImpl.java @@ -43,6 +43,8 @@ import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService; import org.alfresco.module.org_alfresco_module_rm.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.util.ServiceBaseImpl; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -62,48 +64,73 @@ import org.springframework.extensions.surf.util.I18NUtil; * @author Tuna Aksoy * @since 2.1 */ -public class FreezeServiceImpl extends ServiceBaseImpl - implements FreezeService, - RecordsManagementModel -{ - /** I18N */ +public class FreezeServiceImpl extends ServiceBaseImpl + implements FreezeService, + RecordsManagementModel { + /** + * I18N + */ private static final String MSG_HOLD_NAME = "rm.hold.name"; - /** File Plan Service */ + /** + * File Plan Service + */ private FilePlanService filePlanService; - /** Hold service */ + /** + * Hold service + */ private HoldService holdService; + /** + * Record Folder Service + */ + private RecordFolderService recordFolderService; + + /** + * Record Service + */ + private RecordService recordService; + + /** + * @param recordFolderService record folder service + */ + public void setRecordFolderService(RecordFolderService recordFolderService) { + this.recordFolderService = recordFolderService; + } + + /** + * @param recordService record service + */ + public void setRecordService(RecordService recordService) { + this.recordService = recordService; + } + /** * @return File plan service */ - protected FilePlanService getFilePlanService() - { + protected FilePlanService getFilePlanService() { return this.filePlanService; } /** * @return Hold service */ - protected HoldService getHoldService() - { + protected HoldService getHoldService() { return this.holdService; } /** * @param filePlanService file plan service */ - public void setFilePlanService(FilePlanService filePlanService) - { + public void setFilePlanService(FilePlanService filePlanService) { this.filePlanService = filePlanService; } /** * @param holdService hold service */ - public void setHoldService(HoldService holdService) - { + public void setHoldService(HoldService holdService) { this.holdService = holdService; } @@ -111,8 +138,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#isFrozen(org.alfresco.service.cmr.repository.NodeRef) */ @Override - public boolean isFrozen(NodeRef nodeRef) - { + public boolean isFrozen(NodeRef nodeRef) { ParameterCheck.mandatory("nodeRef", nodeRef); return nodeService.hasAspect(nodeRef, ASPECT_FROZEN); @@ -127,19 +153,17 @@ public class FreezeServiceImpl extends ServiceBaseImpl */ @Override @Deprecated - public Set getFrozen(NodeRef hold) - { + public Set getFrozen(NodeRef hold) { return new HashSet<>(getHoldService().getHeld(hold)); } /** * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, - * org.alfresco.service.cmr.repository.NodeRef) + * org.alfresco.service.cmr.repository.NodeRef) */ @Override @Deprecated - public NodeRef freeze(String reason, NodeRef nodeRef) - { + public NodeRef freeze(String reason, NodeRef nodeRef) { NodeRef hold = createHold(nodeRef, reason); getHoldService().addToHold(hold, nodeRef); return hold; @@ -147,12 +171,11 @@ public class FreezeServiceImpl extends ServiceBaseImpl /** * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, - * org.alfresco.service.cmr.repository.NodeRef) + * org.alfresco.service.cmr.repository.NodeRef) */ @Override @Deprecated - public void freeze(NodeRef hold, NodeRef nodeRef) - { + public void freeze(NodeRef hold, NodeRef nodeRef) { ParameterCheck.mandatory("hold", hold); ParameterCheck.mandatory("nodeRef", nodeRef); @@ -161,15 +184,13 @@ public class FreezeServiceImpl extends ServiceBaseImpl /** * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(java.lang.String, - * java.util.Set) + * java.util.Set) */ @Override @Deprecated - public NodeRef freeze(String reason, Set nodeRefs) - { + public NodeRef freeze(String reason, Set nodeRefs) { NodeRef hold = null; - if (!nodeRefs.isEmpty()) - { + if (!nodeRefs.isEmpty()) { final List list = new ArrayList<>(nodeRefs); hold = createHold(list.get(0), reason); getHoldService().addToHold(hold, list); @@ -179,17 +200,15 @@ public class FreezeServiceImpl extends ServiceBaseImpl /** * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#freeze(org.alfresco.service.cmr.repository.NodeRef, - * java.util.Set) + * java.util.Set) */ @Override @Deprecated - public void freeze(NodeRef hold, Set nodeRefs) - { + public void freeze(NodeRef hold, Set nodeRefs) { ParameterCheck.mandatory("hold", hold); ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - for (NodeRef nodeRef : nodeRefs) - { + for (NodeRef nodeRef : nodeRefs) { freeze(hold, nodeRef); } } @@ -199,11 +218,9 @@ public class FreezeServiceImpl extends ServiceBaseImpl */ @Override @Deprecated - public void unFreeze(NodeRef nodeRef) - { + public void unFreeze(NodeRef nodeRef) { List holds = getHoldService().heldBy(nodeRef, true); - for (NodeRef hold : holds) - { + for (NodeRef hold : holds) { getHoldService().removeFromHold(hold, nodeRef); } } @@ -213,12 +230,10 @@ public class FreezeServiceImpl extends ServiceBaseImpl */ @Override @Deprecated - public void unFreeze(Set nodeRefs) - { + public void unFreeze(Set nodeRefs) { ParameterCheck.mandatoryCollection("nodeRefs", nodeRefs); - for (NodeRef nodeRef : nodeRefs) - { + for (NodeRef nodeRef : nodeRefs) { unFreeze(nodeRef); } } @@ -228,8 +243,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl */ @Override @Deprecated - public void relinquish(NodeRef hold) - { + public void relinquish(NodeRef hold) { getHoldService().deleteHold(hold); } @@ -238,19 +252,17 @@ public class FreezeServiceImpl extends ServiceBaseImpl */ @Override @Deprecated - public String getReason(NodeRef hold) - { + public String getReason(NodeRef hold) { return getHoldService().getHoldReason(hold); } /** * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#updateReason(org.alfresco.service.cmr.repository.NodeRef, - * java.lang.String) + * java.lang.String) */ @Override @Deprecated - public void updateReason(NodeRef hold, String reason) - { + public void updateReason(NodeRef hold, String reason) { getHoldService().setHoldReason(hold, reason); } @@ -258,8 +270,7 @@ public class FreezeServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.hold.HoldService#getHolds(NodeRef) */ @Override - public Set getHolds(NodeRef filePlan) - { + public Set getHolds(NodeRef filePlan) { ParameterCheck.mandatory("filePlan", filePlan); return new HashSet<>(getHoldService().getHolds(filePlan)); @@ -269,60 +280,48 @@ public class FreezeServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#hasFrozenChildren(org.alfresco.service.cmr.repository.NodeRef) */ @Override - public boolean hasFrozenChildren(final NodeRef nodeRef) - { + public boolean hasFrozenChildren(final NodeRef nodeRef) { ParameterCheck.mandatory("nodeRef", nodeRef); boolean result = false; // check that we are dealing with a record folder or a collaboration folder if (isRecordFolder(nodeRef) || - (instanceOf(nodeRef, TYPE_FOLDER) && !nodeService.hasAspect(nodeRef, ASPECT_SITE_CONTAINER))) - { + (instanceOf(nodeRef, TYPE_FOLDER) && !nodeService.hasAspect(nodeRef, ASPECT_SITE_CONTAINER))) { int heldCount = 0; - if (nodeService.hasAspect(nodeRef, ASPECT_HELD_CHILDREN)) - { - heldCount = (Integer)getInternalNodeService().getProperty(nodeRef, PROP_HELD_CHILDREN_COUNT); - } - else - { - final TransactionService transactionService = (TransactionService)applicationContext.getBean("transactionService"); + if (nodeService.hasAspect(nodeRef, ASPECT_HELD_CHILDREN)) { + heldCount = (Integer) getInternalNodeService().getProperty(nodeRef, PROP_HELD_CHILDREN_COUNT); + } else { + final TransactionService transactionService = (TransactionService) applicationContext.getBean("transactionService"); - heldCount = AuthenticationUtil.runAsSystem(new RunAsWork() - { + heldCount = AuthenticationUtil.runAsSystem(new RunAsWork() { @Override - public Integer doWork() - { - return transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() - { - public Integer execute() throws Throwable - { - int heldCount = 0; + public Integer doWork() { + return transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { + public Integer execute() throws Throwable { + int heldCount = 0; - // NOTE: this process remains to 'patch' older systems to improve performance next time around - List childAssocs = getInternalNodeService().getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, null); - if (childAssocs != null && !childAssocs.isEmpty()) - { - for (ChildAssociationRef childAssociationRef : childAssocs) - { - final NodeRef childRef = childAssociationRef.getChildRef(); - if (childAssociationRef.isPrimary() && isFrozen(childRef)) - { - heldCount ++; - } - } - } + // NOTE: this process remains to 'patch' older systems to improve performance next time around + List childAssocs = getInternalNodeService().getChildAssocs(nodeRef, ContentModel.ASSOC_CONTAINS, null); + if (childAssocs != null && !childAssocs.isEmpty()) { + for (ChildAssociationRef childAssociationRef : childAssocs) { + final NodeRef childRef = childAssociationRef.getChildRef(); + if (childAssociationRef.isPrimary() && isFrozen(childRef)) { + heldCount++; + } + } + } - // add aspect and set count - Map props = new HashMap<>(1); - props.put(PROP_HELD_CHILDREN_COUNT, heldCount); - getInternalNodeService().addAspect(nodeRef, ASPECT_HELD_CHILDREN, props); + // add aspect and set count + Map props = new HashMap<>(1); + props.put(PROP_HELD_CHILDREN_COUNT, heldCount); + getInternalNodeService().addAspect(nodeRef, ASPECT_HELD_CHILDREN, props); - return heldCount; - } - }, - false, true); + return heldCount; + } + }, + false, true); } }); } @@ -338,14 +337,14 @@ public class FreezeServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeDate(org.alfresco.service.cmr.repository.NodeRef) */ @Override - public Date getFreezeDate(NodeRef nodeRef) - { + public Date getFreezeDate(NodeRef nodeRef) { ParameterCheck.mandatory("nodeRef", nodeRef); - if (isFrozen(nodeRef)) - { + if (isFrozen(nodeRef)) { Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_AT); - if (property != null) { return (Date) property; } + if (property != null) { + return (Date) property; + } } return null; @@ -355,14 +354,14 @@ public class FreezeServiceImpl extends ServiceBaseImpl * @see org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService#getFreezeInitiator(org.alfresco.service.cmr.repository.NodeRef) */ @Override - public String getFreezeInitiator(NodeRef nodeRef) - { + public String getFreezeInitiator(NodeRef nodeRef) { ParameterCheck.mandatory("nodeRef", nodeRef); - if (isFrozen(nodeRef)) - { + if (isFrozen(nodeRef)) { Serializable property = nodeService.getProperty(nodeRef, PROP_FROZEN_BY); - if (property != null) { return (String) property; } + if (property != null) { + return (String) property; + } } return null; @@ -376,11 +375,10 @@ public class FreezeServiceImpl extends ServiceBaseImpl * Creates a hold using the given nodeRef and reason * * @param nodeRef the nodeRef which will be frozen - * @param reason the reason why the record will be frozen + * @param reason the reason why the record will be frozen * @return NodeRef of the created hold */ - private NodeRef createHold(NodeRef nodeRef, String reason) - { + private NodeRef createHold(NodeRef nodeRef, String reason) { // get the hold container final NodeRef filePlan = getFilePlanService().getFilePlan(nodeRef); NodeRef holdContainer = getFilePlanService().getHoldContainer(filePlan); @@ -392,4 +390,20 @@ public class FreezeServiceImpl extends ServiceBaseImpl // create hold return getHoldService().createHold(filePlan, holdName, reason, null); } + + /** + * Helper method to determine if a node is frozen or has frozen children + * + * @param nodeRef Node to be checked + * @return true if the node is frozen or has frozen children, false otherwise + */ + @Override + public boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef) { + if (recordFolderService.isRecordFolder(nodeRef)) { + return isFrozen(nodeRef) || hasFrozenChildren(nodeRef); + } else if (recordService.isRecord(nodeRef)) { + return isFrozen(nodeRef); + } + return Boolean.FALSE; + } } diff --git a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java index 49f8fe5272..0f19f3af4d 100644 --- a/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java +++ b/amps/ags/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/job/DispositionLifecycleJobExecuter.java @@ -33,8 +33,11 @@ import java.io.Serializable; import java.util.List; import java.util.Map; +import lombok.extern.slf4j.Slf4j; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; + +import org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -44,8 +47,8 @@ import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.PersonService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.surf.util.I18NUtil; + /** * The Disposition Lifecycle Job Finds all disposition action nodes which are for disposition actions specified Where @@ -54,69 +57,88 @@ import org.apache.commons.logging.LogFactory; * @author mrogers * @author Roy Wetherall */ -public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecuter -{ - /** logger */ - private static final Log logger = LogFactory.getLog(DispositionLifecycleJobExecuter.class); - - /** batching properties */ +@Slf4j +public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecuter { + /** + * batching properties + */ private int batchSize; public static final int DEFAULT_BATCH_SIZE = 500; + private static final String MSG_NODE_FROZEN = "rm.action.node.frozen.error-message"; - /** list of disposition actions to automatically execute */ + /** + * list of disposition actions to automatically execute + */ private List dispositionActions; - /** query string */ + /** + * query string + */ private String query; - /** records management action service */ + /** + * records management action service + */ private RecordsManagementActionService recordsManagementActionService; - /** node service */ + /** + * node service + */ private NodeService nodeService; - /** search service */ + /** + * search service + */ private SearchService searchService; - /** person service */ + /** + * person service + */ private PersonService personService; + /** + * Freeze Service + */ + private FreezeService freezeService; + + /** + * @param freezeService freeze service + */ + public void setFreezeService(FreezeService freezeService) { + this.freezeService = freezeService; + } + /** * List of disposition actions to automatically execute when eligible. * * @param dispositionActions disposition actions */ - public void setDispositionActions(List dispositionActions) - { + public void setDispositionActions(List dispositionActions) { this.dispositionActions = dispositionActions; } - public void setBatchSize(int batchSize) - { + public void setBatchSize(int batchSize) { this.batchSize = batchSize; } /** * @param recordsManagementActionService records management action service */ - public void setRecordsManagementActionService(RecordsManagementActionService recordsManagementActionService) - { + public void setRecordsManagementActionService(RecordsManagementActionService recordsManagementActionService) { this.recordsManagementActionService = recordsManagementActionService; } /** * @param nodeService node service */ - public void setNodeService(NodeService nodeService) - { + public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } /** * @param searchService search service */ - public void setSearchService(SearchService searchService) - { + public void setSearchService(SearchService searchService) { this.searchService = searchService; } @@ -125,24 +147,18 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute * * @return job query string */ - protected String getQuery() - { - if (query == null) - { + protected String getQuery() { + if (query == null) { StringBuilder sb = new StringBuilder(); sb.append("TYPE:\"rma:dispositionAction\" AND "); sb.append("(@rma\\:dispositionAction:("); boolean bFirst = true; - for (String dispositionAction : dispositionActions) - { - if (bFirst) - { + for (String dispositionAction : dispositionActions) { + if (bFirst) { bFirst = false; - } - else - { + } else { sb.append(" OR "); } @@ -166,36 +182,26 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute * @see org.alfresco.module.org_alfresco_module_rm.job.RecordsManagementJobExecuter#execute() */ @Override - public void executeImpl() - { - try - { - logger.debug("Job Starting"); + public void executeImpl() { + try { + log.debug("Job Starting"); - if (dispositionActions == null || dispositionActions.isEmpty()) - { - logger.debug("Job Finished as disposition action is empty"); + if (dispositionActions == null || dispositionActions.isEmpty()) { + log.debug("Job Finished as disposition action is empty"); return; } boolean hasMore = true; int skipCount = 0; - if (batchSize < 1) - { - if (logger.isDebugEnabled()) - { - logger.debug("Invalid value for batch size: " + batchSize + " default value used instead."); - } + if (batchSize < 1) { + log.debug("Invalid value for batch size: " + batchSize + " default value used instead."); batchSize = DEFAULT_BATCH_SIZE; } - if (logger.isTraceEnabled()) - { - logger.trace("Using batch size of " + batchSize); - } - while (hasMore) - { + log.trace("Using batch size of " + batchSize); + + while (hasMore) { SearchParameters params = new SearchParameters(); params.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); params.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); @@ -210,25 +216,16 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute skipCount += resultNodes.size(); // increase by page size results.close(); - if (logger.isDebugEnabled()) - { - logger.debug("Processing " + resultNodes.size() + " nodes"); - } + log.debug("Processing " + resultNodes.size() + " nodes"); // process search results - if (!resultNodes.isEmpty()) - { + if (!resultNodes.isEmpty()) { executeAction(resultNodes); } } - logger.debug("Job Finished"); - } - catch (AlfrescoRuntimeException exception) - { - if (logger.isDebugEnabled()) - { - logger.debug(exception); - } + log.debug("Job Finished"); + } catch (AlfrescoRuntimeException exception) { + log.debug(exception.getMessage()); } } @@ -237,48 +234,41 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute * * @param actionNodes - the disposition actions to execute */ - private void executeAction(final List actionNodes) - { + private void executeAction(final List actionNodes) { RetryingTransactionCallback processTranCB = () -> { - for (NodeRef actionNode : actionNodes) - { - if (!nodeService.exists(actionNode)) - { + for (NodeRef actionNode : actionNodes) { + if (!nodeService.exists(actionNode)) { continue; } final String dispAction = (String) nodeService.getProperty(actionNode, PROP_DISPOSITION_ACTION); // Run disposition action - if (dispAction == null || !dispositionActions.contains(dispAction)) - { + if (dispAction == null || !dispositionActions.contains(dispAction)) { continue; } ChildAssociationRef parent = nodeService.getPrimaryParent(actionNode); - if (!parent.getTypeQName().equals(ASSOC_NEXT_DISPOSITION_ACTION)) - { + if (!parent.getTypeQName().equals(ASSOC_NEXT_DISPOSITION_ACTION)) { continue; } Map props = Map.of(PARAM_NO_ERROR_CHECK, false); - try - { + if (freezeService.isFrozenOrHasFrozenChildren(parent.getParentRef())) { + log.debug(I18NUtil.getMessage(MSG_NODE_FROZEN, dispAction)); + continue; + } + + try { // execute disposition action recordsManagementActionService - .executeRecordsManagementAction(parent.getParentRef(), dispAction, props); + .executeRecordsManagementAction(parent.getParentRef(), dispAction, props); + + log.debug("Processed action: " + dispAction + "on" + parent); + + } catch (AlfrescoRuntimeException exception) { + log.debug(exception.getMessage()); - if (logger.isDebugEnabled()) - { - logger.debug("Processed action: " + dispAction + "on" + parent); - } - } - catch (AlfrescoRuntimeException exception) - { - if (logger.isDebugEnabled()) - { - logger.debug(exception); - } } } return Boolean.TRUE; @@ -286,13 +276,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute retryingTransactionHelper.doInTransaction(processTranCB, false, true); } - public PersonService getPersonService() - { + public PersonService getPersonService() { return personService; } - public void setPersonService(PersonService personService) - { + public void setPersonService(PersonService personService) { this.personService = personService; } } diff --git a/amps/ags/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java b/amps/ags/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java index 870cce7038..925ea68ce4 100644 --- a/amps/ags/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java +++ b/amps/ags/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/FreezeServiceImplTest.java @@ -41,232 +41,236 @@ import org.alfresco.service.cmr.repository.NodeRef; * @author Tuna Aksoy * @since 2.1 */ -public class FreezeServiceImplTest extends BaseRMTestCase -{ +public class FreezeServiceImplTest extends BaseRMTestCase { private List holdAssocs; @Override - protected boolean isRecordTest() - { + protected boolean isRecordTest() { return true; } - /** - * Test freeze service methods. - * - * @deprecated as of 2.2 - */ - public void testFreezeService() throws Exception - { + /** + * Test freeze service methods. + * + * @deprecated as of 2.2 + */ + public void testFreezeService() throws Exception { - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { - assertTrue(recordService.isRecord(recordOne)); - assertTrue(recordService.isRecord(recordTwo)); - assertTrue(recordService.isRecord(recordThree)); - assertTrue(recordService.isRecord(recordFour)); - assertTrue(filePlanService.isFilePlanComponent(recordOne)); - assertTrue(filePlanService.isFilePlanComponent(recordTwo)); - assertTrue(filePlanService.isFilePlanComponent(recordThree)); - assertTrue(filePlanService.isFilePlanComponent(recordFour)); + doTestInTransaction(new Test() { + @Override + public Void run() throws Exception { + assertTrue(recordService.isRecord(recordOne)); + assertTrue(recordService.isRecord(recordTwo)); + assertTrue(recordService.isRecord(recordThree)); + assertTrue(recordService.isRecord(recordFour)); + assertTrue(filePlanService.isFilePlanComponent(recordOne)); + assertTrue(filePlanService.isFilePlanComponent(recordTwo)); + assertTrue(filePlanService.isFilePlanComponent(recordThree)); + assertTrue(filePlanService.isFilePlanComponent(recordFour)); - // Freeze a record - NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); + // Freeze a record + NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); - assertNotNull(hold101); - holdService.addToHold(hold101, recordOne); + assertNotNull(hold101); + holdService.addToHold(hold101, recordOne); - //assertTrue(freezeService.hasFrozenChildren(rmFolder)); + //assertTrue(freezeService.hasFrozenChildren(rmFolder)); - // Check the hold exists - holdAssocs = holdService.getHolds(filePlan); - assertNotNull(holdAssocs); - assertEquals(1, holdAssocs.size()); + // Check the hold exists + holdAssocs = holdService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(1, holdAssocs.size()); - NodeRef holdNodeRef = holdAssocs.iterator().next(); + NodeRef holdNodeRef = holdAssocs.iterator().next(); - assertEquals(holdNodeRef, hold101); - assertTrue(holdService.isHold(holdNodeRef)); - assertEquals("FreezeReason", holdService.getHoldReason(holdNodeRef)); - List frozenNodes = holdService.getHeld(holdNodeRef); + assertEquals(holdNodeRef, hold101); + assertTrue(holdService.isHold(holdNodeRef)); + assertEquals("FreezeReason", holdService.getHoldReason(holdNodeRef)); + List frozenNodes = holdService.getHeld(holdNodeRef); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); + assertNotNull(frozenNodes); + assertEquals(1, frozenNodes.size()); - // Check the nodes are frozen - assertTrue(freezeService.isFrozen(recordOne)); - assertNotNull(freezeService.getFreezeDate(recordOne)); - assertNotNull(freezeService.getFreezeInitiator(recordOne)); - assertFalse(freezeService.isFrozen(recordTwo)); - assertFalse(freezeService.isFrozen(recordThree)); + // Check the nodes are frozen + assertTrue(freezeService.isFrozen(recordOne)); + assertNotNull(freezeService.getFreezeDate(recordOne)); + assertNotNull(freezeService.getFreezeInitiator(recordOne)); + assertFalse(freezeService.isFrozen(recordTwo)); + assertFalse(freezeService.isFrozen(recordThree)); - // Update the freeze reason - holdService.setHoldReason(holdNodeRef, "NewFreezeReason"); + // Update the freeze reason + holdService.setHoldReason(holdNodeRef, "NewFreezeReason"); - // Check the hold has been updated - assertEquals("NewFreezeReason", holdService.getHoldReason(holdNodeRef)); + // Check the hold has been updated + assertEquals("NewFreezeReason", holdService.getHoldReason(holdNodeRef)); - // Freeze a number of records - List records = new ArrayList<>(); - records.add(recordOne); - records.add(recordTwo); - records.add(recordThree); - NodeRef newHold = holdService.createHold(filePlan, "Hold 102", "Freeze a set of nodes", null); + // Freeze a number of records + List records = new ArrayList<>(); + records.add(recordOne); + records.add(recordTwo); + records.add(recordThree); + NodeRef newHold = holdService.createHold(filePlan, "Hold 102", "Freeze a set of nodes", null); - holdService.addToHold(newHold, records); - assertNotNull(newHold); - assertTrue(holdService.isHold(newHold)); + holdService.addToHold(newHold, records); + assertNotNull(newHold); + assertTrue(holdService.isHold(newHold)); - // Check the holds exist - holdAssocs = holdService.getHolds(filePlan); - assertNotNull(holdAssocs); - assertEquals(2, holdAssocs.size()); + // Check the holds exist + holdAssocs = holdService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(2, holdAssocs.size()); - for (NodeRef hold : holdAssocs) - { - String reason = holdService.getHoldReason(hold); - if (reason.equals("Freeze a set of nodes")) - { - assertEquals(newHold, hold); - frozenNodes = holdService.getHeld(hold); - assertNotNull(frozenNodes); - assertEquals(3, frozenNodes.size()); - } - else if (reason.equals("NewFreezeReason")) - { - frozenNodes = holdService.getHeld(hold); - assertNotNull(frozenNodes); - assertEquals(1, frozenNodes.size()); - } - else - { - throw new AlfrescoRuntimeException("The reason '" + reason + "' was not found in the existing holds."); - } + for (NodeRef hold : holdAssocs) { + String reason = holdService.getHoldReason(hold); + if (reason.equals("Freeze a set of nodes")) { + assertEquals(newHold, hold); + frozenNodes = holdService.getHeld(hold); + assertNotNull(frozenNodes); + assertEquals(3, frozenNodes.size()); + } else if (reason.equals("NewFreezeReason")) { + frozenNodes = holdService.getHeld(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 + holdService.removeFromAllHolds(recordThree); + // Check the holds + holdAssocs = holdService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(2, holdAssocs.size()); + for (NodeRef hold : holdAssocs) { + String reason = holdService.getHoldReason(hold); + if (reason.equals("Freeze a set of nodes")) { + frozenNodes = holdService.getHeld(hold); + assertNotNull(frozenNodes); + assertEquals(2, frozenNodes.size()); + } else if (reason.equals("NewFreezeReason")) { + frozenNodes = holdService.getHeld(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)); + assertFalse(freezeService.isFrozen(recordFour)); + return null; } - - // 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 - holdService.removeFromAllHolds(recordThree); - // Check the holds - holdAssocs = holdService.getHolds(filePlan); - assertNotNull(holdAssocs); - assertEquals(2, holdAssocs.size()); - for (NodeRef hold : holdAssocs) - { - String reason = holdService.getHoldReason(hold); - if (reason.equals("Freeze a set of nodes")) - { - frozenNodes = holdService.getHeld(hold); - assertNotNull(frozenNodes); - assertEquals(2, frozenNodes.size()); - } - else if (reason.equals("NewFreezeReason")) - { - frozenNodes = holdService.getHeld(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)); - assertFalse(freezeService.isFrozen(recordFour)); - return null; - } - }); + }); //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { - // Relinquish the first hold - NodeRef holdNodeRef = holdAssocs.iterator().next(); - holdService.deleteHold(holdNodeRef); + doTestInTransaction(new Test() { + @Override + public Void run() throws Exception { + // Relinquish the first hold + NodeRef holdNodeRef = holdAssocs.iterator().next(); + holdService.deleteHold(holdNodeRef); - // Check the existing hold - holdAssocs = holdService.getHolds(filePlan); - assertNotNull(holdAssocs); - assertEquals(1, holdAssocs.size()); + // Check the existing hold + holdAssocs = holdService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(1, holdAssocs.size()); - // Relinquish the second hold - holdNodeRef = holdAssocs.iterator().next(); - holdService.removeFromAllHolds(holdService.getHeld(holdNodeRef)); + // Relinquish the second hold + holdNodeRef = holdAssocs.iterator().next(); + holdService.removeFromAllHolds(holdService.getHeld(holdNodeRef)); - // hold is not automatically removed - holdAssocs = holdService.getHolds(filePlan); - assertEquals(1, holdAssocs.size()); - - // delete hold - holdService.deleteHold(holdNodeRef); + // hold is not automatically removed + holdAssocs = holdService.getHolds(filePlan); + assertEquals(1, holdAssocs.size()); - holdAssocs = holdService.getHolds(filePlan); - assertEquals(0, holdAssocs.size()); + // delete hold + holdService.deleteHold(holdNodeRef); - // Check the nodes are unfrozen - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordTwo)); - assertFalse(freezeService.isFrozen(recordThree)); - assertFalse(freezeService.isFrozen(recordFour)); - //assertFalse(freezeService.hasFrozenChildren(rmFolder)); + holdAssocs = holdService.getHolds(filePlan); + assertEquals(0, holdAssocs.size()); - // Test freezing nodes, adding them to an existing hold - NodeRef hold = holdService.createHold(filePlan, "hold 1", "AnotherFreezeReason", "description"); - holdService.addToHold(hold, recordFour); - holdService.addToHold(hold, recordOne); - List nodes = new ArrayList<>(); - nodes.add(recordTwo); - nodes.add(recordThree); - holdService.addToHold(hold, nodes); - //assertTrue(freezeService.hasFrozenChildren(rmFolder)); - // Check the hold - holdAssocs = holdService.getHolds(filePlan); - assertNotNull(holdAssocs); - assertEquals(1, holdAssocs.size()); - return null; - } - }); - //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception - doTestInTransaction(new Test() - { - @Override - public Void run() throws Exception - { - // Relinquish the first hold - holdService.deleteHold(holdAssocs.iterator().next()); + // Check the nodes are unfrozen + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordTwo)); + assertFalse(freezeService.isFrozen(recordThree)); + assertFalse(freezeService.isFrozen(recordFour)); + //assertFalse(freezeService.hasFrozenChildren(rmFolder)); - // Check the nodes are unfrozen - assertFalse(freezeService.isFrozen(recordOne)); - assertFalse(freezeService.isFrozen(recordTwo)); - assertFalse(freezeService.isFrozen(recordThree)); - assertFalse(freezeService.isFrozen(recordFour)); - // assertFalse(freezeService.hasFrozenChildren(rmFolder)); + // Test freezing nodes, adding them to an existing hold + NodeRef hold = holdService.createHold(filePlan, "hold 1", "AnotherFreezeReason", "description"); + holdService.addToHold(hold, recordFour); + holdService.addToHold(hold, recordOne); + List nodes = new ArrayList<>(); + nodes.add(recordTwo); + nodes.add(recordThree); + holdService.addToHold(hold, nodes); + //assertTrue(freezeService.hasFrozenChildren(rmFolder)); + // Check the hold + holdAssocs = holdService.getHolds(filePlan); + assertNotNull(holdAssocs); + assertEquals(1, holdAssocs.size()); + return null; + } + }); + //Splitting transaction to fix onCreateNodePolicy issue where there was a node not found exception + doTestInTransaction(new Test() { + @Override + public Void run() throws Exception { + // Relinquish the first hold + holdService.deleteHold(holdAssocs.iterator().next()); - return null; - } - }); - } + // Check the nodes are unfrozen + assertFalse(freezeService.isFrozen(recordOne)); + assertFalse(freezeService.isFrozen(recordTwo)); + assertFalse(freezeService.isFrozen(recordThree)); + assertFalse(freezeService.isFrozen(recordFour)); + // assertFalse(freezeService.hasFrozenChildren(rmFolder)); + + return null; + } + }); + + doTestInTransaction(new Test() { + @Override + public Void run() throws Exception { + NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); + // Freeze a record folder + assertNotNull(hold101); + holdService.addToHold(hold101, rmFolder); + assertTrue(recordFolderService.isRecordFolder(rmFolder)); + assertTrue(freezeService.isFrozenOrHasFrozenChildren(rmFolder)); + return null; + } + }); + + doTestInTransaction(new Test() { + @Override + public Void run() throws Exception { + NodeRef hold101 = holdService.createHold(filePlan, "freezename 101", "FreezeReason", null); + // Freeze a record inside a record folder + assertNotNull(hold101); + holdService.addToHold(hold101, recordThree); + assertTrue(recordService.isRecord(rmFolder)); + assertTrue(freezeService.isFrozenOrHasFrozenChildren(rmFolder)); + return null; + } + }); + } } diff --git a/amps/module-info.java b/amps/module-info.java new file mode 100644 index 0000000000..669eda1dd7 --- /dev/null +++ b/amps/module-info.java @@ -0,0 +1,5 @@ +module simple.lombok { + requires static lombok; + requires java.logging; + +} \ No newline at end of file