changeset 6262:ea6225010871

Set facet activity, have the correct facet order and added new facet to bed quality.
author Raimund Renkert <rrenkert@intevation.de>
date Tue, 11 Jun 2013 09:20:14 +0200
parents 83a04004969f
children f01dee3a39fc
files artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityState.java artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityGenerator.java
diffstat 2 files changed, 90 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityState.java	Tue Jun 11 09:18:30 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityState.java	Tue Jun 11 09:20:14 2013 +0200
@@ -15,6 +15,8 @@
 import org.apache.log4j.Logger;
 
 import org.dive4elements.artifactdatabase.state.Facet;
+import org.dive4elements.artifactdatabase.state.FacetActivity;
+import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.artifacts.CallMeta;
 import org.dive4elements.river.artifacts.D4EArtifact;
@@ -32,6 +34,7 @@
 import org.dive4elements.river.artifacts.model.minfo.BedQualityCalculation;
 import org.dive4elements.river.artifacts.model.minfo.BedQualityDiameterResult;
 import org.dive4elements.river.artifacts.model.minfo.BedQualityResult;
+import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterDataFacet;
 import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterFacet;
 import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterResult;
 import org.dive4elements.river.artifacts.resources.Resources;
@@ -59,6 +62,32 @@
     public static final String I18N_FACET_BEDLOAD_DIAMETER_DATA = "facet.bedquality.bedload.diameter.data";
     public static final String I18N_FACET_BEDLOAD_DIAMETER = "facet.bedquality.bedload.diameter";
 
+    static {
+        // Active/deactivate facets.
+        FacetActivity.Registry.getInstance().register(
+            "minfo",
+            new FacetActivity() {
+                @Override
+                public Boolean isInitialActive(
+                    Artifact artifact,
+                    Facet    facet,
+                    String   output
+                ) {
+                    String name = facet.getName();
+                    if (name.equals(BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER) ||
+                        name.equals(BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER) ||
+                        name.equals(BED_DIAMETER_DATA_TOP) ||
+                        name.equals(BED_DIAMETER_DATA_SUB) ||
+                        name.equals(BEDLOAD_DIAMETER_DATA)){
+                        return Boolean.FALSE;
+                    }
+                    else {
+                        return null;
+                    }
+                }
+            });
+    }
+
     @Override
     public Object computeAdvance(D4EArtifact artifact, String hash,
         CallContext context, List<Facet> facets, Object old) {
@@ -97,12 +126,18 @@
         String stateId,
         String hash) {
         List<String> diameters = access.getBedDiameter();
+        List<String> loadDiameters = access.getBedloadDiameter();
         List<DateRange> ranges = access.getDateRanges();
         for (int i = 0; i < ranges.size(); i++) {
             DateRange range = ranges.get(i);
             for (String diameter: diameters) {
-                int ndxTop = generateIndex(diameter, true);
-                int ndxSub = generateIndex(diameter, false);
+                int ndxTop = generateIndex(diameter);
+                int ndxSub = generateIndex(diameter);
+                ndxTop += 1;
+                ndxTop = ndxTop << 3;
+                ndxSub = ndxSub << 3;
+                ndxTop += i;
+                ndxSub += i;
                 String toplayer =
                     Resources.getMsg(
                         context.getMeta(), I18N_TOPLAYER, I18N_TOPLAYER);
@@ -136,10 +171,27 @@
                     stateId,
                     hash));
             }
+            for (String loadDiameter: loadDiameters) {
+                int ndx = generateIndex(loadDiameter);
+                ndx = ndx << 3;
+                ndx += i;
+                newFacets.add(new BedloadDiameterDataFacet(
+                    ndx,
+                    BEDLOAD_DIAMETER_DATA,
+                    Resources.getMsg(
+                        context.getMeta(),
+                        I18N_FACET_BEDLOAD_DIAMETER_DATA,
+                        I18N_FACET_BEDLOAD_DIAMETER_DATA,
+                        new Object[] { loadDiameter.toUpperCase(),
+                            range.getFrom(), range.getTo()}),
+                    ComputeType.ADVANCE,
+                    stateId,
+                    hash));
+            }
         }
     }
 
