diff flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java @ 3062:7660cfe5e8f6

FixWQCurveGenerator can generate charts from Fix*-Facets (in theory and not complete) flys-artifacts/trunk@4642 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Christian Lins <christian.lins@intevation.de>
date Tue, 12 Jun 2012 12:40:44 +0000
parents 94d78e0dc5e9
children 33c167d6fff6
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java	Tue Jun 12 08:11:36 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java	Tue Jun 12 12:40:44 2012 +0000
@@ -4,15 +4,22 @@
 
 import de.intevation.flys.artifacts.model.FacetTypes;
 
+import de.intevation.flys.artifacts.model.fixings.DateRange;
 import de.intevation.flys.artifacts.model.fixings.FixFunction;
+import de.intevation.flys.artifacts.model.fixings.QW;
+import de.intevation.flys.artifacts.model.fixings.QWD;
 
 import de.intevation.flys.exports.ChartGenerator;
 import de.intevation.flys.exports.XYChartGenerator;
 
+import de.intevation.flys.jfree.Function2DAdapter;
 import de.intevation.flys.jfree.StyledXYSeries;
 
 import org.apache.log4j.Logger;
 
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.ValueMarker;
+import org.jfree.data.general.DatasetUtilities;
 import org.jfree.data.xy.XYSeries;
 
 import org.w3c.dom.Document;
@@ -61,93 +68,104 @@
 
         if(FIX_SECTOR_AVERAGE_WQ.equals(name)) {
             doSectorAverageOut(aaf, doc, visible);
-        } else if(FIX_ANALYSIS_EVENTS_WQ.equals(name)) {
+        }
+        else if(FIX_ANALYSIS_EVENTS_WQ.equals(name)) {
             doAnalysisEventsOut(aaf, doc, visible);
-        } else if(FIX_ANALYSIS_PERIODS_WQ.equals(name)) {
+        }
+        else if(FIX_ANALYSIS_PERIODS_WQ.equals(name)) {
             doAnalysisPeriodsOut(aaf, doc, visible);
-        } else if(FIX_REFERENCE_EVENTS_WQ.equals(name)) {
+        }
+        else if(FIX_REFERENCE_EVENTS_WQ.equals(name)) {
             doReferenceEventsOut(aaf, doc, visible);
-        } else if(FIX_WQ_CURVE.equals(name)) {
+        }
+        else if(FIX_WQ_CURVE.equals(name)) {
             doWQCurveOut(aaf, doc, visible);
-        } else if(FIX_OUTLIER.equals(name)) {
+        }
+        else if(FIX_OUTLIER.equals(name)) {
             doOutlierOut(aaf, doc, visible);
-        } else {
+        }
+        else {
             logger.warn("Unknown facet name " + name);
             return;
         }
     }
 
     protected void doSectorAverageOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
-       logger.debug("doSectorAverageOut");
+        logger.debug("doSectorAverageOut");
 
-       XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-       java.util.Random rand = new java.util.Random(7000);
-       for(int n = 0; n < 10; n++) {
-           series.add(rand.nextDouble(), rand.nextDouble());
-       }
-
-       addAxisSeries(series, 0, visible);
+        QWD[] qwds = (QWD[])aaf.getData(context);
+       
+        if(qwds != null) {
+            // Draw vertical markers
+            JFreeChart chart = generateChart();
+            for(QWD qwd : qwds) {
+                chart.getXYPlot().addDomainMarker(new ValueMarker(qwd.getQ()));
+            }
+        }
     }
 
     protected void doAnalysisEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
        logger.debug("doAnalysisEventsOut");
 
-       XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-       java.util.Random rand = new java.util.Random(4000);
-       for(int n = 0; n < 10; n++) {
-           series.add(rand.nextDouble(), rand.nextDouble());
-       }
+       QWD[] qwds = (QWD[])aaf.getData(context);
+       if(qwds != null) {
+            XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
+            for(QW qw : qwds) {
+                series.add(qw.getQ(), qw.getW());
+            }
 
-       addAxisSeries(series, 0, visible);
+            addAxisSeries(series, 0, visible);
+        }
     }
 
     protected void doAnalysisPeriodsOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
        logger.debug("doAnalysisPeriodsOut");
 
-       XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-       java.util.Random rand = new java.util.Random(5000);
-       for(int n = 0; n < 10; n++) {
-           series.add(rand.nextDouble(), rand.nextDouble());
-       }
-
-       addAxisSeries(series, 0, visible);
+       DateRange[] dateRanges = (DateRange[])aaf.getData(context);
+       //TODO What to do with Date ranges?    
     }
 
     protected void doReferenceEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
        logger.debug("doReferenceEventsOut");
 
-       XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-       java.util.Random rand = new java.util.Random(3000);
-       for(int n = 0; n < 10; n++) {
-           series.add(rand.nextDouble(), rand.nextDouble());
-       }
-
-       addAxisSeries(series, 0, visible);
+       QW[] qws = (QW[])aaf.getData(context);
+       addQWSeries(qws, aaf, doc, visible);
     }
 
     protected void doWQCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
         logger.debug("doWQCurveOut");
 
         FixFunction func = (FixFunction)aaf.getData(context);
-
-        XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-        for (int q = 0; q <= func.getMaxQ(); q += 1.0) {
-            series.add(q, func.getFunction().value(q));
+        if(func.getMaxQ() > 0) {
+            XYSeries series = DatasetUtilities.sampleFunction2DToSeries(
+                new Function2DAdapter(func.getFunction()),
+                0,              // start
+                func.getMaxQ(), // end
+                500,            // number of samples
+                aaf.getFacetDescription());
+            addAxisSeries(series, 0, visible);
         }
-
-        addAxisSeries(series, 0, visible);
+        else {
+            logger.warn("doWQCurveOut: func.getMaxQ() returns 0");
+        }
     }
 
     protected void doOutlierOut(ArtifactAndFacet aaf, Document doc, boolean visible) {
         logger.debug("doOutlierOut");
 
-        XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
-        java.util.Random rand = new java.util.Random(2000);
-        for(int n = 0; n < 10; n++) {
-            series.add(rand.nextDouble(), rand.nextDouble());
+        QW[] qws = (QW[])aaf.getData(context);
+        addQWSeries(qws, aaf, doc, visible);
+    }
+
+    protected void addQWSeries(QW[] qws, ArtifactAndFacet aaf, Document doc, boolean visible) {
+         if(qws != null) {
+            XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc);
+            for(QW qw : qws) {
+                series.add(qw.getQ(), qw.getW());
+            }
+
+            addAxisSeries(series, 0, visible);
         }
-
-        addAxisSeries(series,0, visible);
     }
 
     @Override

http://dive4elements.wald.intevation.org