diff artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java @ 9425:3f49835a00c3

Extended CrossSectionFacet so it may fetch different data from within the artifact result. Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author gernotbelger
date Fri, 17 Aug 2018 15:31:02 +0200
parents 5e38e2924c07
children
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java	Fri Aug 17 14:29:05 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java	Fri Aug 17 15:31:02 2018 +0200
@@ -8,33 +8,28 @@
 
 package org.dive4elements.river.artifacts;
 
-import java.awt.geom.Point2D;
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.log4j.Logger;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.w3c.dom.Document;
-
 import org.dive4elements.artifactdatabase.state.Facet;
 import org.dive4elements.artifacts.Artifact;
 import org.dive4elements.artifacts.ArtifactFactory;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.artifacts.CallMeta;
-import org.dive4elements.river.artifacts.geom.Lines;
 import org.dive4elements.river.artifacts.model.FacetTypes;
 import org.dive4elements.river.artifacts.states.DefaultState;
-import org.dive4elements.river.model.FastCrossSectionLine;
-
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.w3c.dom.Document;
 
 /**
  * Artifact to store user-added points and water lines.
  */
-public class ManualPointsArtifact
-extends      StaticD4EArtifact
-implements   FacetTypes, WaterLineArtifact
-{
+public class ManualPointsArtifact extends StaticD4EArtifact implements FacetTypes, WaterLineArtifact {
+
     private static final long serialVersionUID = 7096025125474986011L;
 
     /** The log for this class. */
@@ -43,116 +38,101 @@
     /** The name of the artifact. */
     public static final String ARTIFACT_NAME = "manualpoints";
 
-
     public ManualPointsArtifact() {
         log.debug("ManualPointsArtifact.ManualPointsArtifact()");
     }
 
-
     /**
      * 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("ManualPointsArtifact.setup");
         super.setup(identifier, factory, context, callMeta, data, loadFacets);
         initialize(null, context, callMeta);
     }
 
-
     /** Return the name of this artifact. */
     @Override
     public String getName() {
         return ARTIFACT_NAME;
     }
 
-
     /** Access state data storing the jsonstring with points. */
-    public String getPointsData(String facetName) {
+    public String getPointsData(final String facetName) {
         return getDataAsString(facetName + ".data");
     }
 
-
     /**
      * Access state data storing the jsonstring with lines.
-     * @param facetName Name of facet or null if the so far
-     *                  only known case should be picked.
+     *
+     * @param facetName
+     *            Name of facet or null if the so far
+     *            only known case should be picked.
      * @return (String) value of data element (expect json).
      */
-    public String getLinesData(String facetName) {
+    private String getLinesData(final String facetName) {
         if (facetName == null)
             return getDataAsString("cross_section.manualpoints.lines");
         // TODO .lineS?
         return getDataAsString(facetName + ".line");
     }
 
-
     /** Setup state and facet. */
     @Override
-    protected void initialize(
-        Artifact artifact,
-        Object context,
-        CallMeta meta
-    ) {
+    protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) {
         log.debug("ManualPointsArtifact.initialize");
-        List<Facet> fs = new ArrayList<Facet>();
+        final List<Facet> fs = new ArrayList<>();
 
-        DefaultState state = (DefaultState) getCurrentState(context);
+        final DefaultState state = (DefaultState) getCurrentState(context);
         state.computeInit(this, hash(), context, meta, fs);
         if (!fs.isEmpty()) {
             log.debug("Facets to add in ManualPointsArtifact.initialize .");
             addFacets(getCurrentStateId(), fs);
-        }
-        else {
-            log.debug("No facets to add in ManualPointsArtifact.initialize ("
-                    + state.getID() + ").");
+        } else {
+            log.debug("No facets to add in ManualPointsArtifact.initialize (" + state.getID() + ").");
         }
     }
 
-
     /**
      * Get value of line at index.
-     * @param index index in json array defining lines.
+     *
+     * @param index
+     *            index in json array defining lines.
      * @return water height of line at given index.
      */
-    protected double getLine(int index) {
+    private double getLine(final int index) {
         try {
-            JSONArray lines = new JSONArray(getLinesData(null));
-            JSONArray array = lines.getJSONArray(index);
+            final JSONArray lines = new JSONArray(getLinesData(null));
+            final JSONArray array = lines.getJSONArray(index);
 
             return array.getDouble(0);
         }
-        catch(JSONException e){
-            log.error("Could not decode json for line.");
+        catch (final JSONException e) {
+            log.error("Could not decode json for line.", e);
             return 0d;
         }
     }
 
-
     /**
      * Get the water line "surface".
-     * @param index index of facets data.
-     * @param csl 'ground' against which to determine water surface.
-     * @param a (ignored in this implementation).
-     * @param b (ignored in this implementation).
-     * @param context (ignored in this implementation).
+     *
+     * @param index
+     *            index of facets data.
+     * @param csl
+     *            'ground' against which to determine water surface.
+     * @param a
+     *            (ignored in this implementation).
+     * @param b
+     *            (ignored in this implementation).
+     * @param context
+     *            (ignored in this implementation).
      */
     @Override
-    public Lines.LineData getWaterLines(
-            int                  index,
-            FastCrossSectionLine csl,
-            double a, double b,
-            CallContext context
-            ) {
-        List<Point2D> points = csl.getPoints();
-        return Lines.createWaterLines(points, getLine(index));
+    public double getWaterLevel(final ComputeType type, final String hash, final String stateId, final double currentKm, final Serializable waterLineIndex,
+            final double nextKm, final double prevKm, final CallContext context) {
+        final int index = (int) waterLineIndex;
+        return getLine(index);
     }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org