ingo@299: package de.intevation.flys.exports; ingo@299: ingo@299: import org.apache.log4j.Logger; ingo@299: felix@1933: import java.awt.Font; felix@1933: ingo@299: import org.w3c.dom.Document; ingo@299: ingo@375: import org.jfree.chart.JFreeChart; felix@1933: import org.jfree.chart.axis.NumberAxis; ingo@728: import org.jfree.chart.axis.ValueAxis; ingo@375: import org.jfree.chart.plot.XYPlot; ingo@728: import org.jfree.data.Range; ingo@923: import org.jfree.data.xy.XYSeries; ingo@299: ingo@299: import de.intevation.artifacts.Artifact; ingo@299: felix@1944: import de.intevation.artifactdatabase.state.ArtifactAndFacet; ingo@695: import de.intevation.artifactdatabase.state.Facet; ingo@695: felix@1812: import de.intevation.flys.artifacts.model.FacetTypes; ingo@299: import de.intevation.flys.model.Gauge; ingo@381: import de.intevation.flys.model.River; ingo@299: felix@1812: import de.intevation.flys.artifacts.FLYSArtifact; sascha@1055: import de.intevation.flys.artifacts.WINFOArtifact; ingo@299: sascha@721: import de.intevation.flys.artifacts.model.WQKms; ingo@299: felix@1103: import de.intevation.flys.utils.FLYSUtils; felix@1812: import de.intevation.flys.jfree.FLYSAnnotation; felix@1103: ingo@299: /** ingo@299: * An OutGenerator that generates discharge curves. ingo@299: * ingo@299: * @author Ingo Weinzierl ingo@299: */ felix@1812: public class DischargeCurveGenerator felix@1812: extends XYChartGenerator felix@1812: implements FacetTypes { ingo@299: felix@1933: public static enum YAXIS { felix@1933: W(0); felix@1933: protected int idx; felix@1933: private YAXIS(int c) { felix@1933: idx = c; felix@1933: } felix@1933: } felix@1933: felix@1070: /** The logger used in this generator. */ ingo@299: private static Logger logger = ingo@299: Logger.getLogger(DischargeCurveGenerator.class); ingo@299: ingo@408: public static final String I18N_CHART_TITLE = ingo@408: "chart.discharge.curve.title"; ingo@408: ingo@414: public static final String I18N_CHART_SUBTITLE = ingo@414: "chart.discharge.curve.subtitle"; ingo@414: ingo@408: public static final String I18N_XAXIS_LABEL = ingo@408: "chart.discharge.curve.xaxis.label"; ingo@408: ingo@408: public static final String I18N_YAXIS_LABEL = ingo@408: "chart.discharge.curve.yaxis.label"; ingo@408: ingo@408: public static final String I18N_CHART_TITLE_DEFAULT = "Abflusskurven"; sascha@664: public static final String I18N_XAXIS_LABEL_DEFAULT = "Q [m\u00b3/s]"; ingo@408: public static final String I18N_YAXIS_LABEL_DEFAULT = "W [cm]"; ingo@408: ingo@408: ingo@299: public DischargeCurveGenerator() { ingo@348: super(); ingo@299: } ingo@299: ingo@299: ingo@369: protected String getChartTitle() { ingo@408: return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); ingo@369: } ingo@369: ingo@369: felix@1812: /** felix@1812: * Empty (suppress subtitle). felix@1812: */ ingo@414: @Override ingo@414: protected void addSubtitles(JFreeChart chart) { ingo@414: } ingo@414: ingo@414: felix@1933: /** felix@1933: * i18n-Label for X-Axis. felix@1933: */ ingo@369: protected String getXAxisLabel() { ingo@408: return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); ingo@369: } ingo@369: felix@1933: /** felix@1933: * i18n-Label for X-Axis (W). felix@1933: */ ingo@369: protected String getYAxisLabel() { ingo@408: return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); ingo@369: } ingo@369: ingo@369: ingo@728: @Override ingo@728: protected boolean zoomX(XYPlot plot, ValueAxis axis, Range range, Range x) { ingo@728: boolean zoomin = super.zoom(plot, axis, range, x); ingo@728: ingo@728: if (!zoomin) { ingo@728: axis.setLowerBound(0d); ingo@728: } ingo@728: ingo@728: return zoomin; ingo@728: } ingo@728: felix@1933: /** felix@1933: * Create Y-Axis. felix@1933: * First Axis: W. felix@1933: * @return Y-Axis with label. felix@1933: */ felix@1933: @Override felix@1933: protected NumberAxis createYAxis(int index) { felix@1933: Font labelFont = new Font("Tahoma", Font.BOLD, 14); felix@1933: String label = "default"; felix@1933: if (index == YAXIS.W.idx) { felix@1933: label = getYAxisLabel(); felix@1933: } felix@1933: NumberAxis axis = new NumberAxis(label); felix@1933: axis.setLabelFont(labelFont); felix@1943: axis.setAutoRangeIncludesZero(false); felix@1933: return axis; felix@1933: } felix@1933: ingo@728: ingo@1684: public void doOut( felix@1944: ArtifactAndFacet artifactFacet, felix@1944: Document theme, felix@1944: boolean visible ingo@1684: ) { felix@1944: String name = artifactFacet.getFacetName(); felix@1944: logger.debug("DischargeCurveGenerator.doOut: " + name); ingo@299: ingo@299: felix@1812: if (name.equals(DISCHARGE_CURVE)) { felix@1812: doDischargeOut( felix@1944: (WINFOArtifact) artifactFacet.getArtifact(), felix@1944: artifactFacet.getData(context), felix@1944: artifactFacet.getFacetDescription(), felix@1812: theme, felix@1812: visible); felix@1812: } felix@1812: else if (name.equals(COMPUTED_DISCHARGE_MAINVALUES_Q) felix@1848: || name.equals(MAINVALUES_Q) felix@1848: || name.equals(COMPUTED_DISCHARGE_MAINVALUES_W) felix@1812: || name.equals(MAINVALUES_W)) felix@1812: { felix@1944: doAnnotations((FLYSAnnotation) artifactFacet.getData(context), felix@1944: artifactFacet.getFacet(), theme, visible); felix@1812: } felix@1812: else { felix@1812: logger.warn("DischargeCurveGenerator.doOut: Unknown facet name: " + name); felix@1812: return; felix@1812: } felix@1812: } felix@1812: felix@1812: felix@1812: /** felix@1812: * Add series with discharge curve to diagram. felix@1812: */ felix@1812: protected void doDischargeOut( felix@1812: WINFOArtifact artifact, felix@1944: Object o, felix@1944: String description, felix@1944: Document theme, felix@1944: boolean visible) felix@1812: { felix@1812: WQKms wqkms = (WQKms) o; sascha@721: sascha@721: String gaugeName = wqkms.getName(); sascha@721: felix@1812: River river = FLYSUtils.getRiver(artifact); sascha@721: sascha@721: if (river == null) { sascha@721: logger.debug("no river found"); sascha@721: return; ingo@299: } ingo@299: sascha@721: Gauge gauge = river.determineGaugeByName(gaugeName); ingo@299: sascha@721: if (gauge == null) { sascha@721: logger.debug("no gauge found"); sascha@721: return; sascha@721: } ingo@454: felix@1812: XYSeries series = new StyledXYSeries(description, theme); ingo@923: felix@1812: StyledSeriesBuilder.addPointsQW(series, wqkms); ingo@923: felix@1933: addAxisSeries(series, YAXIS.W.idx, visible); ingo@299: } ingo@299: } ingo@299: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :