ingo@299: package de.intevation.flys.exports;
ingo@299:
ingo@299: import java.util.ArrayList;
ingo@299: import java.util.List;
ingo@299: import java.util.Map;
ingo@299:
ingo@299: import org.apache.log4j.Logger;
ingo@299:
ingo@299: import org.w3c.dom.Document;
ingo@299:
ingo@375: import org.jfree.chart.JFreeChart;
ingo@375: import org.jfree.chart.plot.XYPlot;
ingo@299: import org.jfree.data.xy.DefaultXYDataset;
ingo@299:
ingo@299: import de.intevation.artifacts.Artifact;
ingo@299:
ingo@299: import de.intevation.flys.model.Gauge;
ingo@381: import de.intevation.flys.model.River;
ingo@299:
ingo@299: import de.intevation.flys.artifacts.FLYSArtifact;
ingo@299: import de.intevation.flys.artifacts.model.DischargeTables;
ingo@299: import de.intevation.flys.artifacts.model.GaugesFactory;
ingo@299:
ingo@299:
ingo@299: /**
ingo@299: * An OutGenerator that generates discharge curves.
ingo@299: *
ingo@299: * @author Ingo Weinzierl
ingo@299: */
ingo@369: public class DischargeCurveGenerator extends XYChartGenerator {
ingo@299:
ingo@299: /** The logger used in this generator.*/
ingo@299: private static Logger logger =
ingo@299: Logger.getLogger(DischargeCurveGenerator.class);
ingo@299:
ingo@299:
ingo@299: /** The Dataset that contains the data for the chart.*/
ingo@299: protected DefaultXYDataset dataset;
ingo@299:
ingo@299:
ingo@299: public DischargeCurveGenerator() {
ingo@348: super();
ingo@299:
ingo@299: this.dataset = new DefaultXYDataset();
ingo@299: }
ingo@299:
ingo@299:
ingo@369: protected String getChartTitle() {
ingo@369: return "Abflusskurven";
ingo@369: }
ingo@369:
ingo@369:
ingo@369: protected String getXAxisLabel() {
ingo@369: return "Q[m³/s]";
ingo@369: }
ingo@369:
ingo@369:
ingo@369: protected String getYAxisLabel() {
ingo@369: return "W[cm]";
ingo@369: }
ingo@369:
ingo@369:
ingo@375: protected void addDatasets(JFreeChart chart) {
ingo@375: XYPlot plot = (XYPlot) chart.getPlot();
ingo@375: plot.setDataset(0, dataset);
ingo@369: }
ingo@369:
ingo@369:
ingo@364: public void doOut(Artifact artifact, String facet, Document attr) {
ingo@364: logger.debug("DischargeCurveGenerator.doOut: " + facet);
ingo@299:
ingo@299: if (!(artifact instanceof FLYSArtifact)) {
ingo@299: logger.error("Artifact is no instance of FLYSArtifact.");
ingo@299: return;
ingo@299: }
ingo@299:
ingo@299: FLYSArtifact flysArtifact = (FLYSArtifact) artifact;
ingo@299:
ingo@381: River river = flysArtifact.getRiver();
ingo@381: double[] distance = flysArtifact.getDistance();
ingo@299:
ingo@299: List ranges = new ArrayList();
ingo@381: ranges.add(distance);
ingo@299:
ingo@299: List gauges = GaugesFactory.getGauges(river);
ingo@299: List filtered = GaugesFactory.filterRanges(gauges, ranges);
ingo@299:
ingo@299: if (logger.isDebugEnabled()) {
ingo@299: int numGauges = gauges != null ? gauges.size() : 0;
ingo@299: int numFiltered = filtered != null ? filtered.size() : 0;
ingo@299:
ingo@299: logger.debug("++++++++++++++++++++");
ingo@381: logger.debug("Search gauges for river: " + river.getName());
ingo@381: logger.debug("-> ... from range: " + distance[0]);
ingo@381: logger.debug("-> ... to range: " + distance[1]);
ingo@299: logger.debug("-> Found " + numGauges + " gauges in total.");
ingo@299: logger.debug("-> Found " + numFiltered + " gauges after filtering.");
ingo@299: logger.debug("++++++++++++++++++++");
ingo@299: }
ingo@299:
ingo@299: String[] gaugeNames = new String[filtered.size()];
ingo@299: int idx = 0;
ingo@299: for (Gauge gauge: filtered) {
ingo@299: gaugeNames[idx++] = gauge.getName();
ingo@299: }
ingo@299:
ingo@381: DischargeTables dt = new DischargeTables(river.getName(), gaugeNames);
ingo@299: Map gaugeValues = dt.getValues(100d);
ingo@299:
ingo@299: for (String gauge: gaugeNames) {
ingo@299: double[][] values = gaugeValues.get(gauge);
ingo@299: dataset.addSeries(gauge, values);
ingo@299: }
ingo@299: }
ingo@299: }
ingo@299: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :