diff --git a/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/hold/PreventActionsOnFrozenContentTests.java b/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/hold/PreventActionsOnFrozenContentTests.java index 62926a3930..f36627241e 100644 --- a/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/hold/PreventActionsOnFrozenContentTests.java +++ b/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/hold/PreventActionsOnFrozenContentTests.java @@ -67,7 +67,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; - +import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR; /** * API tests to check actions on frozen content * @@ -309,11 +309,11 @@ public class PreventActionsOnFrozenContentTests extends BaseRMRestTest STEP("Execute the retain action"); rmRolesAndActionsAPI.executeAction(getAdminUser().getUsername(), getAdminUser().getPassword(), record.getName(), - RM_ACTIONS.END_RETENTION); + RM_ACTIONS.END_RETENTION, null, SC_INTERNAL_SERVER_ERROR); STEP("Check the record search disposition properties"); Record recordUpdated = getRestAPIFactory().getRecordsAPI().getRecord(record.getId()); - assertTrue(recordUpdated.getProperties().getRecordSearchDispositionActionName().contains(RM_ACTIONS.DESTROY.getAction())); + assertTrue(recordUpdated.getProperties().getRecordSearchDispositionActionName().contains(RM_ACTIONS.END_RETENTION.getAction())); assertTrue(recordUpdated.getProperties().getRecordSearchDispositionPeriod().contains("immediately")); } 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 eeac19f2e6..dae1c555e2 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 the 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 8dd01c5ac8..2f76bdf22a 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,9 +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 95b668b250..ae80740b66 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 @@ -695,6 +695,13 @@ init-method="init" depends-on="org_alfresco_module_rm_resourceBundles"> + + + + retain + + + @@ -899,6 +906,8 @@ + + @@ -944,6 +953,7 @@ org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.hasFrozenChildren=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.getFreezeDate=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.getFreezeInitiator=RM_ALLOW + org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.isFrozenOrHasFrozenChildren=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.*=RM_DENY ]]> diff --git a/amps/ags/rm-community/rm-community-repo/pom.xml b/amps/ags/rm-community/rm-community-repo/pom.xml index c3c636878b..0f25658ed2 100644 --- a/amps/ags/rm-community/rm-community-repo/pom.xml +++ b/amps/ags/rm-community/rm-community-repo/pom.xml @@ -141,6 +141,11 @@ spring-test test + + org.projectlombok + lombok + provided + 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 69ecc6585d..6dbdc424be 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,17 +35,17 @@ 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.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; /** @@ -53,14 +53,13 @@ import org.springframework.extensions.surf.util.I18NUtil; * * @author Roy Wetherall */ +@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"; - - /** Logger */ - private static Log logger = LogFactory.getLog(RecordsManagementActionServiceImpl.class); + private static final String MSG_NODE_FROZEN = "rm.action.node.frozen.error-message"; /** Registered records management actions */ private Map rmActions = new HashMap<>(13); @@ -78,6 +77,16 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi private ClassPolicyDelegate beforeRMActionExecutionDelegate; private ClassPolicyDelegate onRMActionExecutionDelegate; + /** + * Freeze Service + */ + private FreezeService freezeService; + + /** + * list of retention actions to automatically execute + */ + private List retentionActions; + /** * @return Policy component */ @@ -94,6 +103,19 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi return this.nodeService; } + /** + * @param freezeService freeze service + */ + public void setFreezeService(FreezeService freezeService) + { + this.freezeService = freezeService; + } + + public void setRetentionActions(List retentionActions) + { + this.retentionActions = retentionActions; + } + /** * Set the policy component * @@ -267,21 +289,23 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi */ 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); - } + 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) { String msg = I18NUtil.getMessage(MSG_NOT_DEFINED, name); - if (logger.isWarnEnabled()) - { - logger.warn(msg); - } + log.warn(msg); + throw new AlfrescoRuntimeException(msg); + } + + if (retentionActions.contains(name.toLowerCase()) && freezeService.isFrozenOrHasFrozenChildren(nodeRef)) + { + String msg = I18NUtil.getMessage(MSG_NODE_FROZEN, name); + log.debug(msg); + throw new AlfrescoRuntimeException(msg); } @@ -307,10 +331,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi 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 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 b28ff08326..9c6897139d 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; @@ -59,7 +58,6 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; -import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; 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..191f0309ef 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; @@ -75,6 +77,32 @@ public class FreezeServiceImpl extends ServiceBaseImpl /** 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 */ @@ -392,4 +420,24 @@ 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 f450bb9fb5..4b1081deae 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 @@ -30,15 +30,14 @@ package org.alfresco.module.org_alfresco_module_rm.job; import static org.alfresco.module.org_alfresco_module_rm.action.RMDispositionActionExecuterAbstractBase.PARAM_NO_ERROR_CHECK; import java.io.Serializable; -import java.util.HashMap; 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.module.org_alfresco_module_rm.record.RecordService; -import org.alfresco.module.org_alfresco_module_rm.recordfolder.RecordFolderService; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -48,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 @@ -58,14 +57,14 @@ import org.apache.commons.logging.LogFactory; * @author mrogers * @author Roy Wetherall */ +@Slf4j public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecuter { - /** logger */ - private static Log logger = LogFactory.getLog(DispositionLifecycleJobExecuter.class); /** 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 */ private List dispositionActions; @@ -88,11 +87,13 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute /** freeze service */ private FreezeService freezeService; - /** record service */ - private RecordService recordService; - - /** record folder service */ - private RecordFolderService recordFolderService; + /** + * @param freezeService freeze service + */ + public void setFreezeService(FreezeService freezeService) + { + this.freezeService = freezeService; + } /** * List of disposition actions to automatically execute when eligible. @@ -133,30 +134,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute this.searchService = searchService; } - /** - * @param freezeService freeze service - */ - public void setFreezeService(FreezeService freezeService) - { - this.freezeService = freezeService; - } - - /** - * @param recordService record service - */ - public void setRecordService(RecordService recordService) - { - this.recordService = recordService; - } - - /** - * @param recordFolderService record folder service - */ - public void setRecordFolderService(RecordFolderService recordFolderService) - { - this.recordFolderService = recordFolderService; - } - /** * Get the search query string. * @@ -207,11 +184,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute { try { - logger.debug("Job Starting"); + log.debug("Job Starting"); if (dispositionActions == null || dispositionActions.isEmpty()) { - logger.debug("Job Finished as disposition action is empty"); + log.debug("Job Finished as disposition action is empty"); return; } @@ -220,16 +197,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute if (batchSize < 1) { - if (logger.isDebugEnabled()) - { - logger.debug("Invalid value for batch size: " + batchSize + " default value used instead."); - } + 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); - } + + log.trace("Using batch size of " + batchSize); while (hasMore) { @@ -247,10 +219,7 @@ 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()) @@ -258,14 +227,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute executeAction(resultNodes); } } - logger.debug("Job Finished"); + log.debug("Job Finished"); } catch (AlfrescoRuntimeException exception) { - if (logger.isDebugEnabled()) - { - logger.debug(exception); - } + log.debug(exception.getMessage()); } } @@ -299,12 +265,9 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute } Map props = Map.of(PARAM_NO_ERROR_CHECK, false); - if (isFrozenOrHasFrozenChildren(parent.getParentRef())) + if (freezeService.isFrozenOrHasFrozenChildren(parent.getParentRef())) { - if (logger.isDebugEnabled()) { - logger.debug("unable to perform action " + dispAction + - " because node is frozen or has frozen children"); - } + log.debug(I18NUtil.getMessage(MSG_NODE_FROZEN, dispAction)); continue; } @@ -314,17 +277,13 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute recordsManagementActionService .executeRecordsManagementAction(parent.getParentRef(), dispAction, props); - if (logger.isDebugEnabled()) - { - logger.debug("Processed action: " + dispAction + "on" + parent); - } + log.debug("Processed action: " + dispAction + "on" + parent); + } catch (AlfrescoRuntimeException exception) { - if (logger.isDebugEnabled()) - { - logger.debug(exception); - } + log.debug(exception.getMessage()); + } } return Boolean.TRUE; @@ -332,25 +291,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute retryingTransactionHelper.doInTransaction(processTranCB, false, true); } - /** - * 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 - */ - private boolean isFrozenOrHasFrozenChildren(NodeRef nodeRef) - { - if (recordFolderService.isRecordFolder(nodeRef)) - { - return freezeService.isFrozen(nodeRef) || freezeService.hasFrozenChildren(nodeRef); - } - if (recordService.isRecord(nodeRef)) - { - return freezeService.isFrozen(nodeRef); - } - throw new AlfrescoRuntimeException("The nodeRef '" + nodeRef + "' is neither a record nor a record folder."); - } - public PersonService getPersonService() { return 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..94e81e8e64 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 @@ -53,7 +53,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase /** * Test freeze service methods. - * + * * @deprecated as of 2.2 */ public void testFreezeService() throws Exception @@ -219,7 +219,7 @@ public class FreezeServiceImplTest extends BaseRMTestCase // hold is not automatically removed holdAssocs = holdService.getHolds(filePlan); assertEquals(1, holdAssocs.size()); - + // delete hold holdService.deleteHold(holdNodeRef); @@ -265,8 +265,38 @@ public class FreezeServiceImplTest extends BaseRMTestCase assertFalse(freezeService.isFrozen(recordFour)); // assertFalse(freezeService.hasFrozenChildren(rmFolder)); - return null; - } - }); - } + return null; + } + }); + + doTestInTransaction(new Test() + { + @Override + public Void run() throws Exception + { + NodeRef hold101 = holdService.createHold(filePlan, "freezename 103", "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 104", "FreezeReason", null); + // Freeze a record inside a record folder + assertNotNull(hold101); + holdService.addToHold(hold101, recordThree); + assertTrue(recordService.isRecord(recordThree)); + 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 diff --git a/pom.xml b/pom.xml index 4aac78a06b..7f2ab284b9 100644 --- a/pom.xml +++ b/pom.xml @@ -851,6 +851,7 @@ org.projectlombok lombok 1.18.20 + provided