diff artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java @ 6392:9a0f8d532797

Load sedimentload fraction with sedimentload factory and add new facets to artifact.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 21 Jun 2013 15:35:44 +0200
parents 01ff5cd6abfa
children ab11ce67854b
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java	Fri Jun 21 15:33:06 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java	Fri Jun 21 15:35:44 2013 +0200
@@ -9,10 +9,10 @@
 package org.dive4elements.river.artifacts.states.minfo;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import org.apache.log4j.Logger;
-
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifactdatabase.state.FacetActivity;
 import org.dive4elements.artifacts.Artifact;
@@ -21,14 +21,17 @@
 import org.dive4elements.river.artifacts.D4EArtifact;
 import org.dive4elements.river.artifacts.access.SedimentLoadAccess;
 import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.model.DataFacet;
 import org.dive4elements.river.artifacts.model.FacetTypes;
 import org.dive4elements.river.artifacts.model.ReportFacet;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoad;
 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadCalculation;
 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFacet;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFactory;
 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadResult;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadUnknownFacet;
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.states.DefaultState;
+import org.dive4elements.river.utils.DateGuesser;
 
 
 public class SedimentLoadCalculate
@@ -70,6 +73,42 @@
                         name.equals(SEDIMENT_LOAD_SUSP_SAND_BED)){
                         return Boolean.FALSE;
                     }
+                    else if (name.equals(SEDIMENT_LOAD_UNKOWN)) {
+                        D4EArtifact d4e = (D4EArtifact)artifact;
+                        SedimentLoadUnknownFacet f =
+                            (SedimentLoadUnknownFacet)
+                                d4e.getNativeFacet(facet, null);
+                        SedimentLoad load =
+                            (SedimentLoad)f.getData(artifact, null);
+                        SedimentLoadAccess access =
+                            new SedimentLoadAccess(d4e);
+                        List<int[]> dates = new ArrayList<int[]>();
+                        if (access.getYearEpoch().equals("year")) {
+                            dates.add(access.getPeriod());
+                        }
+                        else {
+                            int[][] epochs = access.getEpochs();
+                            for (int i = 0; i < epochs.length; i++) {
+                                dates.add(epochs[i]);
+                            }
+                        }
+                        for (int[] date: dates) {
+                            try {
+                                Date s =
+                                    DateGuesser.guessDate(String.valueOf(date[0]));
+                                Date e =
+                                    DateGuesser.guessDate(String.valueOf(date[1]));
+                                if (!(s.after(load.getEnd()) ||
+                                      e.before(load.getStart()))) {
+                                    return Boolean.TRUE;
+                                }
+                            }
+                            catch (IllegalArgumentException iae) {
+                                return Boolean.FALSE;
+                            }
+                        }
+                        return Boolean.FALSE;
+                    }
                     else {
                         return null;
                     }
@@ -100,6 +139,10 @@
             return res;
         }
 
+        String river = access.getRiver();
+        SedimentLoad[] unknown =
+            SedimentLoadFactory.getSedimentLoadUnknown(river);
+
         String type = access.getYearEpoch();
         if (type.equals("year")) {
             generateYearFacets(context, newFacets, results, getID(), hash);
@@ -114,6 +157,16 @@
         if (res.getReport().hasProblems()) {
             newFacets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
         }
+
+        for (int i = 0; i < unknown.length; i++) {
+            newFacets.add(new SedimentLoadUnknownFacet(
+                i,
+                SEDIMENT_LOAD_UNKOWN,
+                unknown[i].getDescription(),
+                ComputeType.ADVANCE,
+                getID(),
+                hash));
+        }
         facets.addAll(newFacets);
 
         return res;

http://dive4elements.wald.intevation.org