comparison gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java @ 217:3dcd2b0b456e

Added configurable TimeGap Support to the TimeSeries-Chart-Generation. issu45 gnv-artifacts/trunk@275 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Thu, 29 Oct 2009 15:58:47 +0000
parents d87347142702
children ee2d4134d0b3
comparison
equal deleted inserted replaced
216:9db263ee2678 217:3dcd2b0b456e
7 import java.awt.Dimension; 7 import java.awt.Dimension;
8 import java.io.IOException; 8 import java.io.IOException;
9 import java.io.OutputStream; 9 import java.io.OutputStream;
10 import java.io.OutputStreamWriter; 10 import java.io.OutputStreamWriter;
11 import java.io.UnsupportedEncodingException; 11 import java.io.UnsupportedEncodingException;
12 import java.util.ArrayList;
12 import java.util.Collection; 13 import java.util.Collection;
13 import java.util.Iterator; 14 import java.util.Iterator;
14 15 import java.util.List;
16
17 import javax.xml.parsers.DocumentBuilderFactory;
18 import javax.xml.parsers.ParserConfigurationException;
15 import javax.xml.transform.Transformer; 19 import javax.xml.transform.Transformer;
16 import javax.xml.transform.TransformerConfigurationException; 20 import javax.xml.transform.TransformerConfigurationException;
17 import javax.xml.transform.TransformerException; 21 import javax.xml.transform.TransformerException;
18 import javax.xml.transform.TransformerFactory; 22 import javax.xml.transform.TransformerFactory;
19 import javax.xml.transform.TransformerFactoryConfigurationError; 23 import javax.xml.transform.TransformerFactoryConfigurationError;
22 26
23 import org.apache.log4j.Logger; 27 import org.apache.log4j.Logger;
24 import org.w3c.dom.Document; 28 import org.w3c.dom.Document;
25 import org.w3c.dom.Element; 29 import org.w3c.dom.Element;
26 import org.w3c.dom.Node; 30 import org.w3c.dom.Node;
31 import org.w3c.dom.NodeList;
32 import org.xml.sax.SAXException;
27 33
28 import au.com.bytecode.opencsv.CSVWriter; 34 import au.com.bytecode.opencsv.CSVWriter;
29 import de.intevation.artifactdatabase.Config; 35 import de.intevation.artifactdatabase.Config;
30 import de.intevation.artifactdatabase.XMLUtils; 36 import de.intevation.artifactdatabase.XMLUtils;
31 import de.intevation.artifacts.CallMeta; 37 import de.intevation.artifacts.CallMeta;
38 import de.intevation.gnv.geobackend.base.Result; 44 import de.intevation.gnv.geobackend.base.Result;
39 import de.intevation.gnv.statistics.Statistic; 45 import de.intevation.gnv.statistics.Statistic;
40 import de.intevation.gnv.statistics.Statistics; 46 import de.intevation.gnv.statistics.Statistics;
41 import de.intevation.gnv.statistics.TimeseriesStatistics; 47 import de.intevation.gnv.statistics.TimeseriesStatistics;
42 import de.intevation.gnv.statistics.exception.StatisticsException; 48 import de.intevation.gnv.statistics.exception.StatisticsException;
49 import de.intevation.gnv.timeseries.gap.DefaultTimeGap;
50 import de.intevation.gnv.timeseries.gap.TimeGap;
43 import de.intevation.gnv.transition.InputData; 51 import de.intevation.gnv.transition.InputData;
44 import de.intevation.gnv.transition.OutputTransitionBase; 52 import de.intevation.gnv.transition.OutputTransitionBase;
45 import de.intevation.gnv.transition.describedata.KeyValueDescibeData; 53 import de.intevation.gnv.transition.describedata.KeyValueDescibeData;
46 import de.intevation.gnv.transition.describedata.NamedCollection; 54 import de.intevation.gnv.transition.describedata.NamedCollection;
47 import de.intevation.gnv.transition.exception.TransitionException; 55 import de.intevation.gnv.transition.exception.TransitionException;
61 /** 69 /**
62 * the logger, used to log exceptions and additonaly information 70 * the logger, used to log exceptions and additonaly information
63 */ 71 */
64 private static Logger log = Logger 72 private static Logger log = Logger
65 .getLogger(TimeSeriesOutputTransition.class); 73 .getLogger(TimeSeriesOutputTransition.class);
74
75
76 private static List<TimeGap> timeGapDefinitions = null;
66 77
67 protected String domainLable = "Zeit [UTC]"; 78 protected String domainLable = "Zeit [UTC]";
68 79
69 protected String featureValuesName = "featureid"; 80 protected String featureValuesName = "featureid";
70 protected String parameterValuesName = "parameterid"; 81 protected String parameterValuesName = "parameterid";
268 String uuid) throws IOException, 279 String uuid) throws IOException,
269 TechnicalChartException { 280 TechnicalChartException {
270 ChartFactory chartFactory = new ChartFactory(); 281 ChartFactory chartFactory = new ChartFactory();
271 chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle, 282 chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle,
272 parameters, measurements, outputStream, this 283 parameters, measurements, outputStream, this
273 .getChartResult(uuid)); 284 .getChartResult(uuid),timeGapDefinitions);
274 } 285 }
275 286
276 protected ChartStyle creatStyle(int witdh, int height) { 287 protected ChartStyle creatStyle(int witdh, int height) {
277 // TODO Konfigurierbar machen 288 // TODO Konfigurierbar machen
278 de.intevation.gnv.chart.Insets lInsets = new de.intevation.gnv.chart.Insets( 289 de.intevation.gnv.chart.Insets lInsets = new de.intevation.gnv.chart.Insets(
327 String dateNameValue = Config.getStringXPath(configuration, 338 String dateNameValue = Config.getStringXPath(configuration,
328 "value-names/value-name[@name='date']/@value"); 339 "value-names/value-name[@name='date']/@value");
329 if (dateNameValue != null) { 340 if (dateNameValue != null) {
330 this.dateValueName = dateNameValue; 341 this.dateValueName = dateNameValue;
331 } 342 }
332 } 343 if (timeGapDefinitions == null){
333 344 Element gapDefinition = (Element)Config.getNodeXPath(configuration,
345 "time-gap-definition");
346 synchronized (this.getClass()) {
347 if (gapDefinition != null){
348 String link = gapDefinition.getAttribute("xlink:href");
349 if (link != null ){
350 String absolutFileName = Config.replaceConfigDir(link);
351 gapDefinition = (Element)new ArtifactXMLUtilities().
352 readConfiguration(absolutFileName);
353 }
354
355 NodeList gapDefinitions = Config.getNodeSetXPath(gapDefinition,
356 "/time-gaps/time-gap");
357 if (gapDefinition != null){
358 timeGapDefinitions = new ArrayList<TimeGap>(gapDefinitions.
359 getLength());
360 for (int i = 0; i < gapDefinitions.getLength(); i++){
361 Element gapNode = (Element)gapDefinitions.item(i);
362 String unit = gapNode.getAttribute("unit");
363 int key = Integer.parseInt(gapNode.getAttribute("key"));
364 int value = Integer.parseInt(gapNode.getAttribute("gap"));
365 log.info("Add new Timegap: "+key+" "+value+" "+ unit);
366 timeGapDefinitions.add(new DefaultTimeGap(unit,
367 key,
368 value));
369 }
370 }
371
372 }
373 }
374 }
375 }
376
334 /** 377 /**
335 * @param collectionName 378 * @param collectionName
336 * @return 379 * @return
337 */ 380 */
338 protected Collection<KeyValueDescibeData> getCollection( 381 protected Collection<KeyValueDescibeData> getCollection(

http://dive4elements.wald.intevation.org