comparison 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
comparison
equal deleted inserted replaced
152:956445dd601d 153:c97f9bc9b642
1 package de.intevation.flys.artifacts; 1 package de.intevation.flys.artifacts;
2 2
3 import java.io.IOException;
4 import java.io.OutputStream;
5 import java.util.ArrayList;
3 import java.util.List; 6 import java.util.List;
7 import java.util.Map;
4 import java.util.Vector; 8 import java.util.Vector;
5 9
6 import org.w3c.dom.Document; 10 import org.w3c.dom.Document;
7 import org.w3c.dom.Element; 11 import org.w3c.dom.Element;
8 import org.w3c.dom.Node; 12 import org.w3c.dom.Node;
9 13
10 import org.apache.log4j.Logger; 14 import org.apache.log4j.Logger;
15
16 import org.jfree.data.xy.DefaultXYDataset;
17
18 import org.jfree.chart.ChartFactory;
19 import org.jfree.chart.JFreeChart;
20 import org.jfree.chart.plot.PlotOrientation;
11 21
12 import de.intevation.artifacts.ArtifactNamespaceContext; 22 import de.intevation.artifacts.ArtifactNamespaceContext;
13 import de.intevation.artifacts.CallContext; 23 import de.intevation.artifacts.CallContext;
14 24
15 import de.intevation.artifactdatabase.ProtocolUtils; 25 import de.intevation.artifactdatabase.ProtocolUtils;
18 import de.intevation.artifactdatabase.state.StateEngine; 28 import de.intevation.artifactdatabase.state.StateEngine;
19 import de.intevation.artifactdatabase.transition.TransitionEngine; 29 import de.intevation.artifactdatabase.transition.TransitionEngine;
20 30
21 import de.intevation.artifacts.common.utils.XMLUtils; 31 import de.intevation.artifacts.common.utils.XMLUtils;
22 32
33 import de.intevation.flys.model.Gauge;
34
35 import de.intevation.flys.artifacts.model.DischargeTables;
36 import de.intevation.flys.artifacts.model.GaugesFactory;
23 import de.intevation.flys.artifacts.states.DefaultState; 37 import de.intevation.flys.artifacts.states.DefaultState;
24 import de.intevation.flys.artifacts.context.FLYSContext; 38 import de.intevation.flys.artifacts.context.FLYSContext;
39 import de.intevation.flys.exports.ChartExportHelper;
25 40
26 41
27 /** 42 /**
28 * The default WINFO artifact. 43 * The default WINFO artifact.
29 * 44 *
118 133
119 root.appendChild(ui); 134 root.appendChild(ui);
120 root.appendChild(outs); 135 root.appendChild(outs);
121 136
122 return description; 137 return description;
138 }
139
140
141 @Override
142 public void out(
143 Document format,
144 OutputStream out,
145 CallContext context)
146 throws IOException
147 {
148 logger.info("WINFOArtifact.out");
149 String river = (String) getData("river").getValue();
150 String from = (String) getData("ld_from").getValue();
151 String to = (String) getData("ld_to").getValue();
152
153 double f = Double.parseDouble(from);
154 double t = Double.parseDouble(to);
155
156 List<double[]> ranges = new ArrayList<double[]>();
157 ranges.add(new double [] { f, t });
158
159 List<Gauge> gauges = GaugesFactory.getGauges(river);
160 List<Gauge> filtered = GaugesFactory.filterRanges(gauges, ranges);
161
162 if (logger.isDebugEnabled()) {
163 int numGauges = gauges != null ? gauges.size() : 0;
164 int numFiltered = filtered != null ? filtered.size() : 0;
165
166 logger.debug("++++++++++++++++++++");
167 logger.debug("Search gauges for river: " + river);
168 logger.debug("-> ... from range: " + from);
169 logger.debug("-> ... to range: " + to);
170 logger.debug("-> Found " + numGauges + " gauges in total.");
171 logger.debug("-> Found " + numFiltered + " gauges after filtering.");
172 logger.debug("++++++++++++++++++++");
173 }
174
175 String[] gaugeNames = new String[filtered.size()];
176 int idx = 0;
177 for (Gauge gauge: filtered) {
178 gaugeNames[idx++] = gauge.getName();
179 }
180
181 DischargeTables dt = new DischargeTables(river, gaugeNames);
182 Map<String, double[][]> gaugeValues = dt.getValues(100d);
183
184 DefaultXYDataset dataset = new DefaultXYDataset();
185
186 for (String gauge: gaugeNames) {
187 double[][] values = gaugeValues.get(gauge);
188 dataset.addSeries(gauge, values);
189 }
190
191 JFreeChart chart = ChartFactory.createXYLineChart(
192 "Abflusskurven (" + river + ")",
193 "Q", "W",
194 dataset,
195 PlotOrientation.VERTICAL,
196 true,
197 false,
198 false);
199
200 ChartExportHelper.exportImage(
201 out,
202 chart,
203 "png",
204 600, 400);
123 } 205 }
124 206
125 207
126 /** 208 /**
127 * Returns the name of the concrete artifact. 209 * Returns the name of the concrete artifact.

http://dive4elements.wald.intevation.org