-    private int generateIndex(String diameter, boolean b) {
+    private int generateIndex(String diameter) {
         int d = 0;
         if(diameter.equals("d10")) {
             d = 1;
@@ -189,12 +241,7 @@
         else if (diameter.equals("dm")) {
             d = 16;
         }
-        int ndx = d;
-        ndx = ndx << 1;
-        if (b) {
-            ndx += 1;
-        }
-        ndx = ndx << 3;
+        int ndx = d << 1;
         return ndx;
     }
 
@@ -238,39 +285,41 @@
                     hash));
 
             }
-            BedParametersResult[] bedParameters = result.getParameters();
-            for (int j = 0; j < bedParameters.length; j++) {
-                newFacets.add(new BedPorosityFacet((idx << 8) + j,
-                    BED_QUALITY_POROSITY_TOPLAYER,
-                    createPorosityTopLayerDescription(
-                        meta,
-                        bedParameters[j],
-                        range),
-                    ComputeType.ADVANCE, stateId, hash));
+            if (bedDiameter.length > 0) {
+                BedParametersResult[] bedParameters = result.getParameters();
+                for (int j = 0; j < bedParameters.length; j++) {
+                    newFacets.add(new BedPorosityFacet((idx << 8) + j,
+                        BED_QUALITY_POROSITY_TOPLAYER,
+                        createPorosityTopLayerDescription(
+                            meta,
+                            bedParameters[j],
+                            range),
+                        ComputeType.ADVANCE, stateId, hash));
 
-                newFacets.add(new BedPorosityFacet((idx << 8) + j,
-                    BED_QUALITY_POROSITY_SUBLAYER,
-                    createPorositySubLayerDescription(
-                        meta,
-                        bedParameters[j],
-                        range),
-                    ComputeType.ADVANCE, stateId, hash));
+                    newFacets.add(new BedPorosityFacet((idx << 8) + j,
+                        BED_QUALITY_POROSITY_SUBLAYER,
+                        createPorositySubLayerDescription(
+                            meta,
+                            bedParameters[j],
+                            range),
+                        ComputeType.ADVANCE, stateId, hash));
 
-                newFacets.add(new BedDensityFacet((idx << 8) + j,
-                    BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER,
-                    createDensityTopLayerDescription(
-                        meta,
-                        bedParameters[j],
-                        range),
-                    ComputeType.ADVANCE, stateId, hash));
+                    newFacets.add(new BedDensityFacet((idx << 8) + j,
+                        BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER,
+                        createDensityTopLayerDescription(
+                            meta,
+                            bedParameters[j],
+                            range),
+                        ComputeType.ADVANCE, stateId, hash));
 
-                newFacets.add(new BedDensityFacet((idx << 8) + j,
-                    BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER,
-                    createDensitySubLayerDescription(
-                        meta,
-                        bedParameters[j],
-                        range),
-                    ComputeType.ADVANCE, stateId, hash));
+                    newFacets.add(new BedDensityFacet((idx << 8) + j,
+                        BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER,
+                        createDensitySubLayerDescription(
+                            meta,
+                            bedParameters[j],
+                            range),
+                        ComputeType.ADVANCE, stateId, hash));
+                }
             }
         }
     }
--- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityGenerator.java	Tue Jun 11 09:18:30 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedQualityGenerator.java	Tue Jun 11 09:20:14 2013 +0200
@@ -195,7 +195,8 @@
                 artifactAndFacet, attr, visible);
         }
         else if (name.equals(BED_DIAMETER_DATA_TOP) ||
-                 name.equals(BED_DIAMETER_DATA_SUB)) {
+                 name.equals(BED_DIAMETER_DATA_SUB) ||
+                 name.equals(BEDLOAD_DIAMETER_DATA)) {
             doBedDiameterDataOut(
                 (BedDiameterData) artifactAndFacet.getData(context),
                 artifactAndFacet, attr, visible);

http://dive4elements.wald.intevation.org