changeset 7067:eb24d5203d17 generator-refactoring

Add second doOut implementations to work with diagram generator
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 20 Sep 2013 14:54:26 +0200
parents 4310c612a986
children 726d998dce29
files artifacts/src/main/java/org/dive4elements/river/exports/process/AnnotationProcessor.java artifacts/src/main/java/org/dive4elements/river/exports/process/WOutProcessor.java
diffstat 2 files changed, 88 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/process/AnnotationProcessor.java	Fri Sep 20 12:35:14 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/AnnotationProcessor.java	Fri Sep 20 14:54:26 2013 +0200
@@ -14,7 +14,7 @@
 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.model.FacetTypes;
-//import org.dive4elements.river.exports.DiagramGenerator;
+import org.dive4elements.river.exports.DiagramGenerator;
 import org.dive4elements.river.exports.XYChartGenerator;
 import org.dive4elements.river.jfree.RiverAnnotation;
 import org.dive4elements.river.themes.ThemeDocument;
@@ -31,6 +31,28 @@
 
     @Override
     public void doOut(
+            DiagramGenerator generator,
+            ArtifactAndFacet aaf,
+            ThemeDocument    theme,
+            boolean          visible) {
+        if (!visible) {
+            // Nothing to do
+            return;
+        }
+        CallContext context = generator.getCallContext();
+        if (!(aaf.getData(context) instanceof RiverAnnotation)) {
+            // Just a bit defensive should not happen
+            logger.error("Incompatible facet in doOut");
+            return;
+        }
+        RiverAnnotation ra = (RiverAnnotation)aaf.getData(context);
+        ra.setTheme(theme);
+        ra.setLabel(aaf.getFacetDescription());
+        generator.addAnnotations(ra);
+    }
+
+    @Override
+    public void doOut(
             XYChartGenerator generator,
             ArtifactAndFacet aaf,
             ThemeDocument    theme,
--- a/artifacts/src/main/java/org/dive4elements/river/exports/process/WOutProcessor.java	Fri Sep 20 12:35:14 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/WOutProcessor.java	Fri Sep 20 14:54:26 2013 +0200
@@ -17,6 +17,7 @@
 import org.dive4elements.river.artifacts.model.WKms;
 import org.dive4elements.river.exports.StyledSeriesBuilder;
 import org.dive4elements.river.exports.XYChartGenerator;
+import org.dive4elements.river.exports.DiagramGenerator;
 import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
 import org.dive4elements.river.jfree.StyledXYSeries;
 import org.dive4elements.river.themes.ThemeDocument;
@@ -35,6 +36,48 @@
 
     @Override
     public void doOut(
+            DiagramGenerator generator,
+            ArtifactAndFacet aaf,
+            ThemeDocument    theme,
+            boolean          visible) {
+        CallContext context = generator.getCallContext();
+        WKms wkms = (WKms) aaf.getData(context);
+
+        logger.debug("doOut");
+
+        XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme);
+
+        StyledSeriesBuilder.addPoints(series, wkms);
+        generator.addAxisSeries(series, axisName, visible);
+
+        // If a "band around the curve shall be drawn, add according area.
+        double bandWidth = theme.parseBandWidth();
+        if (bandWidth > 0 ) {
+            XYSeries seriesDown = new StyledXYSeries(
+                "band " + aaf.getFacetDescription(), false, theme);
+            XYSeries seriesUp = new StyledXYSeries(
+                aaf.getFacetDescription()+"+/-"+bandWidth, false, theme);
+            StyledSeriesBuilder.addUpperBand(seriesUp, wkms, bandWidth);
+            StyledSeriesBuilder.addLowerBand(seriesDown, wkms, bandWidth);
+
+            StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme);
+            area.addSeries(seriesUp);
+            area.addSeries(seriesDown);
+            area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN);
+            generator.addAreaSeries(area, axisName, visible);
+        }
+
+        if (aaf.getFacetName().equals(FacetTypes.LONGITUDINAL_W) ||
+            aaf.getFacetName().equals(FacetTypes.DISCHARGE_LONGITUDINAL_W) ||
+            aaf.getFacetName().equals(FacetTypes.STATIC_WQKMS_W)) {
+            /* Only use W values to check if the diagram should be inverted
+             * see flys/issue1290 for details */
+            invertAxis(generator, wkms);
+        }
+    }
+
+    @Override
+    public void doOut(
             XYChartGenerator generator,
             ArtifactAndFacet aaf,
             ThemeDocument    theme,
@@ -106,6 +149,7 @@
      * @param wkms The data object that stores the x and y values used for this
      * chart.
      */
+    // TODO Remove
     public void invertAxis(XYChartGenerator generator, WKms wkms) {
         boolean wsUp = wkms.guessWaterIncreasing();
         boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms());
@@ -127,5 +171,26 @@
         }
         generator.setInverted(inv);
     }
+    public void invertAxis(DiagramGenerator generator, WKms wkms) {
+        boolean wsUp = wkms.guessWaterIncreasing();
+        boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms());
+        int size = wkms.size();
+        boolean inv = ((wsUp && kmUp) || (!wsUp && !kmUp)) && size > 1;
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("(Wkms)Values  : " + size);
+            if (size > 0) {
+                logger.debug("Start km: " + wkms.getKm(0));
+                logger.debug("End   km: " + wkms.getKm(size-1));
+            }
+            logger.debug("wsUp: " + wsUp);
+            logger.debug("kmUp: " + kmUp);
+            if (size == 1) {
+                logger.debug("InvertAxis not inverting because we have just one km");
+        }
+            logger.debug("inv:  " + inv);
+        }
+        generator.setInverted(inv);
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org