comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 300:9a0e1289bab6

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

http://dive4elements.wald.intevation.org