diff artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java @ 7714:0ee6aa11649b

(issue1574) Add area handling for correction curves
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 20 Dec 2013 12:40:08 +0100
parents dfe3f78fd3e5
children e4606eae8ea5
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java	Thu Dec 19 18:36:00 2013 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java	Fri Dec 20 12:40:08 2013 +0100
@@ -18,6 +18,7 @@
 import org.dive4elements.river.artifacts.geom.Lines;
 import org.dive4elements.river.artifacts.model.WKms;
 import org.dive4elements.river.artifacts.model.WQKms;
+import org.dive4elements.river.artifacts.model.WQCKms;
 import org.dive4elements.river.artifacts.model.AreaFacet;
 import org.dive4elements.river.artifacts.model.FacetTypes;
 import org.dive4elements.river.exports.DiagramGenerator;
@@ -32,6 +33,45 @@
 
     private static final Logger logger = Logger.getLogger(AreaProcessor.class);
 
+    protected XYSeries getSeries(String seriesName, Object data, String facetType,
+            ThemeDocument theme) {
+        if (data == null || facetType == null) {
+            return null;
+        }
+
+        XYSeries series = new StyledXYSeries(seriesName, false, theme);
+
+        if (facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_C)) {
+            WQCKms wqckms = (WQCKms) data;
+            int size = wqckms.size();
+            for (int i = 0; i < size; i++) {
+                series.add(wqckms.getKm(i), wqckms.getC(i), false);
+            }
+        } else if (data instanceof WQKms) {
+            if (FacetTypes.IS.Q(facetType)) {
+                StyledSeriesBuilder.addPointsKmQ(series, (WQKms) data);
+            }
+            else {
+                StyledSeriesBuilder.addPoints(series, (WKms) data);
+            }
+        }
+        else if (data instanceof double[][]) {
+            StyledSeriesBuilder.addPoints(series, (double [][]) data, false);
+        }
+        else if (data instanceof WKms) {
+            StyledSeriesBuilder.addPoints(series, (WKms) data);
+        }
+        else if (data instanceof Lines.LineData) {
+            StyledSeriesBuilder.addPoints(series, ((Lines.LineData) data).points, false);
+        }
+        else {
+            logger.error("Do not know how to deal with (up) area info from: "
+                    + data);
+        }
+        return series;
+    }
+
+
     @Override
     public void doOut(
             DiagramGenerator generator,
@@ -46,63 +86,15 @@
 
         AreaFacet.Data data = (AreaFacet.Data) bundle.getData(context);
 
-        XYSeries up   = null;
-        XYSeries down = null;
+        String lowerFacetName = data.getLowerFacetName();
+        String upperFacetName = data.getUpperFacetName();
 
-        if (data.getUpperData() != null) {
-            up = new StyledXYSeries(seriesName, false, theme);
-            if (data.getUpperData() instanceof WQKms) {
-                if (FacetTypes.IS.Q(data.getRootFacetName())) {
-                    StyledSeriesBuilder.addPointsKmQ(up, (WQKms) data.getUpperData());
-                }
-                else {
-                    StyledSeriesBuilder.addPoints(up, (WKms) data.getUpperData());
-                }
-            }
-            else if (data.getUpperData() instanceof double[][]) {
-                StyledSeriesBuilder.addPoints(up, (double [][]) data.getUpperData(), false);
-            }
-            else if (data.getUpperData() instanceof WKms) {
-                StyledSeriesBuilder.addPoints(up, (WKms) data.getUpperData());
-            }
-            else if (data.getUpperData() instanceof Lines.LineData) {
-                StyledSeriesBuilder.addPoints(up, ((Lines.LineData) data.getUpperData()).points, false);
-            }
-            else {
-                logger.error("Do not know how to deal with (up) area info from: "
-                        + data.getUpperData());
-            }
-        }
+        XYSeries up   = getSeries(seriesName, data.getUpperData(), upperFacetName, theme);
+        XYSeries down = getSeries(seriesName + " ", data.getLowerData(), lowerFacetName, theme);
+
 
         // TODO Depending on style, the area (e.g. 20m^2) should be added as annotation.
 
-        if (data.getLowerData() != null) {
-            // TODO: Sort this out: when the two series have the same name,
-            // the renderer (or anything in between) will not work correctly.
-            down = new StyledXYSeries(seriesName + " ", false, theme);
-            if (data.getLowerData() instanceof WQKms) {
-                if (FacetTypes.IS.Q(data.getRootFacetName())) {
-                    StyledSeriesBuilder.addPointsKmQ(down, (WQKms) data.getLowerData());
-                }
-                else {
-                    StyledSeriesBuilder.addPoints(down, (WQKms) data.getLowerData());
-                }
-            }
-            else if (data.getLowerData() instanceof double[][]) {
-                StyledSeriesBuilder.addPoints(down, (double[][]) data.getLowerData(), false);
-            }
-            else if (data.getLowerData() instanceof WKms) {
-                StyledSeriesBuilder.addPoints(down, (WKms) data.getLowerData());
-            }
-            else if (data.getLowerData() instanceof Lines.LineData) {
-                StyledSeriesBuilder.addPoints(down, ((Lines.LineData) data.getLowerData()).points, false);
-            }
-            else {
-                logger.error("Do not know how to deal with (down) area info from: "
-                        + data.getLowerData());
-            }
-        }
-
         if (up == null && down != null) {
             area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE);
             down.setKey(seriesName);
@@ -125,9 +117,12 @@
             area.addSeries(down);
         }
 
+        String facetNameForAxis = lowerFacetName == null
+            ? upperFacetName
+            : lowerFacetName;
         /* Decide axis name based on facet name */
         generator.addAreaSeries(area,
-                axisNameForFacet(data.getRootFacetName()), visible);
+                axisNameForFacet(facetNameForAxis), visible);
     }
 
     /** Look up the axis identifier for a given facet type. */
@@ -135,7 +130,8 @@
         if (FacetTypes.W_DIFFERENCES.equals(facetName)) {
             return "diffW";
         }
-        if (FacetTypes.IS.W(facetName)) {
+        if (FacetTypes.IS.W(facetName) ||
+            FacetTypes.DISCHARGE_LONGITUDINAL_C.equals(facetName)) {
             return "W";
         }
         if (FacetTypes.IS.Q(facetName)) {

http://dive4elements.wald.intevation.org