diff artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator.java @ 6794:23ab795f2f0e longitudinal-symmetry

Moved most of the functionality of FlowVelocityGenerator to LongitudinalSectionGenerator on the way to longitudinal-section symmetry. ToDos left.
author Tom Gottfried <tom@intevation.de>
date Fri, 09 Aug 2013 12:11:53 +0200
parents dd5355775ce1
children 7089f338138a
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator.java	Thu Aug 08 17:36:44 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator.java	Fri Aug 09 12:11:53 2013 +0200
@@ -8,6 +8,8 @@
 
 package org.dive4elements.river.exports;
 
+import java.util.Arrays;
+
 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.river.artifacts.D4EArtifact;
@@ -23,6 +25,12 @@
 import org.dive4elements.river.exports.process.BedheightProcessor;
 import org.dive4elements.river.exports.process.WOutProcessor;
 
+import org.dive4elements.river.artifacts.access.FlowVelocityAccess;
+import org.dive4elements.river.artifacts.model.FlowVelocityData;
+import org.dive4elements.river.model.FlowVelocityMeasurementValue;
+
+import org.dive4elements.river.jfree.Bounds;
+import org.dive4elements.river.jfree.DoubleBounds;
 import org.dive4elements.river.jfree.RiverAnnotation;
 import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
 import org.dive4elements.river.jfree.StyledXYSeries;
@@ -46,9 +54,12 @@
 implements   FacetTypes
 {
     public enum YAXIS {
-        W(0),
-        D(1),
-        Q(2);
+        W(0), // waterlevel
+        D(1), // waterlevel-difference
+        Q(2), // discharge
+        V(3), // flow velocity
+        T(4), // tau (shear stress)
+        O(3); // diameter
         protected int idx;
         private YAXIS(int c) {
             idx = c;
@@ -67,8 +78,13 @@
      * Key to look up internationalized String for LongitudinalSection diagrams
      * titles.
      */
+    /** TODO:
+     * create a class which extends this one to avoid following definition here 
+     */
     public static final String I18N_CHART_TITLE =
         "chart.longitudinal.section.title";
+    public static final String I18N_CHART_TITLE_DEFAULT  = 
+	"L\u00e4ngsschnitt";
 
     /**
      * Key to look up internationalized String for LongitudinalSection diagrams
@@ -84,24 +100,32 @@
     public static final String I18N_CHART_SHORT_SUBTITLE =
         "chart.longitudinal.section.shortsubtitle";
 
+    /**
+     * Key to look up internationalized String for LongitudinalSection diagrams
+     * X-axis title.
+     */
     public static final String I18N_XAXIS_LABEL =
         "chart.longitudinal.section.xaxis.label";
-
-    public static final String I18N_YAXIS_LABEL =
-        "chart.longitudinal.section.yaxis.label";
-
-    public static final String I18N_2YAXIS_LABEL =
-        "chart.longitudinal.section.yaxis.second.label";
+    public static final String I18N_XAXIS_LABEL_DEFAULT  = 
+	"km";
 
-    public static final String I18N_CHART_TITLE_DEFAULT  = "W-L\u00e4ngsschnitt";
-    public static final String I18N_XAXIS_LABEL_DEFAULT  = "km";
-    public static final String I18N_YAXIS_LABEL_DEFAULT  = "W [NN + m]";
-    public static final String I18N_2YAXIS_LABEL_DEFAULT = "Q [m\u00b3/s]";
+    /**
+     * Key to look up internationalized String for LongitudinalSection diagrams
+     * Y-axis titles.
+     */
+    public static final String I18N_YAXIS_LABEL_W =
+        "chart.longitudinal.section.yaxis.label.w";
+    public static final String I18N_YAXIS_LABEL_Q =
+        "chart.longitudinal.section.yaxis.label.q";
+    public static final String I18N_YAXIS_LABEL_D =
+        "chart.w_differences.yaxis.label";
+    public static final String I18N_YAXIS_LABEL_V =
+        "chart.flow_velocity.section.yaxis.label";
+    public static final String I18N_YAXIS_LABEL_T =
+        "chart.flow_velocity.section.yaxis.second.label";
+    public static final String I18N_YAXIS_LABEL_DEFAULT  = 
+	"Y-axis";
 
-    public final static String I18N_WDIFF_YAXIS_LABEL =
-        "chart.w_differences.yaxis.label";
-
-    public final static String I18N_WDIFF_YAXIS_LABEL_DEFAULT = "m";
 
     public LongitudinalSectionGenerator() {
         super();
@@ -218,36 +242,43 @@
     }
 
 
-    @Override
-    protected String getDefaultYAxisLabel(int index) {
-        String label = "default";
-
-        if (index == YAXIS.W.idx) {
-            label = getWAxisLabel();
-        }
-        else if (index == YAXIS.Q.idx) {
-            label = msg(getQAxisLabelKey(), getQAxisDefaultLabel());
-        }
-        else if (index == YAXIS.D.idx) {
-            label = msg(I18N_WDIFF_YAXIS_LABEL, I18N_WDIFF_YAXIS_LABEL_DEFAULT);
-        }
-
-        return label;
-    }
-
-
     /**
      * Get internationalized label for the y axis.
      */
-    protected String getWAxisLabel() {
+    @Override
+    protected String getDefaultYAxisLabel(int index) {
+
         D4EArtifact flys = (D4EArtifact) master;
-
         String unit = RiverUtils.getRiver(flys).getWstUnit().getName();
 
-        return msg(
-            I18N_YAXIS_LABEL,
-            I18N_YAXIS_LABEL_DEFAULT,
-            new Object[] { unit });
+        if (index == YAXIS.W.idx) {
+	    return msg(
+	        I18N_YAXIS_LABEL_W,
+		I18N_YAXIS_LABEL_DEFAULT,
+		new Object[] { unit });
+        }
+        if (index == YAXIS.Q.idx) {
+            return msg(
+	        I18N_YAXIS_LABEL_Q,
+		I18N_YAXIS_LABEL_DEFAULT);
+        }
+        if (index == YAXIS.D.idx) {
+            return msg(
+                I18N_YAXIS_LABEL_D, 
+		I18N_YAXIS_LABEL_DEFAULT);
+        }
+        if (index == YAXIS.V.idx) {
+            return msg(
+                I18N_YAXIS_LABEL_V, 
+		I18N_YAXIS_LABEL_DEFAULT);
+        }
+        if (index == YAXIS.T.idx) {
+            return msg(
+                I18N_YAXIS_LABEL_T, 
+		I18N_YAXIS_LABEL_DEFAULT);
+        }
+
+        return "default";
     }
 
 
@@ -272,23 +303,6 @@
 
 
     /**
-     * Get default value for the second Y-Axis' label (if no translation was
-     * found).
-     */
-    protected String getQAxisDefaultLabel() {
-        return I18N_2YAXIS_LABEL_DEFAULT;
-    }
-
-
-    /**
-     * Get key for internationalization of the second Y-Axis' label.
-     */
-    protected String getQAxisLabelKey() {
-        return I18N_2YAXIS_LABEL;
-    }
-
-
-    /**
      * Trigger inversion.
      */
     @Override
@@ -399,6 +413,92 @@
                 visible,
                 YAXIS.W.idx);
         }
+
+	/* output for flow velocity */
+        if (getXBounds(0) != null && getDomainAxisRange() != null) {
+            logger.debug(Arrays.toString(getDomainAxisRangeFromRequest()));
+            Bounds bounds =
+                calculateZoom(getXBounds(0), getDomainAxisRange());
+            context.putContextValue("startkm", bounds.getLower());
+            context.putContextValue("endkm", bounds.getUpper());
+        }
+        else if (getXBounds(0) != null && getDomainAxisRange() == null) {
+            context.putContextValue("startkm", getXBounds(0).getLower());
+            context.putContextValue("endkm", getXBounds(0).getUpper());
+        }
+        else if (getXBounds(0) == null && getDomainAxisRange() == null) {
+            D4EArtifact artifact = (D4EArtifact)artifactAndFacet.getArtifact();
+            FlowVelocityAccess access = new FlowVelocityAccess(artifact);
+            context.putContextValue("startkm", access.getLowerKM());
+            context.putContextValue("endkm", access.getUpperKM());
+        }
+        else if (getXBounds(0) == null && getDomainAxisRange() != null){
+            D4EArtifact artifact = (D4EArtifact)artifactAndFacet.getArtifact();
+            FlowVelocityAccess access = new FlowVelocityAccess(artifact);
+            Bounds b = new DoubleBounds(access.getLowerKM(), access.getUpperKM());
+            Bounds bounds =
+                calculateZoom(b, getDomainAxisRange());
+            context.putContextValue("startkm", bounds.getLower());
+            context.putContextValue("endkm", bounds.getUpper());
+        }
+        if (name.equals(FLOW_VELOCITY_MAINCHANNEL)) {
+            doMainChannelOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_TOTALCHANNEL)) {
+            doTotalChannelOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_MAINCHANNEL_FILTERED)) {
+            doMainChannelOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_TOTALCHANNEL_FILTERED)) {
+            doTotalChannelOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_DISCHARGE)) {
+            doQOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_TAU)) {
+            doTauOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_TAU_FILTERED)) {
+            doTauOut(
+                (FlowVelocityData) artifactAndFacet.getData(context),
+                artifactAndFacet,
+                attr,
+                visible);
+        }
+        else if (name.equals(FLOW_VELOCITY_MEASUREMENT)) {
+            doVPointOut(
+                 artifactAndFacet.getData(context),
+                 artifactAndFacet,
+                 attr,
+                 visible);
+        }
+
+
         else {
             logger.warn("Unknown facet name: " + name);
             return;
@@ -521,6 +621,12 @@
         else if (FacetTypes.IS.Q(facetName)) {
             return YAXIS.Q.idx;
         }
+        else if (FacetTypes.IS.V(facetName)) {
+            return YAXIS.V.idx;
+        }
+        else if (FacetTypes.IS.T(facetName)) {
+            return YAXIS.T.idx;
+        }
         else {
             logger.warn("Could not find axis for facet " + facetName);
             return YAXIS.W.idx;
@@ -627,5 +733,123 @@
         // Add area to the respective axis.
         addAreaSeries(area, axisIdxForFacet(data.getRootFacetName()), visible);
     }
+
+
+    /**
+     * flow velocity specific outs
+     */
+
+    /**
+     * Process the output for flow velocity in main channel in a longitudinal section curve.
+     *
+     * @param data A FlowVelocityData object
+     * @param aandf The facet. This facet does NOT support any data objects. Use
+     * D4EArtifact.getNativeFacet() instead to retrieve a Facet which supports
+     * data.
+     * @param theme The theme that contains styling information.
+     * @param visible The visibility of the curve.
+     */
+    protected void doMainChannelOut(
+        FlowVelocityData data,
+        ArtifactAndFacet aandf,
+        Document         theme,
+        boolean          visible
+    ) {
+        logger.debug("FlowVelocityGenerator.doMainChannelOut");
+
+        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
+
+        StyledSeriesBuilder.addPoints(series, data.getMainChannelPoints(), true);
+
+        addAxisSeries(series, YAXIS.V.idx, visible);
+    }
+
+    /**
+     * Process the output for flow velocity in total channel in a longitudinal section curve.
+     */
+    protected void doTotalChannelOut(
+        FlowVelocityData data,
+        ArtifactAndFacet aandf,
+        Document         theme,
+        boolean          visible
+    ) {
+        logger.debug("FlowVelocityGenerator.doTotalChannelOut");
+
+        if (data == null) {
+            logger.warn("No data to add to FlowVelocity chart.");
+            return;
+         }
+
+        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
+
+        StyledSeriesBuilder.addPoints(series, data.getTotalChannelPoints(), true);
+
+        addAxisSeries(series, YAXIS.V.idx, visible);
+    }
+
+    /**
+     * @param data A FlowVelocityData object
+     * @param aandf The facet. This facet does NOT support any data objects. Use
+     * D4EArtifact.getNativeFacet() instead to retrieve a Facet which supports
+     * data.
+     * @param theme The theme that contains styling information.
+     * @param visible The visibility of the curve.
+     */
+    protected void doTauOut(
+        FlowVelocityData data,
+        ArtifactAndFacet aandf,
+        Document         theme,
+        boolean          visible
+    ) {
+        logger.debug("FlowVelocityGenerator.doTauOut");
+
+        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
+
+        StyledSeriesBuilder.addPoints(series, data.getTauPoints(), true);
+
+        addAxisSeries(series, YAXIS.T.idx, visible);
+    }
+
+    protected void doVPointOut (
+        Object data,
+        ArtifactAndFacet aandf,
+        Document         theme,
+        boolean          visible
+    ) {
+        logger.debug("FlowVelocityGenerator.doVPointOut");
+
+        XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
+
+        FlowVelocityMeasurementValue.FastFlowVelocityMeasurementValue
+            value = (FlowVelocityMeasurementValue.FastFlowVelocityMeasurementValue)
+                data;
+
+        StyledSeriesBuilder.addPoints(series, new double[][] {{value.getStation()},{value.getV()}}, true);
+
+        addAxisSeries(series, YAXIS.V.idx, visible);
+    }
+
+    /**
+     * @param data A FlowVelocityData object
+     * @param aandf The facet. This facet does NOT support any data objects. Use
+     * D4EArtifact.getNativeFacet() instead to retrieve a Facet which supports
+     * data.
+     * @param theme The theme that contains styling information.
+     * @param visible The visibility of the curve.
+     */
+    protected void doQOut(
+        FlowVelocityData data,
+	ArtifactAndFacet aandf,
+	Document         theme,
+        boolean          visible
+	) {
+	logger.debug("FlowVelocityGenerator.doTauOut");
+
+	XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme);
+	
+	StyledSeriesBuilder.addPoints(series, data.getQPoints(), true);
+
+	addAxisSeries(series, YAXIS.Q.idx, visible);
+	}
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org