diff 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
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java	Wed Oct 28 16:26:03 2009 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java	Thu Oct 29 15:58:47 2009 +0000
@@ -9,9 +9,13 @@
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
@@ -24,6 +28,8 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
 
 import au.com.bytecode.opencsv.CSVWriter;
 import de.intevation.artifactdatabase.Config;
@@ -40,6 +46,8 @@
 import de.intevation.gnv.statistics.Statistics;
 import de.intevation.gnv.statistics.TimeseriesStatistics;
 import de.intevation.gnv.statistics.exception.StatisticsException;
+import de.intevation.gnv.timeseries.gap.DefaultTimeGap;
+import de.intevation.gnv.timeseries.gap.TimeGap;
 import de.intevation.gnv.transition.InputData;
 import de.intevation.gnv.transition.OutputTransitionBase;
 import de.intevation.gnv.transition.describedata.KeyValueDescibeData;
@@ -63,6 +71,9 @@
      */
     private static Logger log = Logger
             .getLogger(TimeSeriesOutputTransition.class);
+    
+    
+    private static List<TimeGap> timeGapDefinitions = null;
 
     protected String domainLable = "Zeit [UTC]";
 
@@ -270,7 +281,7 @@
         ChartFactory chartFactory = new ChartFactory();
         chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle,
                 parameters, measurements, outputStream, this
-                        .getChartResult(uuid));
+                        .getChartResult(uuid),timeGapDefinitions);
     }
 
     protected ChartStyle creatStyle(int witdh, int height) {
@@ -329,8 +340,40 @@
         if (dateNameValue != null) {
             this.dateValueName = dateNameValue;
         }
+        if (timeGapDefinitions == null){
+            Element gapDefinition =  (Element)Config.getNodeXPath(configuration,
+                                                                 "time-gap-definition");
+            synchronized (this.getClass()) {
+                if (gapDefinition != null){
+                    String link = gapDefinition.getAttribute("xlink:href");
+                    if (link != null ){
+                        String absolutFileName = Config.replaceConfigDir(link);
+                        gapDefinition = (Element)new ArtifactXMLUtilities().
+                                                     readConfiguration(absolutFileName);
+                    }
+                    
+                    NodeList gapDefinitions = Config.getNodeSetXPath(gapDefinition, 
+                                                                    "/time-gaps/time-gap");
+                    if (gapDefinition != null){
+                        timeGapDefinitions = new ArrayList<TimeGap>(gapDefinitions.
+                                                                    getLength());
+                        for (int i = 0; i < gapDefinitions.getLength(); i++){
+                            Element gapNode = (Element)gapDefinitions.item(i);
+                            String unit = gapNode.getAttribute("unit");
+                            int key = Integer.parseInt(gapNode.getAttribute("key"));
+                            int value = Integer.parseInt(gapNode.getAttribute("gap"));
+                            log.info("Add new Timegap: "+key+" "+value+" "+ unit);
+                            timeGapDefinitions.add(new DefaultTimeGap(unit, 
+                                                                      key, 
+                                                                      value));
+                        }
+                    }
+                    
+                }
+            }
+        }
     }
-
+    
     /**
      * @param collectionName
      * @return

http://dive4elements.wald.intevation.org