Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 153:c97f9bc9b642
The out() operation of the WINFO artifact draws discharge tables for gauges specified by the user.
flys-artifacts/trunk@1590 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 28 Mar 2011 14:33:36 +0000 |
parents | dde6904ba160 |
children | fbbb22e1e206 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Mon Mar 28 10:48:27 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java Mon Mar 28 14:33:36 2011 +0000 @@ -1,6 +1,10 @@ package de.intevation.flys.artifacts; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Vector; import org.w3c.dom.Document; @@ -9,6 +13,12 @@ import org.apache.log4j.Logger; +import org.jfree.data.xy.DefaultXYDataset; + +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.PlotOrientation; + import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; @@ -20,8 +30,13 @@ import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.model.Gauge; + +import de.intevation.flys.artifacts.model.DischargeTables; +import de.intevation.flys.artifacts.model.GaugesFactory; import de.intevation.flys.artifacts.states.DefaultState; import de.intevation.flys.artifacts.context.FLYSContext; +import de.intevation.flys.exports.ChartExportHelper; /** @@ -123,6 +138,73 @@ } + @Override + public void out( + Document format, + OutputStream out, + CallContext context) + throws IOException + { + logger.info("WINFOArtifact.out"); + String river = (String) getData("river").getValue(); + String from = (String) getData("ld_from").getValue(); + String to = (String) getData("ld_to").getValue(); + + double f = Double.parseDouble(from); + double t = Double.parseDouble(to); + + List<double[]> ranges = new ArrayList<double[]>(); + ranges.add(new double [] { f, t }); + + List<Gauge> gauges = GaugesFactory.getGauges(river); + List<Gauge> filtered = GaugesFactory.filterRanges(gauges, ranges); + + if (logger.isDebugEnabled()) { + int numGauges = gauges != null ? gauges.size() : 0; + int numFiltered = filtered != null ? filtered.size() : 0; + + logger.debug("++++++++++++++++++++"); + logger.debug("Search gauges for river: " + river); + logger.debug("-> ... from range: " + from); + logger.debug("-> ... to range: " + to); + logger.debug("-> Found " + numGauges + " gauges in total."); + logger.debug("-> Found " + numFiltered + " gauges after filtering."); + logger.debug("++++++++++++++++++++"); + } + + String[] gaugeNames = new String[filtered.size()]; + int idx = 0; + for (Gauge gauge: filtered) { + gaugeNames[idx++] = gauge.getName(); + } + + DischargeTables dt = new DischargeTables(river, gaugeNames); + Map<String, double[][]> gaugeValues = dt.getValues(100d); + + DefaultXYDataset dataset = new DefaultXYDataset(); + + for (String gauge: gaugeNames) { + double[][] values = gaugeValues.get(gauge); + dataset.addSeries(gauge, values); + } + + JFreeChart chart = ChartFactory.createXYLineChart( + "Abflusskurven (" + river + ")", + "Q", "W", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); + + ChartExportHelper.exportImage( + out, + chart, + "png", + 600, 400); + } + + /** * Returns the name of the concrete artifact. *