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 :

http://dive4elements.wald.intevation.org