package org.activiti.crystalball.generator;
import org.activiti.crystalball.simulator.RuntimeService;
import org.activiti.crystalball.simulator.SimulationRun;
import org.activiti.crystalball.simulator.SimulationRunHelper;
import org.activiti.crystalball.simulator.impl.persistence.entity.ResultEntity;
import org.activiti.crystalball.simulator.runtime.SimulationInstance;
import org.activiti.engine.ProcessEngine;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.awt.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class SimulationResultsGraphGenerator extends AbstractGraphGenerator {
public void generateGraph( RuntimeService runtimeService, SimulationInstance simulationInstance, String processDefinitionId, String resultType, String fileName) throws Exception {
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
simulationInstance.getSimulationConfigurationId());
PropertyPlaceholderConfigurer propConfig = new PropertyPlaceholderConfigurer();
Properties properties = new Properties();
String configuration = "report-" + Thread.currentThread().getId();
properties.put("simulationRunId", configuration);
propConfig.setProperties(properties);
appContext.addBeanFactoryPostProcessor(propConfig);
appContext.refresh();
SimulationRunHelper runHelper = (SimulationRunHelper) appContext
.getBean("simulationRunHelper");
try {
runHelper.before(configuration);
SimulationRun simRun = (SimulationRun) appContext
.getBean("simulationRun");
ProcessEngine procEngine = simRun.getProcessEngine();
this.setRepositoryService(procEngine.getRepositoryService());
Map<Color, List<String>> highlighActivitiesMap = new HashMap<Color, List<String>>();
Map<String, String> counts = new HashMap<String, String>();
processResults(runtimeService, simulationInstance,
processDefinitionId, resultType, highlighActivitiesMap,
counts);
reportGraph(fileName, processDefinitionId, highlighActivitiesMap,
counts);
} catch (Exception e) {
e.printStackTrace();
} finally {
runHelper.after(configuration);
appContext.close();
}
}
protected void processResults(RuntimeService runtimeService,
SimulationInstance simulationInstance, String processDefinitionId,
String resultType, Map<Color, List<String>> highlighActivitiesMap,
Map<String, String> counts) {
List<ResultEntity> resultList = runtimeService.createResultQuery()
.resultProcessDefinitionKey(processDefinitionId)
.simulationInstanceId(simulationInstance.getId())
.resultType(resultType).list();
for (ResultEntity r : resultList) {
Color c = getColorToHighlight(Float.parseFloat((String) r.getVariable("description")));
addToHighlighted(highlighActivitiesMap, c, (String) r.getVariable("taskDefinitionKey"));
counts.put((String) r.getVariable("taskDefinitionKey"), (String) r.getVariable("description"));
}
}
}