/*
* Copyright 2013 Serdar.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.fub.maps.project.plugins.tasks.eval;
import de.fub.agg2graph.management.Statistics;
import de.fub.agg2graph.roadgen.RoadNetwork;
import de.fub.maps.project.aggregator.pipeline.processes.RoadNetworkProcess;
import de.fub.maps.project.plugins.tasks.eval.evaluator.EvalutationItem;
import de.fub.utilsmodule.text.CustomNumberFormat;
import java.awt.Color;
import java.util.List;
import javax.swing.JLabel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.StandardBarPainter;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.openide.util.NbBundle;
/**
*
* @author Serdar
*/
public class OverviewChart extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
private List<EvalutationItem> roadNetworkStatisticsList;
/**
* Creates new form OverviewChart
*/
public OverviewChart() {
initComponents();
barchart1.getRangeAxis().setLabel(NbBundle.getMessage(OverviewChart.class, "overview.chart1.rangeaxis1.name"));
barchart1.getPlot().setRangeAxis(1, new NumberAxis(NbBundle.getMessage(OverviewChart.class, "overview.chart1.rangeaxis2.name")));
barchart1.getPlot().getRangeAxis(1).setUpperMargin(.1);
barchart1.getPlot().getRangeAxis(0).setUpperMargin(.1);
barchart1.getPlot().getRenderer(0).setBaseItemLabelGenerator(
new StandardCategoryItemLabelGenerator(
StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
new CustomNumberFormat()));
barchart1.getPlot().getRenderer(0).setBaseItemLabelsVisible(true);
BarRenderer barRenderer = new BarRenderer();
barRenderer.setBarPainter(new StandardBarPainter());
barRenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
barRenderer.setBaseItemLabelGenerator(
new StandardCategoryItemLabelGenerator(
StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING,
new CustomNumberFormat()));
barRenderer.setBaseItemLabelsVisible(true);
barRenderer.setAutoPopulateSeriesFillPaint(true);
barRenderer.setAutoPopulateSeriesPaint(true);
barRenderer.setShadowVisible(false);
barchart1.getPlot().setRenderer(1, barRenderer);
CategoryPlot plot = barchart1.getPlot();
plot.setDataset(1, new DefaultCategoryDataset());
plot.mapDatasetToRangeAxis(0, 0);
plot.mapDatasetToRangeAxis(1, 1);
}
public OverviewChart(List<EvalutationItem> roadNetworkStatisticList) {
this();
this.roadNetworkStatisticsList = roadNetworkStatisticList;
init();
}
public void setEvaluationItems(List<EvalutationItem> roadNetworkStatisticList) {
this.roadNetworkStatisticsList = roadNetworkStatisticList;
init();
}
private void init() {
for (int i = 0; i < barchart1.getPlot().getDatasetCount(); i++) {
CategoryDataset dataset = barchart1.getPlot().getDataset(i);
if (dataset instanceof DefaultCategoryDataset) {
((DefaultCategoryDataset) dataset).clear();
}
}
if (roadNetworkStatisticsList != null) {
for (EvalutationItem item : roadNetworkStatisticsList) {
RoadNetworkProcess roadNetworkProcess = item.getRoadNetworkProcess();
if (roadNetworkProcess != null && roadNetworkProcess.getResult() != null) {
handle(item.getAggregator().getAggregatorDescriptor().getName(), roadNetworkProcess);
}
}
}
for (int i = 0; i < barchart1.getPlot().getRendererCount(); i++) {
initRenderer(barchart1.getPlot().getRenderer(i));
}
}
private void initRenderer(CategoryItemRenderer renderer) {
Color[] colors = new Color[]{Color.red, Color.blue, Color.orange, Color.cyan, Color.yellow, Color.magenta, Color.green, Color.pink, Color.black, Color.gray};
if (!this.roadNetworkStatisticsList.isEmpty()) {
for (int i = 0; i < this.roadNetworkStatisticsList.size(); i++) {
renderer.setSeriesPaint(i, colors[i % colors.length]);
}
}
}
public JLabel getTitleLabel() {
return titleLabel;
}
public DefaultCategoryDataset getDataset() {
return barchart1.getDataset();
}
public JFreeChart getChart() {
return barchart1.getChart();
}
public CategoryPlot getPlot() {
return barchart1.getPlot();
}
public CategoryAxis getDomainAxis() {
return barchart1.getDomainAxis();
}
public ValueAxis getRangeAxis() {
return barchart1.getRangeAxis();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
titleLabel = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
barchart1 = new de.fub.maps.project.plugins.tasks.eval.Barchart();
setBackground(new java.awt.Color(255, 216, 178));
setPreferredSize(new java.awt.Dimension(0, 470));
setLayout(new java.awt.BorderLayout());
jPanel1.setMaximumSize(new java.awt.Dimension(32767, 24));
jPanel1.setMinimumSize(new java.awt.Dimension(100, 24));
jPanel1.setOpaque(false);
jPanel1.setPreferredSize(new java.awt.Dimension(932, 24));
jPanel1.setLayout(new java.awt.BorderLayout());
titleLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
titleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
org.openide.awt.Mnemonics.setLocalizedText(titleLabel, org.openide.util.NbBundle.getMessage(OverviewChart.class, "OverviewChart.titleLabel.text")); // NOI18N
jPanel1.add(titleLabel, java.awt.BorderLayout.CENTER);
add(jPanel1, java.awt.BorderLayout.NORTH);
jPanel3.setLayout(new java.awt.GridLayout(1, 3));
barchart1.setBorder(javax.swing.BorderFactory.createMatteBorder(1, 1, 1, 0, new java.awt.Color(204, 204, 204)));
jPanel3.add(barchart1);
add(jPanel3, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private de.fub.maps.project.plugins.tasks.eval.Barchart barchart1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JLabel titleLabel;
// End of variables declaration//GEN-END:variables
private void handle(String name, RoadNetworkProcess roadNetworkProcess) {
if (roadNetworkProcess != null && roadNetworkProcess.getResult() != null) {
RoadNetwork roadNetwork = roadNetworkProcess.getResult();
CategoryDataset dataSet = barchart1.getPlot().getDataset(0);
if (dataSet instanceof DefaultCategoryDataset) {
DefaultCategoryDataset categoryDataset = (DefaultCategoryDataset) dataSet;
categoryDataset.addValue(roadNetwork.getTotalRoadLength(), name, Statistics.PROP_NAME_TOTAL_ROAD_LENGTH);
categoryDataset.addValue(roadNetwork.getAverageRoadLength(), name, Statistics.PROP_NAME_AVERAGE_ROAD_LENGTH);
categoryDataset.addValue(null, name, Statistics.PROP_NAME_TOTAL_NUMBER_OF_ROADS);
categoryDataset.addValue(null, name, Statistics.PROP_NAME_TOTAL_NUMBER_OF_INTERSECTIONS);
}
dataSet = barchart1.getPlot().getDataset(1);
if (dataSet instanceof DefaultCategoryDataset) {
DefaultCategoryDataset categoryDataset = (DefaultCategoryDataset) dataSet;
categoryDataset.addValue(null, name, Statistics.PROP_NAME_TOTAL_ROAD_LENGTH);
categoryDataset.addValue(null, name, Statistics.PROP_NAME_AVERAGE_ROAD_LENGTH);
categoryDataset.addValue(roadNetwork.getRoadCount(), name, Statistics.PROP_NAME_TOTAL_NUMBER_OF_ROADS);
categoryDataset.addValue(roadNetwork.getIntersectionCount(), name, Statistics.PROP_NAME_TOTAL_NUMBER_OF_INTERSECTIONS);
}
}
}
}