Mercurial > dive4elements > gnv-client
view gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java @ 336:1b9ca0f2d498
Added marker for different data sources in sql queries.
gnv-artifacts/trunk@402 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 08 Dec 2009 11:18:27 +0000 |
parents | e964a3d8f7bc |
children | 07a64cfafdf1 |
line wrap: on
line source
package de.intevation.gnv.chart; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import org.apache.log4j.Logger; import org.jfree.chart.ChartTheme; import org.jfree.chart.axis.Axis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeriesCollection; import de.intevation.gnv.geobackend.base.Result; import de.intevation.gnv.state.describedata.KeyValueDescibeData; /** * @author Ingo Weinzierl <ingo.weinzierl@intevation.de> */ public class VerticalProfileChart extends AbstractXYLineChart { private static Logger log = Logger.getLogger(VerticalProfileChart.class); public VerticalProfileChart( ChartLabels labels, ChartTheme theme, Collection parameters, Collection measurements, Collection dates, Collection result, Collection timeGaps, Locale locale, boolean linesVisible, boolean shapesVisible ) { this.labels = labels; this.theme = theme; this.parameters = parameters; this.measurements = measurements; this.dates = dates; this.resultSet = result; this.timeGaps = timeGaps; this.locale = locale; this.PLOT_ORIENTATION = PlotOrientation.HORIZONTAL; this.linesVisible = linesVisible; this.shapesVisible = shapesVisible; this.datasets = new HashMap(); } protected void initData() { log.debug("init data for VerticalProfileChart"); String breakPoint1 = null; String breakPoint2 = null; String breakPoint3 = null; Iterator iter = resultSet.iterator(); Result row = null; String seriesName = null; XYSeries series = null; int idx = 0; while (iter.hasNext()) { row = (Result) iter.next(); // add current data to plot and prepare for next one if (!row.getString("GROUP1").equals(breakPoint1) || !row.getString("GROUP2").equals(breakPoint2) || !row.getString("GROUP3").equals(breakPoint3) ) { log.debug("prepare data/plot for next dataset"); if(series != null) { addSeries(series, seriesName, idx); } // prepare variables for next plot breakPoint1 = row.getString("GROUP1"); breakPoint2 = row.getString("GROUP2"); breakPoint3 = row.getString("GROUP3"); seriesName = createSeriesName( breakPoint1, breakPoint2, breakPoint3 ); log.debug("next dataset is '" + seriesName + "'"); series = new XYSeries(seriesName); } addValue(row, series); } addSeries(series, seriesName, idx); addDatasets(); } protected void addValue(Result row, Series series) { // TODO look for gaps between two values ((XYSeries) series).add( row.getDouble("XORDINATE"), row.getDouble("YORDINATE") ); } protected void addSeries(Series series, String label, int idx) { log.debug("add series (" + label + ")to chart"); if (series == null) { log.warn("no data to add"); return; } XYSeriesCollection xysc = null; String parameter = findParameter(label); if (datasets.containsKey(parameter)) xysc = (XYSeriesCollection) datasets.get(parameter); else xysc = new XYSeriesCollection(); xysc.addSeries((XYSeries) series); datasets.put(parameter, xysc); } protected void addDatasets() { Iterator iter = parameters.iterator(); XYPlot plot = chart.getXYPlot(); int idx = 0; XYSeriesCollection xysc = null; KeyValueDescibeData data = null; String key = null; while (iter.hasNext()) { data = (KeyValueDescibeData) iter.next(); key = data.getValue(); if (datasets.containsKey(key)) { xysc = (XYSeriesCollection)datasets.get(key); plot.setDataset(idx, xysc ); log.debug("Added " + key + " parameter to plot."); prepareAxis(key, idx); adjustRenderer( idx++, xysc.getSeriesCount(), linesVisible, shapesVisible ); } } } protected void localizeDomainAxis(Axis axis, Locale locale) { // call localizeRangeAxis from superclass which formats NumberAxis super.localizeRangeAxis(axis, locale); } protected String createSeriesName( String breakPoint1, String breakPoint2, String breakPoint3 ) { log.debug("create seriesname of verticalprofile chart"); return findValueTitle(parameters, breakPoint1) + " " + findValueTitle(measurements, breakPoint2) + "m"; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :