Mercurial > dive4elements > river
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. |