teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.exports; ingo@4242: ingo@4242: import org.apache.log4j.Logger; ingo@4242: import org.jfree.data.xy.XYSeries; ingo@4242: teichmann@5831: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.HistoricalDischargeAccess; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.Timerange; teichmann@5831: import org.dive4elements.river.artifacts.model.WQKms; felix@5414: teichmann@5864: import org.dive4elements.river.jfree.RiverAnnotation; teichmann@5831: import org.dive4elements.river.jfree.StyledValueMarker; teichmann@5831: import org.dive4elements.river.jfree.StyledXYSeries; teichmann@6905: import org.dive4elements.river.themes.ThemeDocument; teichmann@5865: import org.dive4elements.river.utils.RiverUtils; ingo@4242: ingo@4242: ingo@4242: /** ingo@4242: * @author Ingo Weinzierl ingo@4242: */ felix@4337: public class HistoricalDischargeWQCurveGenerator felix@4337: extends XYChartGenerator felix@4337: implements FacetTypes { ingo@4242: felix@4337: /** Private logger. */ ingo@4242: private static Logger logger = Logger ingo@4242: .getLogger(HistoricalDischargeWQCurveGenerator.class); ingo@4242: ingo@4242: public static final String I18N_CHART_TITLE = "chart.historical.discharge.wq.title"; ingo@4242: ingo@4242: public static final String I18N_CHART_SUBTITLE = "chart.historical.discharge.wq.subtitle"; ingo@4242: ingo@4242: public static final String I18N_XAXIS_LABEL = "chart.historical.discharge.wq.xaxis.label"; ingo@4242: ingo@4242: public static final String I18N_YAXIS_LABEL = "chart.historical.discharge.wq.yaxis.label"; ingo@4242: felix@4337: /** One Y-Axis only, in this chart. */ ingo@4242: public static enum YAXIS { ingo@4242: W(0); ingo@4242: ingo@4242: protected int idx; ingo@4242: ingo@4242: private YAXIS(int c) { ingo@4242: idx = c; ingo@4242: } ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: protected YAxisWalker getYAxisWalker() { ingo@4242: return new YAxisWalker() { ingo@4242: ingo@4242: @Override ingo@4242: public int length() { ingo@4242: return YAXIS.values().length; ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: public String getId(int idx) { ingo@4242: YAXIS[] yaxes = YAXIS.values(); ingo@4242: return yaxes[idx].toString(); ingo@4242: } ingo@4242: }; ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: protected String getDefaultChartTitle() { ingo@4242: return msg(I18N_CHART_TITLE, I18N_CHART_TITLE); ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: protected String getDefaultChartSubtitle() { teichmann@5867: D4EArtifact flys = (D4EArtifact) master; ingo@4242: Timerange evalTime = new HistoricalDischargeAccess(flys) ingo@4242: .getEvaluationTimerange(); ingo@4242: teichmann@5865: Object[] args = new Object[] { RiverUtils.getReferenceGaugeName(flys), ingo@4242: evalTime.getStart(), evalTime.getEnd() }; ingo@4242: ingo@4242: return msg(I18N_CHART_SUBTITLE, "", args); ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: protected String getDefaultXAxisLabel() { ingo@4242: return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL); ingo@4242: } ingo@4242: ingo@4242: @Override ingo@4242: protected String getDefaultYAxisLabel(int pos) { ingo@4242: if (pos == 0) { ingo@4242: return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL); ingo@4242: } ingo@4242: else { ingo@4242: return "NO TITLE FOR Y AXIS: " + pos; ingo@4242: } ingo@4242: } ingo@4242: ingo@4242: @Override teichmann@6905: public void doOut(ArtifactAndFacet artifactFacet, ThemeDocument theme, ingo@4242: boolean visible) { ingo@4242: String name = artifactFacet.getFacetName(); ingo@4242: logger.debug("HistoricalDischargeWQCurveGenerator.doOut: " + name); ingo@4242: logger.debug("Theme description is: " ingo@4242: + artifactFacet.getFacetDescription()); ingo@4242: ingo@4242: if (name.equals(HISTORICAL_DISCHARGE_WQ_Q)) { ingo@4242: doHistoricalDischargeOutQ( teichmann@5867: (D4EArtifact) artifactFacet.getArtifact(), ingo@4242: artifactFacet.getData(context), ingo@4242: artifactFacet.getFacetDescription(), theme, visible); ingo@4242: } ingo@4242: else if (name.equals(HISTORICAL_DISCHARGE_WQ_W)) { ingo@4242: doHistoricalDischargeOutW( teichmann@5867: (D4EArtifact) artifactFacet.getArtifact(), ingo@4242: artifactFacet.getData(context), ingo@4242: artifactFacet.getFacetDescription(), theme, visible); ingo@4242: } aheinecke@6850: else if (name.equals(HISTORICAL_DISCHARGE_WQ_CURVE) || aheinecke@6850: name.equals(DISCHARGE_CURVE) || aheinecke@6850: name.equals(GAUGE_DISCHARGE_CURVE)) { ingo@4242: doHistoricalDischargeCurveOut( teichmann@5867: (D4EArtifact) artifactFacet.getArtifact(), ingo@4242: artifactFacet.getData(context), ingo@4242: artifactFacet.getFacetDescription(), theme, visible); ingo@4242: } ingo@4242: else if (FacetTypes.IS.MANUALPOINTS(name)) { ingo@4242: doPoints(artifactFacet.getData(context), artifactFacet, theme, ingo@4242: visible, YAXIS.W.idx); ingo@4242: } aheinecke@6716: else if (name.equals(MAINVALUES_W) || aheinecke@6716: name.equals(MAINVALUES_Q) || aheinecke@6716: HISTORICAL_DISCHARGE_MAINVALUES_Q.equals(name) || aheinecke@6716: HISTORICAL_DISCHARGE_MAINVALUES_W.equals(name)) { teichmann@5864: doAnnotations((RiverAnnotation) felix@5414: artifactFacet.getData(context), artifactFacet, theme, visible); felix@5414: } ingo@4242: else { ingo@4242: logger.warn("doOut(): unknown facet name: " + name); ingo@4242: return; ingo@4242: } ingo@4242: } ingo@4242: teichmann@5867: protected void doHistoricalDischargeOutQ(D4EArtifact artifact, teichmann@6905: Object data, String desc, ThemeDocument theme, boolean visible) { ingo@4282: double value = Double.valueOf(data.toString()); ingo@4282: addDomainMarker(new StyledValueMarker(value, theme), visible); ingo@4242: } ingo@4242: teichmann@5867: protected void doHistoricalDischargeOutW(D4EArtifact artifact, teichmann@6905: Object data, String desc, ThemeDocument theme, boolean visible) { ingo@4282: double value = Double.valueOf(data.toString()); ingo@4282: addValueMarker(new StyledValueMarker(value, theme), visible); ingo@4242: } ingo@4242: teichmann@5867: protected void doHistoricalDischargeCurveOut(D4EArtifact artifact, teichmann@6905: Object data, String desc, ThemeDocument theme, boolean visible) { ingo@4242: XYSeries series = new StyledXYSeries(desc, theme); ingo@4242: StyledSeriesBuilder.addPointsQW(series, (WQKms) data); ingo@4242: ingo@4242: addAxisSeries(series, YAXIS.W.idx, visible); ingo@4242: } ingo@4242: } ingo@4242: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :