Fix/rm 6941 retention action on frozen nodes (#640)

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 Changes for retention action on frozen nodes [ags]

* RM-6941 added slf4j and junit test [ags]

* RM-6941 added slf4j and junit test [ags]

* RM-6941 added slf4j and junit test [ags]

* RM-6941 added slf4j and junit test [ags]

* RM-6941 added slf4j and test [ags]

* RM-6941 added slf4j and test [ags]

* RM-6941 added slf4j and test [ags]

* RM-6941 added slf4j and test [ags]

* RM-6941 added slf4j and test [ags]

* RM-6941 code change for test case [ags]

* RM-6941 code change for test case [ags]

* RM-6941 code change for test case [ags]

* RM-6941 change lombok dependency scope to compile [ags]

* Revert "RM-6941 change lombok dependency scope to compile [ags]"

This reverts commit 4cee68e8

* RM-6941 change lombok dependency scope to compile [ags]

* RM-6941 revert change lombok dependency scope to compile [ags]

* RM-6941 revert change lombok dependency scope to compile [ags]
This commit is contained in:
brijmohan1
2021-08-15 14:30:08 +05:30
committed by GitHub
parent 456e442438
commit 8b6dfa47b8
13 changed files with 185 additions and 121 deletions

View File

@@ -67,7 +67,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR;
/** /**
* API tests to check actions on frozen content * API tests to check actions on frozen content
* *
@@ -309,11 +309,11 @@ public class PreventActionsOnFrozenContentTests extends BaseRMRestTest
STEP("Execute the retain action"); STEP("Execute the retain action");
rmRolesAndActionsAPI.executeAction(getAdminUser().getUsername(), getAdminUser().getPassword(), record.getName(), 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"); STEP("Check the record search disposition properties");
Record recordUpdated = getRestAPIFactory().getRecordsAPI().getRecord(record.getId()); 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")); assertTrue(recordUpdated.getProperties().getRecordSearchDispositionPeriod().contains("immediately"));
} }

View File

@@ -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.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.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.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.

View File

@@ -80,9 +80,7 @@
<property name="searchService" ref="searchService" /> <property name="searchService" ref="searchService" />
<property name="personService" ref="personService" /> <property name="personService" ref="personService" />
<property name="recordsManagementActionService" ref="recordsManagementActionService" /> <property name="recordsManagementActionService" ref="recordsManagementActionService" />
<property name="recordFolderService" ref="RecordFolderService" /> <property name="freezeService" ref="freezeService"/>
<property name="recordService" ref="RecordService" />
<property name="freezeService" ref="FreezeService" />
<property name="batchSize" value="${rm.dispositionlifecycletrigger.batchsize}"/> <property name="batchSize" value="${rm.dispositionlifecycletrigger.batchsize}"/>
</bean> </bean>

View File

@@ -695,6 +695,13 @@
init-method="init" depends-on="org_alfresco_module_rm_resourceBundles"> init-method="init" depends-on="org_alfresco_module_rm_resourceBundles">
<property name="policyComponent" ref="policyComponent"/> <property name="policyComponent" ref="policyComponent"/>
<property name="nodeService" ref="nodeService"/> <property name="nodeService" ref="nodeService"/>
<!-- list of disposition actions to automatically execute when eligible -->
<property name="retentionActions">
<list>
<value>retain</value>
</list>
</property>
<property name="freezeService" ref="freezeService"/>
</bean> </bean>
<bean id="RecordsManagementActionService" class="org.springframework.aop.framework.ProxyFactoryBean"> <bean id="RecordsManagementActionService" class="org.springframework.aop.framework.ProxyFactoryBean">
@@ -899,6 +906,8 @@
<bean id="freezeService" class="org.alfresco.module.org_alfresco_module_rm.freeze.FreezeServiceImpl" parent="baseService"> <bean id="freezeService" class="org.alfresco.module.org_alfresco_module_rm.freeze.FreezeServiceImpl" parent="baseService">
<property name="filePlanService" ref="FilePlanService" /> <property name="filePlanService" ref="FilePlanService" />
<property name="holdService" ref="HoldService" /> <property name="holdService" ref="HoldService" />
<property name="recordFolderService" ref="RecordFolderService"/>
<property name="recordService" ref="RecordService"/>
</bean> </bean>
<bean id="FreezeService" class="org.springframework.aop.framework.ProxyFactoryBean"> <bean id="FreezeService" class="org.springframework.aop.framework.ProxyFactoryBean">
@@ -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.hasFrozenChildren=RM_ALLOW
org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.getFreezeDate=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.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 org.alfresco.module.org_alfresco_module_rm.freeze.FreezeService.*=RM_DENY
]]> ]]>
</value> </value>

View File

@@ -141,6 +141,11 @@
<artifactId>spring-test</artifactId> <artifactId>spring-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -35,17 +35,17 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementPolicies.BeforeRMActionExecution; 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.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.util.PoliciesUtil;
import org.alfresco.repo.policy.ClassPolicyDelegate; import org.alfresco.repo.policy.ClassPolicyDelegate;
import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName; 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.extensions.surf.util.I18NUtil;
/** /**
@@ -53,14 +53,13 @@ import org.springframework.extensions.surf.util.I18NUtil;
* *
* @author Roy Wetherall * @author Roy Wetherall
*/ */
@Slf4j
public class RecordsManagementActionServiceImpl implements RecordsManagementActionService public class RecordsManagementActionServiceImpl implements RecordsManagementActionService
{ {
/** I18N */ /** I18N */
private static final String MSG_NOT_DEFINED = "rm.action.not-defined"; 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_NO_IMPLICIT_NODEREF = "rm.action.no-implicit-noderef";
private static final String MSG_NODE_FROZEN = "rm.action.node.frozen.error-message";
/** Logger */
private static Log logger = LogFactory.getLog(RecordsManagementActionServiceImpl.class);
/** Registered records management actions */ /** Registered records management actions */
private Map<String, RecordsManagementAction> rmActions = new HashMap<>(13); private Map<String, RecordsManagementAction> rmActions = new HashMap<>(13);
@@ -78,6 +77,16 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi
private ClassPolicyDelegate<BeforeRMActionExecution> beforeRMActionExecutionDelegate; private ClassPolicyDelegate<BeforeRMActionExecution> beforeRMActionExecutionDelegate;
private ClassPolicyDelegate<OnRMActionExecution> onRMActionExecutionDelegate; private ClassPolicyDelegate<OnRMActionExecution> onRMActionExecutionDelegate;
/**
* Freeze Service
*/
private FreezeService freezeService;
/**
* list of retention actions to automatically execute
*/
private List<String> retentionActions;
/** /**
* @return Policy component * @return Policy component
*/ */
@@ -94,6 +103,19 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi
return this.nodeService; return this.nodeService;
} }
/**
* @param freezeService freeze service
*/
public void setFreezeService(FreezeService freezeService)
{
this.freezeService = freezeService;
}
public void setRetentionActions(List<String> retentionActions)
{
this.retentionActions = retentionActions;
}
/** /**
* Set the policy component * Set the policy component
* *
@@ -267,21 +289,23 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi
*/ */
public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name, Map<String, Serializable> parameters) public RecordsManagementActionResult executeRecordsManagementAction(NodeRef nodeRef, String name, Map<String, Serializable> parameters)
{ {
if (logger.isDebugEnabled()) log.debug("Executing record management action on " + nodeRef);
{ log.debug(" actionName = " + name);
logger.debug("Executing record management action on " + nodeRef); log.debug(" parameters = " + parameters);
logger.debug(" actionName = " + name);
logger.debug(" parameters = " + parameters);
}
RecordsManagementAction rmAction = this.rmActions.get(name); RecordsManagementAction rmAction = this.rmActions.get(name);
if (rmAction == null) if (rmAction == null)
{ {
String msg = I18NUtil.getMessage(MSG_NOT_DEFINED, name); String msg = I18NUtil.getMessage(MSG_NOT_DEFINED, name);
if (logger.isWarnEnabled()) log.warn(msg);
{ throw new AlfrescoRuntimeException(msg);
logger.warn(msg);
} }
if (retentionActions.contains(name.toLowerCase()) && freezeService.isFrozenOrHasFrozenChildren(nodeRef))
{
String msg = I18NUtil.getMessage(MSG_NODE_FROZEN, name);
log.debug(msg);
throw new AlfrescoRuntimeException(msg); throw new AlfrescoRuntimeException(msg);
} }
@@ -307,10 +331,7 @@ public class RecordsManagementActionServiceImpl implements RecordsManagementActi
if (implicitTargetNode == null) if (implicitTargetNode == null)
{ {
String msg = I18NUtil.getMessage(MSG_NO_IMPLICIT_NODEREF, name); String msg = I18NUtil.getMessage(MSG_NO_IMPLICIT_NODEREF, name);
if (logger.isWarnEnabled()) log.warn(msg);
{
logger.warn(msg);
}
throw new AlfrescoRuntimeException(msg); throw new AlfrescoRuntimeException(msg);
} }
else else

View File

@@ -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.event.RecordsManagementEvent;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanComponentKind; 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.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.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; 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.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.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;

View File

@@ -150,4 +150,12 @@ public interface FreezeService
*/ */
@Deprecated @Deprecated
Set<NodeRef> getHolds(NodeRef filePlan); Set<NodeRef> 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);
} }

