/** * */ package net.conselldemallorca.helium.core.helper; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import net.conselldemallorca.helium.core.common.JbpmVars; import net.conselldemallorca.helium.core.helper.TascaSegonPlaHelper.InfoSegonPla; import net.conselldemallorca.helium.core.model.hibernate.Camp; import net.conselldemallorca.helium.core.model.hibernate.Camp.TipusCamp; import net.conselldemallorca.helium.core.model.hibernate.CampTasca; import net.conselldemallorca.helium.core.model.hibernate.DefinicioProces; import net.conselldemallorca.helium.core.model.hibernate.DocumentTasca; import net.conselldemallorca.helium.core.model.hibernate.Expedient; import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus; import net.conselldemallorca.helium.core.model.hibernate.FirmaTasca; import net.conselldemallorca.helium.core.model.hibernate.Tasca; import net.conselldemallorca.helium.core.security.ExtendedPermission; import net.conselldemallorca.helium.jbpm3.integracio.DelegationInfo; import net.conselldemallorca.helium.jbpm3.integracio.DominiCodiDescripcio; import net.conselldemallorca.helium.jbpm3.integracio.JbpmHelper; import net.conselldemallorca.helium.jbpm3.integracio.JbpmProcessInstance; import net.conselldemallorca.helium.jbpm3.integracio.JbpmTask; import net.conselldemallorca.helium.jbpm3.integracio.ResultatConsultaPaginadaJbpm; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDadaDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTascaDto; import net.conselldemallorca.helium.v3.core.api.dto.PaginacioParamsDto; import net.conselldemallorca.helium.v3.core.api.dto.PaginacioParamsDto.OrdreDireccioDto; import net.conselldemallorca.helium.v3.core.api.dto.PersonaDto; import net.conselldemallorca.helium.v3.core.api.dto.TascaDadaDto; import net.conselldemallorca.helium.v3.core.api.exception.NoTrobatException; import net.conselldemallorca.helium.v3.core.repository.CampTascaRepository; import net.conselldemallorca.helium.v3.core.repository.DefinicioProcesRepository; import net.conselldemallorca.helium.v3.core.repository.TascaRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.acls.model.Permission; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import edu.emory.mathcs.backport.java.util.Collections; /** * Helper per a gestionar les tasques dels expedients. * * @author Limit Tecnologies <limit@limit.es> */ @Component public class TascaHelper { @Resource private TascaRepository tascaRepository; @Resource private DefinicioProcesRepository definicioProcesRepository; @Resource private VariableHelper variableHelper; @Resource private ExpedientHelper expedientHelper; @Resource private CampTascaRepository campTascaRepository; @Resource private JbpmHelper jbpmHelper; @Resource private ConversioTipusHelper conversioTipusHelper; @Resource(name = "permisosHelperV3") private PermisosHelper permisosHelper; @Resource private PluginHelper pluginHelper; @Resource private TascaSegonPlaHelper tascaSegonPlaHelper; public JbpmTask getTascaComprovacionsTramitacio( String id, boolean comprovarAssignacio, boolean comprovarPendent) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); JbpmTask task = jbpmHelper.getTaskById(id); if (task == null) { logger.debug("No s'ha trobat la tasca (" + "id=" + id + ")"); throw new NoTrobatException(JbpmTask.class, id); } if (comprovarAssignacio) { if (task.getAssignee() == null || !task.getAssignee().equals(auth.getName())) { logger.debug("La persona no té la tasca assignada (" + "id=" + id + ", " + "personaCodi=" + auth.getName() + ")"); throw new NoTrobatException(JbpmTask.class, id); } } if (comprovarPendent) { if (!task.isOpen() || task.isCancelled() || task.isSuspended()) { logger.debug("La tasca no està en estat pendent (" + "id=" + id + ")"); throw new NoTrobatException(JbpmTask.class, id); } } return task; } public DadesCacheTasca getDadesCacheTasca( JbpmTask task, Expedient expedient) { DadesCacheTasca dadesCache = null; if (!task.isCacheActiu()) { setTascaCache(task, expedient); } try { dadesCache = getDadesCacheTasca(task); } catch (Exception e) { task.setCacheInactiu(); setTascaCache(task, expedient); dadesCache = getDadesCacheTasca(task); } return dadesCache; } private void setTascaCache( JbpmTask task, Expedient expedient) { if (expedient == null) expedient = expedientHelper.findExpedientByProcessInstanceId(task.getProcessInstanceId()); DefinicioProces definicioProces = definicioProcesRepository.findByJbpmId( task.getProcessDefinitionId()); Tasca tasca = tascaRepository.findByJbpmNameAndDefinicioProces( task.getTaskName(), definicioProces); if (tasca == null) { throw new NoTrobatException( Tasca.class, "(taskName=" + task.getTaskName() + ", " + "definicioProcesId=" + definicioProces.getId() + ", " + "definicioProcesJbpmKey=" + definicioProces.getJbpmKey() + ", " + "definicioProcesVersio=" + definicioProces.getVersio() + ")"); } String titol = tasca.getNom(); if (tasca.getNomScript() != null && tasca.getNomScript().length() > 0) titol = getTitolPerTasca(task, tasca); task.setFieldFromDescription( "entornId", expedient.getEntorn().getId().toString()); task.setFieldFromDescription( "titol", titol); task.setFieldFromDescription( "identificador", expedient.getIdentificador()); task.setFieldFromDescription( "identificadorOrdenacio", expedient.getIdentificadorOrdenacio()); task.setFieldFromDescription( "numeroIdentificador", expedient.getNumeroIdentificador()); task.setFieldFromDescription( "expedientTipusId", expedient.getTipus().getId().toString()); task.setFieldFromDescription( "expedientTipusNom", expedient.getTipus().getNom()); task.setFieldFromDescription( "processInstanceId", expedient.getProcessInstanceId()); task.setFieldFromDescription( "tramitacioMassiva", new Boolean(tasca.isTramitacioMassiva()).toString()); task.setFieldFromDescription( "definicioProcesJbpmKey", tasca.getDefinicioProces().getJbpmKey()); task.setCacheActiu(); jbpmHelper.describeTaskInstance( task.getId(), titol, task.getDescriptionWithFields()); } private DadesCacheTasca getDadesCacheTasca(JbpmTask task) { return new DadesCacheTasca( new Long(task.getFieldFromDescription("entornId")), task.getFieldFromDescription("titol"), task.getFieldFromDescription("identificador"), task.getFieldFromDescription("identificadorOrdenacio"), task.getFieldFromDescription("numeroIdentificador"), new Long(task.getFieldFromDescription("expedientTipusId")), task.getFieldFromDescription("expedientTipusNom"), task.getFieldFromDescription("processInstanceId"), new Boolean(task.getFieldFromDescription("tramitacioMassiva")).booleanValue(), task.getFieldFromDescription("definicioProcesJbpmKey")); } public class DadesCacheTasca { private Long entornId; private String titol; private String identificador; private String identificadorOrdenacio; private String numeroIdentificador; private Long expedientTipusId; private String expedientTipusNom; private String processInstanceId; private boolean tramitacioMassiva; private String definicioProcesJbpmKey; public DadesCacheTasca( Long entornId, String titol, String identificador, String identificadorOrdenacio, String numeroIdentificador, Long expedientTipusId, String expedientTipusNom, String processInstanceId, boolean tramitacioMassiva, String definicioProcesJbpmKey) { this.entornId = entornId; this.titol = titol; this.identificador = identificador; this.identificadorOrdenacio = identificadorOrdenacio; this.numeroIdentificador = numeroIdentificador; this.expedientTipusId = expedientTipusId; this.expedientTipusNom = expedientTipusNom; this.processInstanceId = processInstanceId; this.tramitacioMassiva = tramitacioMassiva; this.definicioProcesJbpmKey = definicioProcesJbpmKey; } public Long getEntornId() { return entornId; } public String getTitol() { return titol; } public String getIdentificador() { return identificador; } public String getIdentificadorOrdenacio() { return identificadorOrdenacio; } public String getNumeroIdentificador() { return numeroIdentificador; } public Long getExpedientTipusId() { return expedientTipusId; } public String getExpedientTipusNom() { return expedientTipusNom; } public String getProcessInstanceId() { return processInstanceId; } public boolean isTramitacioMassiva() { return tramitacioMassiva; } public String getDefinicioProcesJbpmKey() { return definicioProcesJbpmKey; } } public JbpmTask getTascaComprovacionsExpedient( String id, Expedient expedient) { JbpmTask task = jbpmHelper.getTaskById(id); if (task == null) { logger.debug("No s'ha trobat la tasca (" + "id=" + id + ")"); throw new NoTrobatException(JbpmTask.class, id); } JbpmProcessInstance rootProcessInstance = jbpmHelper.getRootProcessInstance( task.getProcessInstanceId()); if (!expedient.getProcessInstanceId().equals(rootProcessInstance.getId())) { logger.debug("La tasca no pertany a l'expedient (" + "id=" + id + ", " + "expedientId=" + expedient.getId() + ")"); throw new NoTrobatException(JbpmTask.class, id); } return task; } public List<ExpedientTascaDto> findTasquesPerExpedient( Expedient expedient, boolean perTramitacio, boolean ambPermisos) { List<ExpedientTascaDto> resposta = new ArrayList<ExpedientTascaDto>(); // Si l'usuari te permis de supervisio mostra totes les tasques de // l'expedient de qualsevol usuari Authentication auth = SecurityContextHolder.getContext().getAuthentication(); boolean isPermisSupervision = permisosHelper.isGrantedAny( expedient.getTipus().getId(), ExpedientTipus.class, new Permission[] { ExtendedPermission.SUPERVISION, ExtendedPermission.ADMINISTRATION}, auth); PaginacioParamsDto paginacioParams = new PaginacioParamsDto(); paginacioParams.setPaginaNum(0); paginacioParams.setPaginaTamany(-1); paginacioParams.afegirOrdre("dataCreacio", OrdreDireccioDto.DESCENDENT); ResultatConsultaPaginadaJbpm<JbpmTask> tasks = jbpmHelper.tascaFindByFiltrePaginat( expedient.getEntorn().getId(), (isPermisSupervision) ? null : auth.getName(), null, null, expedient.getId(), null, null, null, null, null, null, null, null, true, true, false, paginacioParams); for (JbpmTask task: tasks.getLlista()) { resposta.add( toExpedientTascaDto( task, expedient, perTramitacio, ambPermisos)); } return resposta; } private List<String> getCampsExpressioTitol(String expressio) { List<String> resposta = new ArrayList<String>(); String[] parts = expressio.split("\\$\\{"); for (String part: parts) { int index = part.indexOf("}"); if (index != -1) resposta.add(part.substring(0, index)); } return resposta; } public ExpedientTascaDto toTascaInicialDto( String startTaskName, String jbpmId, Map<String, Object> valors) { Tasca tasca = tascaRepository.findByJbpmNameAndDefinicioProcesJbpmId( startTaskName, jbpmId); ExpedientTascaDto dto = new ExpedientTascaDto(); dto.setTitol(tasca.getNom()); dto.setTascaTipus( conversioTipusHelper.convertir( tasca.getTipus(), ExpedientTascaDto.TascaTipusDto.class)); dto.setJbpmName(tasca.getJbpmName()); dto.setValidada(false); dto.setDocumentsComplet(false); dto.setTascaId(tasca.getId()); dto.setSignaturesComplet(false); /*dto.setDefinicioProces( conversioTipusHelper.convertir( tasca.getDefinicioProces(), DefinicioProcesDto.class));*/ dto.setOutcomes(jbpmHelper.findStartTaskOutcomes(jbpmId, startTaskName)); dto.setTascaFormExternCodi(tasca.getFormExtern()); return dto; } public String getTitolPerTasca( JbpmTask task, Tasca tasca) { String titol = null; if (tasca != null) { Map<String, Object> textPerCamps = new HashMap<String, Object>(); titol = tasca.getNom(); if (tasca.getNomScript() != null && tasca.getNomScript().length() > 0) { List<String> campsExpressio = getCampsExpressioTitol(tasca.getNomScript()); Map<String, Object> valors = jbpmHelper.getTaskInstanceVariables(task.getId()); valors.putAll(jbpmHelper.getProcessInstanceVariables(task.getProcessInstanceId())); for (String campCodi: campsExpressio) { Set<Camp> campsDefinicioProces = tasca.getDefinicioProces().getCamps(); for (Camp camp: campsDefinicioProces) { if (camp.getCodi().equals(campCodi)) { TascaDadaDto tascaDada = variableHelper.findDadaPerInstanciaTasca( task, campCodi); if (tascaDada != null && tascaDada.getText() != null) { textPerCamps.put( campCodi, tascaDada.getText()); } else if (tascaDada == null) { ExpedientDadaDto valor = variableHelper.getDadaPerInstanciaProces(task.getProcessInstanceId(), campCodi); textPerCamps.put(campCodi,(valor == null) ? null : valor.getText()); } break; } } } try { titol = (String)jbpmHelper.evaluateExpression( task.getId(), task.getProcessInstanceId(), tasca.getNomScript(), textPerCamps); } catch (Exception ex) { logger.error("No s'ha pogut evaluar l'script per canviar el titol de la tasca", ex); } } } else { titol = task.getTaskName(); } return titol; } public void createDadesTasca(Long taskId) { JbpmTask task = jbpmHelper.getTaskById(String.valueOf(taskId)); setTascaCache(task, null); } public Tasca findTascaByJbpmTaskId( String jbpmTaskId) { return findTascaByJbpmTask(jbpmHelper.getTaskById(jbpmTaskId)); } public Tasca findTascaByJbpmTask( JbpmTask task) { return tascaRepository.findByJbpmNameAndDefinicioProcesJbpmId( task.getTaskName(), task.getProcessDefinitionId()); } public List<ExpedientTascaDto> findTasquesPerExpedientPerInstanciaProces( String processInstanceId, Expedient expedient, boolean permisosVerOtrosUsuarios, boolean nomesTasquesPersonals, boolean nomesTasquesGrup) { List<ExpedientTascaDto> resposta = new ArrayList<ExpedientTascaDto>(); List<JbpmTask> tasks = jbpmHelper.findTaskInstancesForProcessInstance(processInstanceId); for (JbpmTask task: tasks) { if (!task.isCompleted()) { ExpedientTascaDto tasca = toExpedientTascaDto( task, expedient, true, false); if (permisosVerOtrosUsuarios || tasca.isAssignadaUsuariActual()) { boolean esTareaGrupo = !tasca.isAgafada() && tasca.getResponsables() != null && !tasca.getResponsables().isEmpty(); if (nomesTasquesGrup && esTareaGrupo) { resposta.add(tasca); } else if (nomesTasquesPersonals && !esTareaGrupo) { resposta.add(tasca); } else if (!nomesTasquesPersonals && !nomesTasquesGrup) { resposta.add(tasca); } } } } return resposta; } public List<ExpedientTascaDto> findTasquesPerExpedientPerInstanciaProces( Expedient expedient, String processInstanceId, boolean completed, boolean mostrarDeOtrosUsuarios) { List<ExpedientTascaDto> resposta = new ArrayList<ExpedientTascaDto>(); List<JbpmTask> tasks = jbpmHelper.findTaskInstancesForProcessInstance(processInstanceId); for (JbpmTask task: tasks) { ExpedientTascaDto tasca = toExpedientTascaDto( task, expedient, true, false); if ((tasca.isCompleted() == completed) && (mostrarDeOtrosUsuarios || tasca.isAssignadaUsuariActual())) { resposta.add(tasca); } } final boolean compl = completed; Collections.sort( resposta, new Comparator<ExpedientTascaDto>() { public int compare(ExpedientTascaDto t1, ExpedientTascaDto t2) { int order = t1.getCreateTime().compareTo(t2.getCreateTime()); return compl ? order : order*-1; } } ); return resposta; } public ExpedientTascaDto toExpedientTascaDto( JbpmTask task, Expedient expedient, boolean perTramitacio, boolean ambPermisos) { ExpedientTascaDto dto = new ExpedientTascaDto(); dto.setId(task.getId()); DadesCacheTasca dadesCacheTasca = getDadesCacheTasca( task, expedient); dto.setTitol(dadesCacheTasca.getTitol()); dto.setJbpmName(task.getTaskName()); dto.setDescription(task.getDescription()); dto.setAssignee(task.getAssignee()); dto.setPooledActors(task.getPooledActors()); dto.setCreateTime(task.getCreateTime()); dto.setStartTime(task.getStartTime()); dto.setEndTime(task.getEndTime()); dto.setDueDate(task.getDueDate()); dto.setPriority(task.getPriority()); dto.setOpen(task.isOpen()); dto.setCompleted(task.isCompleted()); dto.setCancelled(task.isCancelled()); dto.setSuspended(task.isSuspended()); dto.setTascaTramitacioMassiva(dadesCacheTasca.isTramitacioMassiva()); Tasca tasca = findTascaByJbpmTask(task); if (tasca != null) { dto.setTascaFinalitzacioSegonPla(tasca.isFinalitzacioSegonPla()); if (tasca.isFinalitzacioSegonPla() && tascaSegonPlaHelper.isTasquesSegonPlaLoaded() && tascaSegonPlaHelper.getTasquesSegonPla().containsKey(task.getTask().getId())) { InfoSegonPla infoSegonPla = tascaSegonPlaHelper.getTasquesSegonPla().get(task.getTask().getId()); dto.setMarcadaFinalitzar(infoSegonPla.getMarcadaFinalitzar()); dto.setIniciFinalitzacio(infoSegonPla.getIniciFinalitzacio()); dto.setErrorFinalitzacio(infoSegonPla.getError()); } } Expedient expedientNoNull = expedient; if (expedientNoNull == null) { expedientNoNull = expedientHelper.findExpedientByProcessInstanceId( task.getProcessInstanceId()); } if (perTramitacio) { // Opcional outcomes? dto.setOutcomes(jbpmHelper.findTaskInstanceOutcomes(task.getId())); // Opcional dades tasca? dto.setTascaId(tasca.getId()); dto.setTascaNom(tasca.getNom()); dto.setTascaTipus( conversioTipusHelper.convertir( tasca.getTipus(), ExpedientTascaDto.TascaTipusDto.class)); dto.setTascaMissatgeInfo(tasca.getMissatgeInfo()); dto.setTascaMissatgeWarn(tasca.getMissatgeWarn()); dto.setTascaRecursForm(tasca.getRecursForm()); dto.setTascaFormExternCodi(tasca.getFormExtern()); dto.setTascaDelegable(tasca.getExpressioDelegacio() != null); // Opcional estat tramitació tasca? dto.setValidada(isTascaValidada(task)); dto.setDocumentsComplet(isDocumentsComplet(task)); dto.setSignaturesComplet(isSignaturesComplet(task)); // Opcional informació delegacio? DelegationInfo delegationInfo = getDelegationInfo(task); if (delegationInfo != null) { boolean original = task.getId().equals(delegationInfo.getSourceTaskId()); dto.setDelegada(true); dto.setDelegacioOriginal(original); dto.setDelegacioData(delegationInfo.getStart()); dto.setDelegacioComentari(delegationInfo.getComment()); dto.setDelegacioSupervisada(delegationInfo.isSupervised()); JbpmTask tascaDelegacio = null; if (original) { tascaDelegacio = jbpmHelper.getTaskById(delegationInfo.getTargetTaskId()); } else { tascaDelegacio = jbpmHelper.getTaskById(delegationInfo.getSourceTaskId()); } dto.setDelegacioPersona( pluginHelper.personaFindAmbCodi(tascaDelegacio.getAssignee())); } DefinicioProces definicioProces = definicioProcesRepository.findByJbpmId(task.getProcessDefinitionId()); if (definicioProces != null) { dto.setDefinicioProcesId(definicioProces.getId()); } } dto.setAgafada(task.isAgafada()); dto.setProcessInstanceId(task.getProcessInstanceId()); dto.setExpedientId(expedientNoNull.getId()); dto.setExpedientIdentificador(expedientNoNull.getIdentificador()); dto.setExpedientTipusNom(expedientNoNull.getTipus().getNom()); if (task.getAssignee() != null) { dto.setResponsable( pluginHelper.personaFindAmbCodi(task.getAssignee())); } Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (task.getAssignee() != null) { if (auth != null) { dto.setAssignadaUsuariActual(task.getAssignee().equals(auth.getName())); } } else if (task.getPooledActors() != null && !task.getPooledActors().isEmpty()) { List<PersonaDto> responsables = new ArrayList<PersonaDto>(); for (String pooledActor: task.getPooledActors()) { PersonaDto persona = pluginHelper.personaFindAmbCodi(pooledActor); if (persona != null) { if (auth.getName().equals(pooledActor)) dto.setAssignadaUsuariActual(true); responsables.add(persona); } } dto.setResponsables(responsables); } if (ambPermisos) { permisosHelper.omplirControlPermisosSegonsUsuariActual( expedientNoNull.getTipus().getId(), dto, ExpedientTipus.class); } return dto; } public void validarTasca(String taskId) { jbpmHelper.setTaskInstanceVariable( taskId, JbpmVars.VAR_TASCA_VALIDADA, new Date()); } public void restaurarTasca(String taskId) { jbpmHelper.deleteTaskInstanceVariable( taskId, JbpmVars.VAR_TASCA_VALIDADA); } public boolean isTascaValidada(Object task) { Tasca tasca = findTascaByJbpmTask((JbpmTask)task); boolean hiHaCampsModificables = false; if (tasca == null) return false; for (CampTasca camp: tasca.getCamps()) { if (!camp.isReadOnly()) { hiHaCampsModificables = true; break; } } if (!hiHaCampsModificables) return true; Object valor = jbpmHelper.getTaskInstanceVariable( ((JbpmTask)task).getId(), JbpmVars.VAR_TASCA_VALIDADA); if (valor == null || !(valor instanceof Date)) return false; return true; } public boolean isDocumentsComplet(Object task) { boolean ok = true; Tasca tasca = findTascaByJbpmTask((JbpmTask)task); for (DocumentTasca docTasca: tasca.getDocuments()) { if (docTasca.isRequired()) { String codiJbpm = JbpmVars.PREFIX_DOCUMENT + docTasca.getDocument().getCodi(); Object valor = jbpmHelper.getTaskInstanceVariable( ((JbpmTask)task).getId(), codiJbpm); if (valor == null) { ok = false; break; } } } return ok; } public boolean isSignaturesComplet(Object task) { boolean ok = true; Tasca tasca = findTascaByJbpmTask((JbpmTask)task); for (FirmaTasca firmaTasca: tasca.getFirmes()) { if (firmaTasca.isRequired()) { String codiJbpm = JbpmVars.PREFIX_SIGNATURA + firmaTasca.getDocument().getCodi(); Object valor = jbpmHelper.getTaskInstanceVariable(((JbpmTask)task).getId(), codiJbpm); if (valor == null) ok = false; } } return ok; } public void processarCampsAmbDominiCacheActivat( JbpmTask task, Tasca tasca, Map<String, Object> variables) { List<CampTasca> campsTasca = campTascaRepository.findAmbTascaOrdenats(tasca.getId()); for (CampTasca campTasca: campsTasca) { if (campTasca.getCamp().isDominiCacheText()) { Object campValor = variables.get(campTasca.getCamp().getCodi()); if ( campTasca.getCamp().getTipus().equals(TipusCamp.SELECCIO) || campTasca.getCamp().getTipus().equals(TipusCamp.SUGGEST)) { if (campValor instanceof DominiCodiDescripcio) { variables.put( campTasca.getCamp().getCodi(), ((DominiCodiDescripcio)campValor).getCodi()); variables.put( JbpmVars.PREFIX_VAR_DESCRIPCIO + campTasca.getCamp().getCodi(), ((DominiCodiDescripcio)campValor).getDescripcio()); } else { String text = variableHelper.getTextPerCamp( campTasca.getCamp(), campValor, null, task.getProcessInstanceId()); variables.put( JbpmVars.PREFIX_VAR_DESCRIPCIO + campTasca.getCamp().getCodi(), text); } } } } } public void createDelegationInfo( JbpmTask task, JbpmTask original, JbpmTask delegada, String comentari, boolean supervisada) { DelegationInfo info = new DelegationInfo(); info.setSourceTaskId(original.getId()); info.setTargetTaskId(delegada.getId()); info.setStart(new Date()); info.setComment(comentari); info.setSupervised(supervisada); jbpmHelper.setTaskInstanceVariable( task.getId(), JbpmVars.VAR_TASCA_DELEGACIO, info); } public DelegationInfo getDelegationInfo(JbpmTask task) { return (DelegationInfo)jbpmHelper.getTaskInstanceVariable( task.getId(), JbpmVars.VAR_TASCA_DELEGACIO); } public void deleteDelegationInfo(JbpmTask task) { jbpmHelper.deleteTaskInstanceVariable( task.getId(), JbpmVars.VAR_TASCA_DELEGACIO); } private static final Logger logger = LoggerFactory.getLogger(TascaHelper.class); }