diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java @ 3162:0d8146989012

Added labeling for Q/W points FixingsKMChartService. flys-artifacts/trunk@4774 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 25 Jun 2012 11:38:33 +0000
parents 368d1837ce5d
children 6d0567a8387d
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java	Mon Jun 25 07:59:22 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/FixingsKMChartService.java	Mon Jun 25 11:38:33 2012 +0000
@@ -18,17 +18,20 @@
 import de.intevation.flys.artifacts.model.GaugeFinderFactory;
 import de.intevation.flys.artifacts.model.GaugeRange;
 
+import de.intevation.flys.artifacts.model.fixings.QW;
+
 import de.intevation.flys.backend.SessionHolder;
 
+import de.intevation.flys.utils.Formatter;
 import de.intevation.flys.utils.Pair;
 
-import gnu.trove.TDoubleArrayList;
-
 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Transparency;
 
+import java.awt.geom.Rectangle2D;
+
 import java.awt.image.BufferedImage;
 
 import java.io.ByteArrayOutputStream;
@@ -44,13 +47,16 @@
 import org.jfree.chart.ChartFactory;
 import org.jfree.chart.ChartUtilities;
 import org.jfree.chart.JFreeChart;
+import org.jfree.chart.LegendItemCollection;
+
+import org.jfree.chart.axis.NumberAxis;
 
 import org.jfree.chart.plot.Marker;
 import org.jfree.chart.plot.PlotOrientation;
 import org.jfree.chart.plot.ValueMarker;
 import org.jfree.chart.plot.XYPlot;
 
-import org.jfree.data.xy.DefaultXYDataset;
+import org.jfree.data.Range;
 
 import org.jfree.ui.RectangleAnchor;
 import org.jfree.ui.TextAnchor;
@@ -177,7 +183,7 @@
             }
         }
 
-        JFreeChart chart = createChart(cols, river, km);
+        JFreeChart chart = createChart(cols, river, km, callMeta);
 
         return encode(chart, extent, format);
     }
@@ -207,42 +213,66 @@
 
     protected static JFreeChart createChart(
         List<Pair<Fixing.Column, FixingsColumn>> cols,
-        String river,
-        double km
+        String      river,
+        double      km,
+        CallMeta    callMeta
     ) {
-
-        TDoubleArrayList ws = new TDoubleArrayList(cols.size());
-        TDoubleArrayList qs = new TDoubleArrayList(cols.size());
+        // TODO: I18N
+        QWSeriesCollection dataset = new QWSeriesCollection();
 
         double [] w = new double[1];
         for (Pair<Fixing.Column, FixingsColumn> col: cols) {
-            boolean interpolated = col.getB().getW(km, w);
-            // TODO: Do something special with the interpolated values.
+            boolean interpolated = !col.getB().getW(km, w);
             double q = col.getB().getQ(km);
             if (!Double.isNaN(w[0]) && !Double.isNaN(q)) {
-                ws.add(w[0]);
-                qs.add(q);
-                // TODO: Generate labels depending on sectors.
+                QW qw = new QW(
+                    q, w[0],
+                    col.getA().getDescription(),
+                    col.getA().getStartTime(),
+                    interpolated);
+                dataset.add(qw);
             }
         }
 
-        DefaultXYDataset dataset = new DefaultXYDataset();
-
-        dataset.addSeries(
-            "Fixierungen", // TODO: i18n
-            new double [][] { qs.toNativeArray(), ws.toNativeArray() });
-
-        JFreeChart chart = ChartFactory.createScatterPlot(
+        JFreeChart chart = ChartFactory.createXYLineChart(
             "Fixierungen " + river + ": km " + km, // TODO: i18n
-            "Q", // TODO: i18n
-            "W", // TODO: i18n
-            dataset,
+            "Q [m\u00b3/s]",
+            "W [NN + m]",
+            null,
             PlotOrientation.VERTICAL,
             true,
-            false,
+            true,
             false);
 
-        applyQSectorMarkers(chart.getXYPlot(), river, km);
+        XYPlot plot = (XYPlot)chart.getPlot();
+
+        NumberAxis qA = (NumberAxis)plot.getDomainAxis();
+        qA.setNumberFormatOverride(Formatter.getWaterlevelQ(callMeta));
+
+        NumberAxis wA = (NumberAxis)plot.getRangeAxis();
+        wA.setNumberFormatOverride(Formatter.getWaterlevelW(callMeta));
+
+        plot.setRenderer(0, dataset.createRenderer());
+        plot.setDataset(0, dataset);
+
+        Rectangle2D area = dataset.getArea();
+
+        if (area != null) {
+            double wInset = area.getHeight() * 0.25d;
+            log.debug("width: " + area.getWidth());
+            log.debug("height: "+ area.getHeight());
+
+            wA.setAutoRangeIncludesZero(false);
+            wA.setRange(new Range(
+                area.getMinY() - wInset,
+                area.getMaxY() + wInset));
+        }
+
+        LegendItemCollection lic = plot.getLegendItems();
+        dataset.addLegendItems(lic);
+        plot.setFixedLegendItems(lic);
+
+        applyQSectorMarkers(plot, river, km);
 
         ChartUtilities.applyCurrentTheme(chart);
 

http://dive4elements.wald.intevation.org