Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java @ 298:80f7c5dc09c6
Implementation of classes for creating timeseries, verticalprofile and horizontalprofile charts.
gnv-artifacts/trunk@352 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 19 Nov 2009 15:30:27 +0000 |
parents | |
children | 3ea030aafe65 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Thu Nov 19 15:30:27 2009 +0000 @@ -0,0 +1,136 @@ +package de.intevation.gnv.chart; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Locale; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.general.Series; +import org.jfree.data.xy.XYDataset; +import org.jfree.data.xy.XYSeriesCollection; +import org.jfree.chart.plot.XYPlot; +import org.jfree.chart.plot.PlotOrientation; + +import de.intevation.gnv.geobackend.base.Result; + + +/** + * @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 result, + Collection dates, + Locale locale + ) { + this.labels = labels; + this.theme = theme; + this.parameters = parameters; + this.measurements = measurements; + this.resultSet = result; + this.dates = dates; + this.locale = locale; + this.PLOT_ORIENTATION = PlotOrientation.HORIZONTAL; + } + + + 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, idx); + prepareAxis(((String)series.getKey()), 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, idx); + prepareAxis(((String)series.getKey()), idx++); + } + + + 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, int idx) { + log.debug("add series to verticalprofile chart"); + XYPlot plot = chart.getXYPlot(); + + if (series == null) { + log.warn("no data to add"); + return; + } + + XYSeriesCollection xysc = new XYSeriesCollection((XYSeries)series); + plot.setDataset(idx, xysc); + } + + + 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=latin1 :