diff artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java @ 8961:8a1c6e2ad48b

Implemented datacage for min/max bedheights. Allow to add min/max bed heights as themes to charts.
author gernotbelger
date Wed, 28 Mar 2018 14:35:01 +0200
parents 5e38e2924c07
children 45f1ad66560e
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java	Wed Mar 28 14:34:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java	Wed Mar 28 14:35:01 2018 +0200
@@ -12,47 +12,42 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
-import org.w3c.dom.Document;
-
 import org.dive4elements.artifactdatabase.state.DefaultOutput;
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifactdatabase.state.FacetActivity;
+import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.ArtifactFactory;
-import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.CallMeta;
 import org.dive4elements.artifacts.common.utils.XMLUtils;
 import org.dive4elements.river.artifacts.model.FacetTypes;
 import org.dive4elements.river.artifacts.model.minfo.BedHeightFacet;
-import org.dive4elements.river.artifacts.model.minfo.BedHeightFactory;
+import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet;
+import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet.BedHeightValueType;
 import org.dive4elements.river.artifacts.model.minfo.BedHeightSoundingWidthFacet;
+import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.states.StaticState;
-
-import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.exports.process.BedHeightProcessor;
+import org.w3c.dom.Document;
 
-public class BedHeightsArtifact
-extends      AbstractStaticStateArtifact
-implements   FacetTypes
-{
+public class BedHeightsArtifact extends AbstractStaticStateArtifact implements FacetTypes {
     /** The log for this class. */
-    private static Logger log =
-        Logger.getLogger(BedHeightsArtifact.class);
+    private static Logger log = Logger.getLogger(BedHeightsArtifact.class);
 
     /** Artifact name. */
     private static final String NAME = "bedheights";
 
     static {
         // TODO: Move to configuration.
-        FacetActivity.Registry.getInstance()
-            .register(NAME, FacetActivity.INACTIVE);
+        FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE);
     }
 
-    public static final String STATIC_STATE_NAME =
-        "state.additional_bedheights.static";
+    public static final String STATIC_STATE_NAME = "state.additional_bedheights.static";
 
-    /** Data Item name to know whether we are Heighmarks and receive
-     * some data slightly different. */
-    public static final String DATA_HEIGHT_TYPE =
-        "height_marks";
+    /**
+     * Data Item name to know whether we are Heighmarks and receive
+     * some data slightly different.
+     */
+    public static final String DATA_HEIGHT_TYPE = "height_marks";
 
     /**
      * Trivial Constructor.
@@ -70,74 +65,61 @@
      * Gets called from factory, to set things up.
      */
     @Override
-    public void setup(
-        String          identifier,
-        ArtifactFactory factory,
-        Object          context,
-        CallMeta        callMeta,
-        Document        data,
-        List<Class>     loadFacets)
-    {
+    public void setup(final String identifier, final ArtifactFactory factory, final Object context, final CallMeta callMeta, final Document data,
+            final List<Class> loadFacets) {
         log.debug("BedHeightsArtifact.setup");
 
         if (log.isDebugEnabled()) {
             log.debug(XMLUtils.toString(data));
         }
 
-        String code = getDatacageIDValue(data);
-
-        if (code != null) {
-            String [] parts = code.split("-");
-
-            if (parts.length >= 3) {
-                // The setting is a bit complicated:
-                // This artifact can spawn epoch type bedheight facets,
-                // 'singlevalue'/singleyear bedheight facets or
-                // sounding-width facets. The type is indicated by
-                // the ids-param which comes from datacage.
-
-                String name = parts[0];
-                String type = parts[1];
-                String facetType = BEDHEIGHT;
-                if (type.equals("soundings")) {
-                    type = "singlevalues";
-                    facetType = BEDHEIGHT_SOUNDING_WIDTH;
-                }
-                addStringData("height_id", parts[2]);
-                addStringData("type", type);
-                String btype = type;
-                int hId = Integer.parseInt(parts[2]);
+        final String code = getDatacageIDValue(data);
 
-                if (type.equals("singlevalues")) {
-                    btype = "single";
-                }
-
-                String bedHName = BedHeightFactory.getHeightName(btype, hId);
+        createFacets(callMeta, code);
 
-                Facet facet =  null;
-                if (facetType.equals(BEDHEIGHT_SOUNDING_WIDTH)) {
-                    bedHName = Resources.getMsg(
-                        callMeta,
-                        "facet.bedheight.sounding_width",
-                        new Object[] { bedHName });
-                    facet = new BedHeightSoundingWidthFacet(
-                        facetType, bedHName);
-                }
-                else {
-                    facet = new BedHeightFacet(facetType, bedHName);
-                }
+        super.setup(identifier, factory, context, callMeta, data, loadFacets);
+    }
 
-
-                ArrayList<Facet> facets = new ArrayList<Facet>(1);
-                facets.add(facet);
+    private void createFacets(final CallMeta callMeta, final String code) {
+        if (code == null)
+            return;
 
-                addFacets(STATIC_STATE_NAME, facets);
-            }
-            else {
-                log.error("Invalid datacage ID '" + code + "'");
-            }
+        final String[] parts = code.split("-", 5);
+        if (parts.length < 5) {
+            log.error("Invalid datacage ID '" + code + "'");
+            return;
         }
-        super.setup(identifier, factory, context, callMeta, data, loadFacets);
+
+        // String name = parts[0];
+
+        // type may only be 'single' or 'soundings'
+        final String type = parts[1];
+
+        final String heightId = parts[2];
+        // final int hId = Integer.parseInt(heightId);
+
+        // final String year = parts[3];
+        final String bedHName = parts[4];
+
+        addStringData("height_id", heightId);
+        if (type.equals("soundings"))
+            addStringData("type", "singlevalues");
+        else
+            addStringData("type", type);
+
+        final ArrayList<Facet> facets = new ArrayList<>(1);
+
+        if ("soundings".equals(type)) {
+            final String description = Resources.getMsg(callMeta, "facet.bedheight.sounding_width", new Object[] { bedHName });
+            facets.add(new BedHeightSoundingWidthFacet(BEDHEIGHT_SOUNDING_WIDTH, description));
+        } else if ("single".equals(type))
+            facets.add(new BedHeightFacet(BEDHEIGHT, bedHName));
+        else if ("singleMin".equals(type))
+            facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MIN, bedHName, BedHeightValueType.min));
+        else if ("singleMax".equals(type))
+            facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MAX, bedHName, BedHeightValueType.max));
+
+        addFacets(STATIC_STATE_NAME, facets);
     }
 
     @Override
