diff gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java @ 95:13402ac8d8fe

Put the Statisticscalulation to the Outmethod of the OutputTransition. gnv-artifacts/trunk@140 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Mon, 28 Sep 2009 08:20:28 +0000
parents bd284d8306db
children 156db25ad4b4
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java	Mon Sep 28 07:32:03 2009 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java	Mon Sep 28 08:20:28 2009 +0000
@@ -11,20 +11,35 @@
 import java.util.Collection;
 import java.util.Iterator;
 
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
 import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 import au.com.bytecode.opencsv.CSVWriter;
-
+import de.intevation.artifactdatabase.XMLUtils;
 import de.intevation.gnv.chart.ChartFactory;
 import de.intevation.gnv.chart.ChartLabels;
 import de.intevation.gnv.chart.ChartStyle;
 import de.intevation.gnv.chart.exception.TechnicalChartException;
 import de.intevation.gnv.geobackend.base.Result;
+import de.intevation.gnv.statistics.Statistic;
+import de.intevation.gnv.statistics.TimeseriesStatistics;
+import de.intevation.gnv.statistics.exception.StatisticsException;
 import de.intevation.gnv.transition.InputData;
 import de.intevation.gnv.transition.OutputTransitionBase;
 import de.intevation.gnv.transition.describedata.KeyValueDescibeData;
 import de.intevation.gnv.transition.describedata.NamedCollection;
 import de.intevation.gnv.transition.exception.TransitionException;
+import de.intevation.gnv.utils.ArtifactXMLUtilities;
 
 /**
  * @author Tim Englich <tim.englich@intevation.de>
@@ -112,6 +127,12 @@
                     log.error("No Data given for generation an CSV-File.");
                     throw new TransitionException("No Data given for generation an CSV-File.");
                 }
+            }else if (outputMode.equalsIgnoreCase("statistics")){
+                log.debug("Statistics will be generated.");
+                TimeseriesStatistics tss = new TimeseriesStatistics();
+                Collection<Statistic> statistics = tss.calculateStatistics(this.chartResult);
+                Document doc = this.writeStatistics2XML(statistics);
+                this.writeDocument2OutputStream(doc, outputStream);
             }
         } catch (IOException e) {
             log.error(e,e);
@@ -119,8 +140,47 @@
         } catch (TechnicalChartException e) {
             log.error(e,e);
             throw new TransitionException(e);
+        }catch (StatisticsException e) {
+            log.error(e,e);
+            throw new TransitionException(e);
         }
     }
+    
+    protected void writeDocument2OutputStream(Document document, OutputStream os){
+        
+        try {
+            TransformerFactory transformerFactory = TransformerFactory.newInstance();
+            Transformer transformer = transformerFactory.newTransformer();
+            DOMSource source = new DOMSource(document);
+            StreamResult result =  new StreamResult(os);
+            transformer.transform(source, result);
+        } catch (TransformerConfigurationException e) {
+            log.error(e,e);
+        } catch (TransformerFactoryConfigurationError e) {
+            log.error(e,e);
+        }catch (TransformerException e) {
+            log.error(e,e);
+        }
+    }
+    
+    protected Document writeStatistics2XML(Collection<Statistic> statistic){
+        ArtifactXMLUtilities xmlUtilities = new ArtifactXMLUtilities();
+        Document doc = XMLUtils.newDocument();
+        if (statistic != null){
+            Node statisticResults = xmlUtilities.createArtifactElement(doc, "statistic-values");
+            doc.appendChild(statisticResults);
+            Iterator<Statistic> it = statistic.iterator();
+            while (it.hasNext()){
+                Statistic s = it.next();
+                Element result = xmlUtilities.createArtifactElement(doc, "statistic");
+                result.setAttribute("name", s.getKey());
+                result.setAttribute("value", s.getStringValue());
+                statisticResults.appendChild(result);
+            }
+        
+        }
+        return doc;
+    }
 
     
     protected String getSelectedFeatureName(){

http://dive4elements.wald.intevation.org