/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.awe.charts.builder;
import java.text.NumberFormat;
import org.amanzi.awe.charts.builder.dataset.dto.impl.TimeSeriesCollectionContainer;
import org.amanzi.awe.charts.builder.internal.Messages;
import org.amanzi.awe.charts.manger.ChartsManager;
import org.amanzi.awe.charts.model.IChartModel;
import org.amanzi.awe.charts.model.IRangeAxis;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.general.Dataset;
import org.jfree.data.xy.XYDataset;
/**
* TODO Purpose of
* <p>
* </p>
*
* @author Vladislav_Kondratenko
* @since 1.0.0
*/
public class TimeChartBuilder
extends
AbstractMultiAxisChartBuilder<XYPlot, TimeSeriesCollectionContainer, XYLineAndShapeRenderer, StandardXYItemRenderer, DateAxis, NumberAxis> {
private static final int MAXIMUM_FRACTION_DIGITS = 2;
private static final StandardXYToolTipGenerator STANDARD_TOOL_TIP_GENERATOR = new StandardXYToolTipGenerator();
/**
* @param model
*/
public TimeChartBuilder(IChartModel model) {
super(model);
}
@Override
protected void setSecondAxisForPlot(XYPlot plot, Dataset dataset, StandardXYItemRenderer subRenderer, NumberAxis secondAxis) {
plot.setRangeAxis(1, secondAxis);
plot.setDataset(1, (XYDataset)dataset);
plot.mapDatasetToRangeAxis(1, 1);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
plot.setRenderer(1, subRenderer);
}
@Override
protected NumberAxis configRangeAxis(IRangeAxis axis) {
NumberAxis rangeAxis;
if (axis.equals(getModel().getMainRangeAxis())) {
rangeAxis = (NumberAxis)getPlot().getRangeAxis();
rangeAxis.setNumberFormatOverride(NumberFormat.getInstance());
rangeAxis.getNumberFormatOverride().setMaximumFractionDigits(MAXIMUM_FRACTION_DIGITS);
} else {
rangeAxis = new NumberAxis(getModel().getSecondRangeAxis().getName());
rangeAxis.setNumberFormatOverride(NumberFormat.getInstance());
rangeAxis.getNumberFormatOverride().setMaximumFractionDigits(MAXIMUM_FRACTION_DIGITS);
rangeAxis.setAutoRangeIncludesZero(false);
}
return rangeAxis;
}
@Override
protected DateAxis configDomainAxis(String domainAxisName) {
DateAxis dateAxis = (DateAxis)getPlot().getDomainAxis();
// TODO KV: move to date format manager;
dateAxis.setDateFormatOverride(ChartsManager.getInstance().getDefaultDateFormat());
dateAxis.setAutoRange(true);
return dateAxis;
}
@Override
protected TimeSeriesCollectionContainer createDataset(IChartModel model) {
return new TimeSeriesCollectionContainer(model);
}
@Override
protected XYPlot plotSetup(Dataset dataset, DateAxis domainAxis2, NumberAxis mainRangeAxis2,
XYLineAndShapeRenderer mainRenderer2) {
getPlot().setOrientation(getModel().getPlotOrientation());
return getPlot();
}
@Override
protected JFreeChart createDefaultChart() {
JFreeChart chart = ChartFactory.createTimeSeriesChart(getModel().getName(), // title
getModel().getDomainAxisName(), // x-axis label
getModel().getMainRangeAxis().getName(), // y-axis label
getDatasets().getDataset(getModel().getMainRangeAxis()), // data
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
return chart;
}
@Override
protected XYLineAndShapeRenderer configMainRenderer() {
((XYLineAndShapeRenderer)getPlot().getRenderer()).setBaseToolTipGenerator(STANDARD_TOOL_TIP_GENERATOR);
return (XYLineAndShapeRenderer)getPlot().getRenderer();
}
@Override
protected StandardXYItemRenderer configSubRenderer() {
final StandardXYItemRenderer renderer = new StandardXYItemRenderer();
renderer.setBaseToolTipGenerator(STANDARD_TOOL_TIP_GENERATOR);
return renderer;
}
@Override
protected JFreeChart finishUp(JFreeChart chart) {
chart.addSubtitle(getSubTitle(Messages.clickItemToDrillDown));
return chart;
}
}