Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/WDifferencesCurveGenerator.java @ 1640:fb296bdf815f
Improved w-differences diagram generation with included 'absolute' values.
flys-artifacts/trunk@2825 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 26 Sep 2011 13:37:30 +0000 |
parents | d1b20d0e9eb4 |
children | 614ffddb860e |
line wrap: on
line source
package de.intevation.flys.exports; import org.apache.log4j.Logger; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.title.TextTitle; import org.jfree.data.xy.XYSeries; import org.w3c.dom.Document; import de.intevation.artifacts.Artifact; import de.intevation.artifactdatabase.state.Facet; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.WKms; import de.intevation.flys.utils.DataUtil; import de.intevation.flys.model.Gauge; import de.intevation.flys.model.River; import de.intevation.flys.artifacts.WINFOArtifact; import de.intevation.flys.artifacts.model.WQKms; import de.intevation.flys.utils.FLYSUtils; /** * An OutGenerator that generates w differences curves. */ public class WDifferencesCurveGenerator extends LongitudinalSectionGenerator implements FacetTypes { /** The logger that is used in this generator. */ private static Logger logger = Logger.getLogger(WDifferencesCurveGenerator.class); public static final String I18N_CHART_TITLE = "chart.w_differences.title"; public static final String I18N_CHART_SUBTITLE = "chart.w_differences.subtitle"; public static final String I18N_2YAXIS_LABEL = "chart.w_differences.yaxis.second.label"; // TODO proper i18n. public static final String I18N_CHART_TITLE_DEFAULT = "W-Differenzen"; public static final String I18N_XAXIS_LABEL_DEFAULT = "km"; public static final String I18N_YAXIS_LABEL_DEFAULT = "W [m]"; /** * Add a subtitle to Chart. * @param chart Chart to add subtitle to. */ @Override protected void addSubtitles(JFreeChart chart) { String subtitle = msg(I18N_CHART_SUBTITLE, ""); chart.addSubtitle(new TextTitle(subtitle)); } /** * Add (themed) data for chart generation. */ public void doOut(Artifact artifact, Facet facet, Document attr) { String name = facet.getName(); logger.debug("WDifferencesCurveGenerator.doOut: " + name); if (name == null) { logger.error("No facet name for doOut(). No output generated!"); return; } FLYSArtifact flys = (FLYSArtifact) artifact; Facet f = flys.getNativeFacet(facet); if (f == null) { return; } if (name.equals(W_DIFFERENCES)) { doWDifferencesOut((WKms) f.getData(artifact, context), f.getDescription(), attr); } else if (name.equals(LONGITUDINAL_W)) { WINFOArtifact flysArtifact = (WINFOArtifact) artifact; facet = flysArtifact.getNativeFacet(facet); doWaterlevelOut((WQKms) facet.getData(artifact, context), f.getDescription(), attr, flysArtifact); } else { logger.warn("Unknown facet name: " + name); return; } } /** * Add the waterlevel-curves (the "absolutes" from which * differences were calculated). * @param wqkms The wqkms to add to the diagram. */ public void doWaterlevelOut(WQKms wqkms, String description, Document theme, WINFOArtifact flysArtifact) { String wqkmsName = wqkms.getName(); River river = FLYSUtils.getRiver(flysArtifact); if (river == null) { logger.warn("no river found"); return; } logger.debug("WDifferencesCurveGenerator.doWaterlevelOut, gauge: " + wqkmsName); /* Gauge gauge = river.determineGaugeByName(wqkmsName); if (gauge == null) { logger.warn("no gauge found"); return; } */ double [][] values = new double [][] { wqkms.getKms(), wqkms.getWs() }; int size = values != null ? values[0].length : 0; String seriesName = wqkmsName; //getSeriesName(gauge); XYSeries series = new StyledXYSeries(seriesName, theme); for (int i = 0; i < size; i++) { series.add(values[0][i], values[1][i]); } addSecondAxisSeries(series); } /** * Add items to dataseries which describes the differences. */ protected void doWDifferencesOut(WKms wkms, String seriesName, Document theme) { logger.debug("WDifferencesCurveGenerator.doWDifferencesOut"); if (wkms == null) { logger.warn("No data to add to WDifferencesChart."); return; } int size = wkms.size(); XYSeries series = new StyledXYSeries(seriesName, theme); if (logger.isDebugEnabled()) { if (wkms.size() > 0) { logger.debug("Generate series: " + series.getKey()); logger.debug("Start km: " + wkms.getKm(0)); logger.debug("End km: " + wkms.getKm(size-1)); logger.debug("Values : " + size); } } for (int i = 0; i < size; i++) { series.add(wkms.getKm(i), wkms.getW(i)); } addFirstAxisSeries(series); if (DataUtil.guessWaterIncreasing(wkms)) { setInverted(true); } } /** * */ @Override public JFreeChart generateChart() { JFreeChart chart = super.generateChart(); if (chart != null && chart.getPlot() != null) { XYPlot plot = (XYPlot) chart.getPlot(); plot.setRangeZeroBaselineVisible(true); } return chart; } /** * Get name of series (displayed in legend). * @return name of the series. */ protected String getSeriesName(WKms wqkms, String mode) { String name = wqkms.getName(); String prefix = (name != null && name.indexOf(mode) >= 0) ? null : mode; return (prefix != null && prefix.length() > 0) ? prefix + "(" + name +")" : name; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :