package org.activiti.crystalball.simulator.delegate; import org.activiti.crystalball.simulator.RuntimeService; import org.activiti.crystalball.simulator.impl.context.SimulationContext; import org.activiti.engine.delegate.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; public class CostsTaskListener implements TaskListener, ExecutionListener { private static Logger log = LoggerFactory.getLogger(CostsTaskListener.class); public static final String COSTS_ID = "costsId"; public static final String COSTS_VALUE = "costsValue"; protected Expression costsId; protected Expression costsValue; @Override public void notify(DelegateTask delegateTask) { try { notify(delegateTask.getExecution()); } catch (Exception e) { log.error("costs listener error", e); } } @Override public void notify(DelegateExecution execution) throws Exception { // log result only in the simulation context if (SimulationContext.getSimulationRun() != null) { // log costs RuntimeService runtimeService = SimulationContext.getSimulationEngineConfiguration().getRuntimeService(); Map<String, Object> resultVariables = new HashMap<String, Object>(); resultVariables.put("processDefinitionKey", execution.getProcessDefinitionId()); resultVariables.put("taskDefinitionKey", execution.getCurrentActivityId()); resultVariables.put( "description", (String) costsValue.getValue(execution)); runtimeService.saveResult((String) costsId.getValue(execution), resultVariables); } } public Expression getCostsId() { return costsId; } public void setCostsId(Expression costsId) { this.costsId = costsId; } public Expression getCostsValue() { return costsValue; } public void setCostsValue(Expression costsValue) { this.costsValue = costsValue; } }