/** * */ package net.conselldemallorca.helium.jbpm3.integracio; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.jbpm.taskmgmt.def.Swimlane; import org.jbpm.taskmgmt.exe.PooledActor; import org.jbpm.taskmgmt.exe.TaskInstance; /** * Una instància de tasca multiversió * * @author Limit Tecnologies <limit@limit.es> */ public class JbpmTask { private static final String DESCRIPTION_FIELD_SEPARATOR = "@#@"; private TaskInstance taskInstance; public JbpmTask(TaskInstance taskInstance) { this.taskInstance = taskInstance; } public TaskInstance getTask() { return taskInstance; } public void setTask(TaskInstance taskInstance) { this.taskInstance = taskInstance; } public String getId() { return new Long(taskInstance.getId()).toString(); } public String getProcessInstanceId() { return new Long(taskInstance.getProcessInstance().getId()).toString(); } public String getProcessDefinitionId() { return new Long(taskInstance.getProcessInstance().getProcessDefinition().getId()).toString(); } public String getTaskName() { return taskInstance.getTask().getName(); } public String getDescription() { if (taskInstance.getDescription() == null) return null; if (taskInstance.getDescription().contains(DESCRIPTION_FIELD_SEPARATOR)) { int index = taskInstance.getDescription().lastIndexOf(DESCRIPTION_FIELD_SEPARATOR); if (index + 1 < taskInstance.getDescription().length()) return taskInstance.getDescription().substring(index + 1); else return ""; } else { return taskInstance.getDescription(); } } public String getAssignee() { return taskInstance.getActorId(); } public Set<String> getPooledActors() { Set<String> resultat = new HashSet<String>(); for (PooledActor pa: taskInstance.getPooledActors()) { resultat.add(pa.getActorId()); } return resultat; } public Date getCreateTime() { return taskInstance.getCreate(); } public Date getStartTime() { return taskInstance.getStart(); } public Date getEndTime() { return taskInstance.getEnd(); } public Date getDueDate() { return taskInstance.getDueDate(); } public int getPriority() { return 3 - taskInstance.getPriority(); } public boolean isOpen() { return taskInstance.isOpen(); } public boolean isCompleted() { return taskInstance.getEnd() != null; } public boolean isSuspended() { return taskInstance.isSuspended(); } public boolean isCancelled() { return taskInstance.isCancelled(); } public String getPooledActorsExpression() { if (taskInstance.getTask() == null) { return null; } return taskInstance.getTask().getPooledActorsExpression(); } public boolean isAgafada() { boolean resultado = false; try { if (getAssignee() != null) { // Tenía un grupo asignado boolean conGrupoAsignado = getPooledActorsExpression() != null && getPooledActorsExpression().length() > 0; // Se le reasignó posteriormente un grupo boolean conGrupoAnteriorAsignado = false; // Tenía un grupo asignado originalmente a la tarea boolean conGrupoOriginal = false; if (!conGrupoOriginal) { conGrupoAnteriorAsignado = getPooledActors() != null && !getPooledActors().isEmpty(); if (!conGrupoAnteriorAsignado) { @SuppressWarnings("rawtypes") Iterator it = taskInstance.getTask().getTaskMgmtDefinition().getSwimlanes().entrySet().iterator(); while (it.hasNext()) { @SuppressWarnings("unchecked") Map.Entry<String, Swimlane> e = (Map.Entry<String, Swimlane>)it.next(); String pooledActorExpresion = taskInstance.getTask().getTaskMgmtDefinition().getSwimlane(e.getKey()).getPooledActorsExpression(); if (pooledActorExpresion != null && pooledActorExpresion.length() > 0) { conGrupoOriginal = true; break; } } } } resultado = (conGrupoAsignado || conGrupoAnteriorAsignado || conGrupoOriginal); } } catch (Exception e) {} return resultado; } public void setCacheActiu() { setFieldFromDescription("cache", "true"); } public void setCacheInactiu() { setFieldFromDescription("cache", "false"); } public boolean isCacheActiu() { return "true".equalsIgnoreCase(getFieldFromDescription("cache")); } public String getDescriptionWithFields() { return taskInstance.getDescription(); } public String getFieldFromDescription(String name) { String text = getDescriptionWithFields(); if (text == null) return null; String fieldHeader = DESCRIPTION_FIELD_SEPARATOR + name + DESCRIPTION_FIELD_SEPARATOR; int indexInici = text.indexOf(fieldHeader); if (indexInici != -1) { int indexFi = text.indexOf(DESCRIPTION_FIELD_SEPARATOR, indexInici + fieldHeader.length()); return text.substring(indexInici + fieldHeader.length(), indexFi); } else { return null; } } public void setFieldFromDescription(String name, String value) { String currentFieldValue = getFieldFromDescription(name); if (currentFieldValue != null) { String currentFieldText = DESCRIPTION_FIELD_SEPARATOR + name + DESCRIPTION_FIELD_SEPARATOR + currentFieldValue; String newFieldText = DESCRIPTION_FIELD_SEPARATOR + name + DESCRIPTION_FIELD_SEPARATOR + value; taskInstance.setDescription(getDescriptionWithFields().replace(currentFieldText, newFieldText)); } else { String newFieldText = DESCRIPTION_FIELD_SEPARATOR + name + DESCRIPTION_FIELD_SEPARATOR + value; String fields = getDescriptionWithFields(); if (fields == null || !fields.startsWith(DESCRIPTION_FIELD_SEPARATOR)) newFieldText += DESCRIPTION_FIELD_SEPARATOR; taskInstance.setDescription(newFieldText + getDescriptionWithFields()); } } }