package fr.itldev.koya.action;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.apache.log4j.Logger;
import fr.itldev.koya.model.KoyaModel;
public class UpdateLastModificationDateActionExecuter extends
ActionExecuterAbstractBase {
protected Logger logger = Logger.getLogger(UpdateLastModificationDateActionExecuter.class);
public static final String NAME = "updateLastModificationDate";
protected TransactionService transactionService;
protected NodeService nodeService;
public void setTransactionService(TransactionService transactionService) {
this.transactionService = transactionService;
}
public void setNodeService(NodeService nodeService) {
this.nodeService = nodeService;
}
@Override
protected void executeImpl(Action action, final NodeRef actionedUponNodeRef) {
AuthenticationUtil
.runAsSystem(new AuthenticationUtil.RunAsWork<Object>() {
@Override
public Object doWork() throws Exception {
transactionService
.getRetryingTransactionHelper()
.doInTransaction(
new RetryingTransactionHelper.RetryingTransactionCallback<Object>() {
@Override
public Object execute() {
// Add lastModified Aspect if
// not already present
if (!nodeService
.hasAspect(
actionedUponNodeRef,
KoyaModel.ASPECT_LASTMODIFIED)) {
Map<QName, Serializable> props = new HashMap<>();
nodeService
.addAspect(
actionedUponNodeRef,
KoyaModel.ASPECT_LASTMODIFIED,
props);
}
nodeService
.setProperty(
actionedUponNodeRef,
KoyaModel.PROP_LASTMODIFICATIONDATE,
new Date());
nodeService
.setProperty(
actionedUponNodeRef,
KoyaModel.PROP_NOTIFIED,
Boolean.FALSE);
logger.debug("Updated lastModificationDate of dossier : "
+ nodeService
.getProperty(
actionedUponNodeRef,
ContentModel.PROP_TITLE));
return null;
}
}, false, true);
return null;
}
});
}
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
}
}