Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/exports/LongitudinalSectionGenerator.java @ 369:2ce7b473620e
Implemented the chart creation of a longitudinal section chart - W and Q facets.
flys-artifacts/trunk@1778 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 29 Apr 2011 10:13:24 +0000 |
parents | 8830eecad69e |
children | 60f63539d004 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/LongitudinalSectionGenerator.java Fri Apr 29 10:02:59 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/LongitudinalSectionGenerator.java Fri Apr 29 10:13:24 2011 +0000 @@ -1,10 +1,10 @@ package de.intevation.flys.exports; -import java.io.IOException; - import org.apache.log4j.Logger; -import org.jfree.data.xy.DefaultXYDataset; +import org.jfree.data.xy.XYDataset; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; import org.w3c.dom.Document; @@ -19,39 +19,162 @@ * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ -public class LongitudinalSectionGenerator extends ChartGenerator { +public class LongitudinalSectionGenerator extends XYChartGenerator { /** The logger that is used in this generator.*/ private static Logger logger = Logger.getLogger(LongitudinalSectionGenerator.class); - protected DefaultXYDataset dataset; + public static final String LONGITUDINAL_SECTION_W = + "longitudinal_section.w"; + + public static final String LONGITUDINAL_SECTION_Q = + "longitudinal_section.q"; + + + /** The storage for the series to be drawn in this chart.*/ + protected XYSeriesCollection dataset; public LongitudinalSectionGenerator() { super(); - this.dataset = new DefaultXYDataset(); + this.dataset = new XYSeriesCollection(); + } + + + protected String getChartTitle() { + // TODO i18n + return "Wasserstand für Gewässer"; + } + + + protected String getXAxisLabel() { + return "km"; + } + + + protected String getYAxisLabel() { + return "W [NN + m]"; + } + + + protected XYDataset getXYDataset() { + return dataset; } public void doOut(Artifact artifact, String facet, Document attr) { logger.debug("LongitudinalSectionGenerator.doOut: " + facet); + if (facet == null) { + logger.error("No facet name for doOut(). No output generated!"); + return; + } + + if (facet.equals(LONGITUDINAL_SECTION_W)) { + doWOut(getWaterlevelData(artifact)); + } + else if (facet.equals(LONGITUDINAL_SECTION_Q)) { + doQOut(getWaterlevelData(artifact)); + } + else { + logger.warn("Unknown facet name: " + facet); + return; + } + } + + + /** + * Returns the waterlevel data computed by the WINFOArtifact. + * + * @param artifact The WINFOArtifact. + * + * @return the computed waterlevel data. + */ + protected WQKms[] getWaterlevelData(Artifact artifact) { WINFOArtifact winfoArtifact = (WINFOArtifact) artifact; WQKms[] wqkms = winfoArtifact.getWaterlevelData(); logger.debug("Got " + wqkms.length + " WQKms objects."); + + return wqkms; } - public void generate() - throws IOException - { - logger.debug("LongitudinalSectionGenerator.generate"); + /** + * Process the output for W facets in a longitudinal section curve. + * + * @param wqkms An array of WQKms values. + */ + protected void doWOut(WQKms[] wqkms) { + logger.debug("LongitudinalSectionGenerator.doWOut"); - // TODO Implement me! + int idx = 0; + for (WQKms tmp: wqkms) { + XYSeries series = new XYSeries(getSeriesName(tmp, "w", idx++)); + + double[] target = new double[3]; + int size = tmp.size(); + + if (logger.isDebugEnabled()) { + logger.debug("Generate series: " + series.getKey()); + + logger.debug("Start km: " + tmp.getKms(0)); + logger.debug("End km: " + tmp.getKms(size-1)); + logger.debug("Values : " + size); + } + + for (int i = 0; i < size; i++) { + target = tmp.get(i, target); + + logger.debug("++ W Tuple: " + target[2] + " -> " + target[0]); + series.add(target[2], target[0]); + } + + dataset.addSeries(series); + } + } + + + /** + * Process the output for Q facets in a longitudinal section curve. + * + * @param wqkms An array of WQKms values. + */ + protected void doQOut(WQKms[] wqkms) { + logger.debug("LongitudinalSectionGenerator.doQOut"); + + int idx = 0; + for (WQKms tmp: wqkms) { + XYSeries series = new XYSeries(getSeriesName(tmp, "Q", idx++)); + + double[] target = new double[3]; + int size = tmp.size(); + + if (logger.isDebugEnabled()) { + logger.debug("Generate series: " + series.getKey()); + + logger.debug("Start km: " + tmp.getKms(0)); + logger.debug("End km: " + tmp.getKms(size-1)); + logger.debug("Values : " + size); + } + + for (int i = 0; i < size; i++) { + target = tmp.get(i, target); + + logger.debug("++ Q Tuple: " + target[2] + " -> " + target[1]); + series.add(target[2], target[1]); + } + + dataset.addSeries(series); + } + } + + + protected String getSeriesName(WQKms wqkms, String prefix, int idx) { + return prefix + "-" + idx; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :