Mercurial > dive4elements > river
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 :