View File

@@ -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.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.hold.HoldService; 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.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.module.org_alfresco_module_rm.util.ServiceBaseImpl;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
@@ -75,6 +77,32 @@ public class FreezeServiceImpl extends ServiceBaseImpl
/** Hold service */ /** Hold service */
private HoldService holdService; 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 * @return File plan service
*/ */
@@ -392,4 +420,24 @@ public class FreezeServiceImpl extends ServiceBaseImpl
// create hold // create hold
return getHoldService().createHold(filePlan, holdName, reason, null); 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 <code>true</code> if the node is frozen or has frozen children, <code>false</code> 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;
}
} }

View File

@@ -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 static org.alfresco.module.org_alfresco_module_rm.action.RMDispositionActionExecuterAbstractBase.PARAM_NO_ERROR_CHECK;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.extern.slf4j.Slf4j;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; 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.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.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; 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.SearchParameters;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.security.PersonService;
import org.apache.commons.logging.Log; import org.springframework.extensions.surf.util.I18NUtil;
import org.apache.commons.logging.LogFactory;
/** /**
* The Disposition Lifecycle Job Finds all disposition action nodes which are for disposition actions specified Where * 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 mrogers
* @author Roy Wetherall * @author Roy Wetherall
*/ */
@Slf4j
public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecuter public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecuter
{ {
/** logger */
private static Log logger = LogFactory.getLog(DispositionLifecycleJobExecuter.class);
/** batching properties */ /** batching properties */
private int batchSize; private int batchSize;
public static final int DEFAULT_BATCH_SIZE = 500; 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<String> dispositionActions; private List<String> dispositionActions;
@@ -88,11 +87,13 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
/** freeze service */ /** freeze service */
private FreezeService freezeService; private FreezeService freezeService;
/** record service */ /**
private RecordService recordService; * @param freezeService freeze service
*/
/** record folder service */ public void setFreezeService(FreezeService freezeService)
private RecordFolderService recordFolderService; {
this.freezeService = freezeService;
}
/** /**
* List of disposition actions to automatically execute when eligible. * List of disposition actions to automatically execute when eligible.
@@ -133,30 +134,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
this.searchService = searchService; 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. * Get the search query string.
* *
@@ -207,11 +184,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
{ {
try try
{ {
logger.debug("Job Starting"); log.debug("Job Starting");
if (dispositionActions == null || dispositionActions.isEmpty()) if (dispositionActions == null || dispositionActions.isEmpty())
{ {
logger.debug("Job Finished as disposition action is empty"); log.debug("Job Finished as disposition action is empty");
return; return;
} }
@@ -220,16 +197,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
if (batchSize < 1) if (batchSize < 1)
{ {
if (logger.isDebugEnabled()) log.debug("Invalid value for batch size: " + batchSize + " default value used instead.");
{
logger.debug("Invalid value for batch size: " + batchSize + " default value used instead.");
}
batchSize = DEFAULT_BATCH_SIZE; batchSize = DEFAULT_BATCH_SIZE;
} }
if (logger.isTraceEnabled())
{ log.trace("Using batch size of " + batchSize);
logger.trace("Using batch size of " + batchSize);
}
while (hasMore) while (hasMore)
{ {
@@ -247,10 +219,7 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
skipCount += resultNodes.size(); // increase by page size skipCount += resultNodes.size(); // increase by page size
results.close(); results.close();
if (logger.isDebugEnabled()) log.debug("Processing " + resultNodes.size() + " nodes");
{
logger.debug("Processing " + resultNodes.size() + " nodes");
}
// process search results // process search results
if (!resultNodes.isEmpty()) if (!resultNodes.isEmpty())
@@ -258,14 +227,11 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
executeAction(resultNodes); executeAction(resultNodes);
} }
} }
logger.debug("Job Finished"); log.debug("Job Finished");
} }
catch (AlfrescoRuntimeException exception) catch (AlfrescoRuntimeException exception)
{ {
if (logger.isDebugEnabled()) log.debug(exception.getMessage());
{
logger.debug(exception);
}
} }
} }
@@ -299,12 +265,9 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
} }
Map<String, Serializable> props = Map.of(PARAM_NO_ERROR_CHECK, false); Map<String, Serializable> props = Map.of(PARAM_NO_ERROR_CHECK, false);
if (isFrozenOrHasFrozenChildren(parent.getParentRef())) if (freezeService.isFrozenOrHasFrozenChildren(parent.getParentRef()))
{ {
if (logger.isDebugEnabled()) { log.debug(I18NUtil.getMessage(MSG_NODE_FROZEN, dispAction));
logger.debug("unable to perform action " + dispAction +
" because node is frozen or has frozen children");
}
continue; continue;
} }
@@ -314,17 +277,13 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
recordsManagementActionService recordsManagementActionService
.executeRecordsManagementAction(parent.getParentRef(), dispAction, props); .executeRecordsManagementAction(parent.getParentRef(), dispAction, props);
if (logger.isDebugEnabled()) log.debug("Processed action: " + dispAction + "on" + parent);
{
logger.debug("Processed action: " + dispAction + "on" + parent);
}
} }
catch (AlfrescoRuntimeException exception) catch (AlfrescoRuntimeException exception)
{ {
if (logger.isDebugEnabled()) log.debug(exception.getMessage());
{
logger.debug(exception);
}
} }
} }
return Boolean.TRUE; return Boolean.TRUE;
@@ -332,25 +291,6 @@ public class DispositionLifecycleJobExecuter extends RecordsManagementJobExecute
retryingTransactionHelper.doInTransaction(processTranCB, false, true); 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 <code>true</code> if the node is frozen or has frozen children, <code>false</code> 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() public PersonService getPersonService()
{ {
return personService; return personService;

View File

@@ -268,5 +268,35 @@ public class FreezeServiceImplTest extends BaseRMTestCase
return null; return null;
} }
}); });
doTestInTransaction(new Test<Void>()
{
@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<Void>()
{
@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;
}
});
} }
} }

5
amps/module-info.java Normal file
View File

@@ -0,0 +1,5 @@
module simple.lombok {
requires static lombok;
requires java.logging;
}

View File

@@ -851,6 +851,7 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.20</version> <version>1.18.20</version>
<scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>