package fr.itldev.koya.action; import java.util.ArrayList; 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.ParameterDefinitionImpl; import org.alfresco.repo.action.executer.ActionExecuterAbstractBase; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.datatype.Duration; import org.apache.commons.collections.Factory; import org.apache.commons.collections.map.LazyMap; import org.apache.log4j.Logger; import fr.itldev.koya.alfservice.DossierService; import fr.itldev.koya.alfservice.KoyaMailService; import fr.itldev.koya.alfservice.KoyaNodeService; import fr.itldev.koya.alfservice.SpaceService; import fr.itldev.koya.alfservice.security.SpaceAclService; import fr.itldev.koya.exception.KoyaServiceException; import fr.itldev.koya.model.KoyaModel; import fr.itldev.koya.model.impl.Company; import fr.itldev.koya.model.impl.Dossier; import fr.itldev.koya.model.impl.Space; import fr.itldev.koya.model.impl.User; import fr.itldev.koya.model.permissions.KoyaPermissionCollaborator; public class InactiveDossierActionExecuter extends ActionExecuterAbstractBase { private Logger logger = Logger .getLogger(InactiveDossierActionExecuter.class); public static final String NAME = "inactive-dossier"; protected NodeService nodeService; protected KoyaNodeService koyaNodeService; protected KoyaMailService koyaMailService; protected SpaceService spaceService; protected DossierService dossierService; private SpaceAclService spaceAclService; private String inactiveFrom = "-P15D"; public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public void setKoyaNodeService(KoyaNodeService koyaNodeService) { this.koyaNodeService = koyaNodeService; } public void setKoyaMailService(KoyaMailService koyaMailService) { this.koyaMailService = koyaMailService; } public void setSpaceService(SpaceService spaceService) { this.spaceService = spaceService; } public void setDossierService(DossierService dossierService) { this.dossierService = dossierService; } public void setSpaceAclService( SpaceAclService spaceAclService) { this.spaceAclService = spaceAclService; } public void setInactiveFrom(String inactiveFrom) { this.inactiveFrom = inactiveFrom; } protected void executeImpl(Action action, NodeRef actionedUponNodeRef) { if (this.nodeService.exists(actionedUponNodeRef) == true) { try { logger.debug("Company " + nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_TITLE) + " / " + nodeService.getProperty(actionedUponNodeRef, ContentModel.PROP_NAME)); Company c = koyaNodeService.getKoyaNode(actionedUponNodeRef, Company.class); executeSpace(action, spaceService.list(c.getName(), Integer.MAX_VALUE),c); } catch (KoyaServiceException ex) { logger.error(ex.getMessage(), ex); } } } private void executeSpace(Action action, List<Space> spaces, Company c) throws KoyaServiceException { for (Space space : spaces) { if (space.getChildSpaces() != null && !space.getChildSpaces().isEmpty()) { executeSpace(action, space.getChildSpaces(),c); } // Calendar c = Calendar.getInstance(); // c.roll(Calendar.DAY_OF_YEAR, -15); @SuppressWarnings("unchecked") Map<User, List<NodeRef>> m = LazyMap.<User, List<NodeRef>> decorate( new HashMap<User, List<NodeRef>>(), new Factory() { @Override public List<NodeRef> create() { return new ArrayList<NodeRef>(); } }); Duration duration = new Duration(inactiveFrom); List<Dossier> inactiveDossiers = dossierService.getInactiveDossier( space, duration.add(new Date(), duration), true); for (Dossier d : inactiveDossiers) { logger.debug("Dossier " + d.getTitle() + "(Space "+space.getName()+") inactive since " + d.getLastModifiedDate()); List<User> responsibles = spaceAclService .listMembership(d, KoyaPermissionCollaborator.RESPONSIBLE); for (User u : responsibles) { m.get(u).add(d.getNodeRef()); } nodeService.setProperty(d.getNodeRef(), KoyaModel.PROP_NOTIFIED, Boolean.TRUE); } for (Map.Entry<User, List<NodeRef>> e : m.entrySet()) { koyaMailService.sendInactiveDossierNotification(e.getKey(), space.getNodeRef(), e.getValue(),c); } } } @Override protected void addParameterDefinitions(List<ParameterDefinition> paramList) { paramList.add(new ParameterDefinitionImpl("dummy-param", DataTypeDefinition.QNAME, true, getParamDisplayLabel("dummy-param"))); } }