package org.jbpm.sim.report.jasper;
import java.util.HashMap;
import java.util.Map;
import org.jbpm.sim.def.JbpmSimulationExperiment;
import org.jbpm.sim.exe.ExperimentReader;
import org.jbpm.sim.report.ExperimentReport;
/**
* This report shows the comparison of multiple scenarios.
*
* Currently waiting, if it is possible to add different tasks on
* one stacked bar or line chart. See <a href="http://www.jasperforge.org/index.php?option=com_joomlaboard&Itemid=215&func=view&id=32269&catid=8">JasperReports forum entry</a>.
*
* @author bernd.ruecker@camunda.com
*/
public class ScenarioComparisionReport extends AbstractBaseJasperReport {
private ExperimentReport report;
public ScenarioComparisionReport(ExperimentReport report) {
this.report = report;
}
public Object[] getContent() {
/**
* we need at least one "pseudo" row, otherwise the report will be empty
*/
return new Object[] {""};
}
public Map getReportParameters() {
HashMap params = new HashMap();
params.put("EXPERIMENT_REPORT", report);
return params;
}
public String getReportPath() {
return "/org/jbpm/sim/report/jasper/ScenarioComparison.jasper";
}
public Map getSubreportPaths() {
HashMap subreports = new HashMap();
subreports.put("SUBREPORT_WaitingTimeBeforeTaskComparison",
"/org/jbpm/sim/report/jasper/WaitingTimeBeforeTaskComparison.jasper");
subreports.put("SUBREPORT_WaitingTimeForResourceComparison",
"/org/jbpm/sim/report/jasper/WaitingTimeForResourceComparison.jasper");
subreports.put("SUBREPORT_ResourceUtilizationComparison",
"/org/jbpm/sim/report/jasper/ResourceUtilizationComparison.jasper");
subreports.put("SUBREPORT_ScenarioComparisonTable",
"/org/jbpm/sim/report/jasper/ScenarioComparisonTable.jasper");
subreports.put("SUBREPORT_ScenarioComparisonProcessCycleTimesTable",
"/org/jbpm/sim/report/jasper/ScenarioComparisonProcessCycleTimesTable.jasper");
return subreports;
}
/**
* run a small simulation and show results in Report
* @param args
*/
public static void main(String[] args) {
String processXml =
"<process-definition name='test' start-distribution='start dist'>" +
" <distribution name='start dist' sample-type='real' type='normal' mean='10' standardDeviation='5'/> " +
" <distribution name='task dist' sample-type='real' type='normal' mean='20' standardDeviation='5'/> " +
" <swimlane name='clerk' pool-size='10' />" +
" <start-state name='start'>" +
" <transition to='task one' />" +
" </start-state>" +
" <task-node name='task one'>" +
" <task swimlane='clerk' time-distribution='task dist' />" +
" <transition to='end' />" +
" </task-node>" +
" <end-state name='end'/>" +
"</process-definition>" ;
String experimentConfiguration =
"<experiment name='StaffingExperiment' run-time='100'>" +
" <scenario name='01 clerk'>" +
" <resource-pool name='clerk' pool-size='1' />" +
" <sim-process name='test' />" +
" </scenario>" +
" <scenario name='02 clerks'>" +
" <resource-pool name='clerk' pool-size='2' />" +
" <sim-process name='test' />" +
" </scenario>" +
" <scenario name='03 clerks'>" +
" <resource-pool name='clerk' pool-size='3' />" +
" <sim-process name='test' />" +
" </scenario>" +
" <scenario name='05 clerks'>" +
" <resource-pool name='clerk' pool-size='5' />" +
" <sim-process name='test' />" +
" </scenario>" +
" <scenario name='10 clerks'>" +
" <resource-pool name='clerk' pool-size='10' />" +
" <sim-process name='test' />" +
" </scenario>" +
"</experiment>";
ExperimentReader reader = new ExperimentReader(experimentConfiguration);
reader.addProcessDefinition( "test", processXml );
JbpmSimulationExperiment experiment = reader.readExperiment();
experiment.setWriteDesmojHtmlOutput(true);
experiment.run();
ScenarioComparisionReport report = new ScenarioComparisionReport(experiment.getReport());
report.show();
}
}