package CrowdBenchmark.parts;
import java.awt.Font;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;
import CrowdBenchmark.events.EventConstants;
import CrowdBenchmark.models.SimulationParameter;
public class WorkerChartPart {
private SimulationParameter simuPara;
private DefaultPieDataset dataset;
@Inject
@Optional
void updateHandler(
@UIEventTopic(EventConstants.DATA_UPDATE_UPDATED) SimulationParameter simuPara) {
this.simuPara = simuPara;
createDataSet();
}
@PostConstruct
public void createComposite(Composite parent) {
JFreeChart chart = createChart(createDataSet());
ChartComposite chartComposite = new ChartComposite(parent, SWT.NONE,
chart, true);
chartComposite.setDisplayToolTips(true);
chartComposite.setHorizontalAxisTrace(false);
chartComposite.setVerticalAxisTrace(false);
}
private JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart("Worker Population", // chart
// title
dataset, // data
true, // include legend
true, false);
PiePlot plot = (PiePlot) chart.getPlot();
plot.setSectionOutlinesVisible(false);
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
plot.setNoDataMessage("No data available");
plot.setCircular(false);
plot.setLabelGap(0.02);
return chart;
}
private PieDataset createDataSet() {
if (dataset == null) {
dataset = new DefaultPieDataset();
} else {
dataset.clear();
Integer uniformSpammer = SimulateConfigPart.getValue(simuPara
.getUniformSpammer());
Integer randomSpammer = SimulateConfigPart.getValue(simuPara
.getRandomSpammer());
Integer expert = SimulateConfigPart.getValue(simuPara.getExpert());
Integer normalWorker = SimulateConfigPart.getValue(simuPara
.getNormalWorker());
Integer sloppyWorker = SimulateConfigPart.getValue(simuPara
.getSloppyWorker());
dataset.setValue("Uniform Spammer", uniformSpammer);
dataset.setValue("Random Spammer", randomSpammer);
dataset.setValue("Expert", expert);
dataset.setValue("Normal Worker", normalWorker);
dataset.setValue("Sloppy Worker", sloppyWorker);
}
return dataset;
}
}