diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/BedQualityState.java @ 3762:0c978a80726a

Splitted up facets for porosity and density into two facets: a toplayer and a sublayer facet for each. BedQualityState will now create facets based on the calculation result. flys-artifacts/trunk@5464 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 14 Sep 2012 07:12:08 +0000
parents 066e2b4d69ca
children d29cebf371ba
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/BedQualityState.java	Thu Sep 13 20:58:24 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/BedQualityState.java	Fri Sep 14 07:12:08 2012 +0000
@@ -11,10 +11,13 @@
 import de.intevation.flys.artifacts.access.BedQualityAccess;
 import de.intevation.flys.artifacts.model.CalculationResult;
 import de.intevation.flys.artifacts.model.FacetTypes;
+import de.intevation.flys.artifacts.model.minfo.BedBedQualityResult;
 import de.intevation.flys.artifacts.model.minfo.BedDensityFacet;
 import de.intevation.flys.artifacts.model.minfo.BedDiameterFacet;
+import de.intevation.flys.artifacts.model.minfo.BedLoadBedQualityResult;
 import de.intevation.flys.artifacts.model.minfo.BedPorosityFacet;
 import de.intevation.flys.artifacts.model.minfo.BedQualityCalculation;
+import de.intevation.flys.artifacts.model.minfo.BedQualityResult;
 import de.intevation.flys.artifacts.model.minfo.BedloadDiameterFacet;
 import de.intevation.flys.artifacts.states.DefaultState;
 
@@ -42,25 +45,63 @@
             return res;
         }
 
-        String stateId = getID();
-
-        // TODO CREATE FACETS DEPENDING ON THE CALCULATION RESULT
-        newFacets.add(new BedDiameterFacet(0, BED_QUALITY_BED_DIAMETER,
-            "bed diameter", ComputeType.ADVANCE, stateId, hash));
+        BedQualityResult[] results = (BedQualityResult[]) res.getData();
 
-        newFacets.add(new BedloadDiameterFacet(0, BED_QUALITY_BEDLOAD_DIAMETER,
-            "bedload diameter", ComputeType.ADVANCE, stateId, hash));
+        if (results == null || results.length == 0) {
+            logger.warn("Calculation computed no results!");
+            return res;
+        }
 
-        newFacets.add(new BedPorosityFacet(0, BED_QUALITY_POROSITY, "porosity",
-            ComputeType.ADVANCE, stateId, hash));
+        generateFacets(newFacets, results, getID(), hash);
+        logger.debug("Created " + newFacets.size() + " new Facets.");
 
-        newFacets.add(new BedDensityFacet(0, BED_QUALITY_SEDIMENT_DENSITY,
-            "density", ComputeType.ADVANCE, stateId, hash));
-
-        logger.debug("Created " + newFacets.size() + " new Facets.");
         facets.addAll(newFacets);
 
         return res;
     }
+
+    protected void generateFacets(List<Facet> newFacets,
+        BedQualityResult[] results, String stateId, String hash) {
+        logger.debug("BedQualityState.generateFacets");
+
+        for (int idx = 0; idx < results.length; idx++) {
+            BedQualityResult result = results[idx];
+
+            if (result instanceof BedBedQualityResult) {
+                // TODO I18N for Facet description
+                newFacets.add(new BedPorosityFacet(idx,
+                    BED_QUALITY_POROSITY_TOPLAYER, "porosity_toplayer",
+                    ComputeType.ADVANCE, stateId, hash));
+
+                // TODO I18N for Facet description
+                newFacets.add(new BedPorosityFacet(idx,
+                    BED_QUALITY_POROSITY_SUBLAYER, "porosity_sublayer",
+                    ComputeType.ADVANCE, stateId, hash));
+
+                // TODO I18N for Facet description
+                newFacets.add(new BedDensityFacet(idx,
+                    BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER, "density_toplayer",
+                    ComputeType.ADVANCE, stateId, hash));
+
+                // TODO I18N for Facet description
+                newFacets.add(new BedDensityFacet(idx,
+                    BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER, "density_sublayer",
+                    ComputeType.ADVANCE, stateId, hash));
+
+                // TODO I18N for Facet description
+                newFacets.add(new BedloadDiameterFacet(idx,
+                    BED_QUALITY_BEDLOAD_DIAMETER, "bed diameter",
+                    ComputeType.ADVANCE, stateId, hash));
+            }
+            else if (result instanceof BedLoadBedQualityResult) {
+                // TODO CREATE FACETS DEPENDING ON THE CALCULATION RESULT
+                newFacets.add(new BedDiameterFacet(idx, BED_QUALITY_BED_DIAMETER,
+                    "bedload diameter", ComputeType.ADVANCE, stateId, hash));
+            }
+            else {
+                logger.warn("unknown result object: " + result.getClass());
+            }
+        }
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org