diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 3121:0b86b005bb9a

FixA: Respect the selected events and reference period correctly. flys-artifacts/trunk@4722 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 20 Jun 2012 11:25:21 +0000
parents cbf308f5c41b
children 3b6ab6fac843
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java	Wed Jun 20 11:24:30 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java	Wed Jun 20 11:25:21 2012 +0000
@@ -12,12 +12,15 @@
 
 import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter;
 import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter;
+
+import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter;
+
 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing;
-import de.intevation.flys.artifacts.model.FixingsOverview.IdFilter;
+import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter;
 import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter;
 import de.intevation.flys.artifacts.model.FixingsOverview.Range;
+import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter;
 import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter;
-import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter;
 
 import de.intevation.flys.artifacts.model.FixingsOverview;
 import de.intevation.flys.artifacts.model.FixingsOverviewFactory;
@@ -49,6 +52,7 @@
     protected boolean      preprocessing;
     protected String       function;
     protected int []       events;
+    protected DateRange    referencePeriod;
     protected DateRange [] analysisPeriods;
     protected int          qSectorStart;
     protected int          qSectorEnd;
@@ -58,16 +62,17 @@
 
     public FixCalculation(FixationArtifactAccess access) {
 
-        String    river              = access.getRiver();
-        Double    from               = access.getFrom();
-        Double    to                 = access.getTo();
-        Double    step               = access.getStep();
-        String    function           = access.getFunction();
-        int []    events             = access.getEvents();
+        String       river           = access.getRiver();
+        Double       from            = access.getFrom();
+        Double       to              = access.getTo();
+        Double       step            = access.getStep();
+        String       function        = access.getFunction();
+        int []       events          = access.getEvents();
+        DateRange    referencePeriod = access.getReferencePeriod();
         DateRange [] analysisPeriods = access.getAnalysisPeriods();
-        Integer   qSectorStart       = access.getQSectorStart();
-        Integer   qSectorEnd         = access.getQSectorEnd();
-        Boolean   preprocessing      = access.getPreprocessing();
+        Integer      qSectorStart    = access.getQSectorStart();
+        Integer      qSectorEnd      = access.getQSectorEnd();
+        Boolean      preprocessing   = access.getPreprocessing();
 
         if (river == null) {
             // TODO: i18n
@@ -99,6 +104,11 @@
             addProblem("fix.missing.events");
         }
 
+        if (referencePeriod == null) {
+            // TODO: i18n
+            addProblem("fix.missing.reference.period");
+        }
+
         if (analysisPeriods == null || analysisPeriods.length < 1) {
             // TODO: i18n
             addProblem("fix.missing.analysis.periods");
@@ -126,6 +136,7 @@
             this.step            = step;
             this.function        = function;
             this.events          = events;
+            this.referencePeriod = referencePeriod;
             this.analysisPeriods = analysisPeriods;
             this.qSectorStart    = qSectorStart;
             this.qSectorEnd      = qSectorEnd;
@@ -222,7 +233,6 @@
             // Fill Qs and Ws from event columns.
             for (int j = 0; j < ws.length; ++j) {
                 interpolated[j] = eventColumns.get(j).getQW(km, qs, ws, j);
-                // TODO: mark as interpolated.
             }
 
             fitting.reset();
@@ -281,31 +291,31 @@
 
         FixingsColumnFactory fcf = FixingsColumnFactory.getInstance();
 
-        List<Column> columns = new ArrayList<Column>(events.length);
-
-        for (int eventId: events) {
-            IdFilter idFilter = new IdFilter(eventId);
-
-            List<Fixing.Column> metas = overview.filter(null, idFilter);
+        IdsFilter ids = new IdsFilter(events);
+        DateRangeFilter rdf = new DateRangeFilter(
+            referencePeriod.getFrom(),
+            referencePeriod.getTo());
+        Filter filter = new AndFilter().add(rdf).add(ids);
 
-            if (metas.isEmpty()) {
-                // TODO: i18n
-                addProblem("fix.missing.column", eventId);
-                continue;
-            }
+        List<Fixing.Column> metas = overview.filter(null, filter);
 
-            FixingsColumn data = fcf.getColumnData(metas.get(0));
+        List<Column> columns = new ArrayList<Column>(metas.size());
+
+        for (Fixing.Column meta: metas) {
+
+            FixingsColumn data = fcf.getColumnData(meta);
             if (data == null) {
                 // TODO: i18n
-                addProblem("fix.cannot.load.data", eventId);
-                continue;
+                addProblem("fix.cannot.load.data");
             }
-
-            columns.add(new Column(metas.get(0), data));
+            else {
+                columns.add(new Column(metas.get(0), data));
+            }
         }
 
         return columns;
     }
+    
 
     protected KMIndex<AnalysisPeriod []> calculateAnalysisPeriods(
         Function        function,
@@ -331,6 +341,8 @@
         KMIndex<AnalysisPeriod []> results =
             new KMIndex<AnalysisPeriod []>(parameters.size());
 
+        IdsFilter idsFilter = new IdsFilter(events);
+
         for (int row = 0, R = parameters.size(); row < R; ++row) {
             double km = parameters.get(row, kmIndex);
             parameters.get(row, parameterIndices, parameterValues);
@@ -355,10 +367,11 @@
                 // for all Q sectors.
                 for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) {
 
-                    AndFilter filter = new AndFilter();
-                    filter.add(kmFilter);
-                    filter.add(new SectorFilter(qSector));
-                    filter.add(drf);
+                    Filter filter = new AndFilter()
+                        .add(kmFilter)
+                        .add(new SectorFilter(qSector))
+                        .add(drf)
+                        .add(idsFilter);
 
                     List<Fixing.Column> metas = overview.filter(range, filter);
 

http://dive4elements.wald.intevation.org