@@ -145,14 +127,10 @@
 
         log.debug("initStaticState " + getName() + " " + identifier());
 
-        StaticState state = new StaticState(STATIC_STATE_NAME);
-        DefaultOutput output = new DefaultOutput(
-                "general",
-                "general",
-                "image/png",
-                "chart");
+        final StaticState state = new StaticState(STATIC_STATE_NAME);
+        final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart");
 
-        List<Facet> facets = getFacets(STATIC_STATE_NAME);
+        final List<Facet> facets = getFacets(STATIC_STATE_NAME);
         output.addFacets(facets);
         state.addOutput(output);
 
@@ -160,20 +138,15 @@
     }
 
     @Override
-    protected void initialize(
-        Artifact artifact,
-        Object context,
-        CallMeta meta
-    ) {
+    protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) {
         // do not clone facets, etc. from master artifact
 
         log.debug("initialize");
-        importData((D4EArtifact)artifact, "river");
-        importData((D4EArtifact)artifact, "ld_from");
-        importData((D4EArtifact)artifact, "ld_to");
+        importData((D4EArtifact) artifact, "river");
+        importData((D4EArtifact) artifact, "ld_from");
+        importData((D4EArtifact) artifact, "ld_to");
 
         log.debug("ld_from " + getDataAsString("ld_from"));
         log.debug("ld_to " + getDataAsString("ld_to"));
     }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org