diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java@a2735a4bf75e
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java	Thu Apr 25 12:06:39 2013 +0200
@@ -0,0 +1,145 @@
+package org.dive4elements.river.artifacts;
+
+import java.awt.geom.Point2D;
+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;
+
+
+/**
+ * Artifact to store user-added points and water lines.
+ */
+public class ManualPointsArtifact
+extends      StaticFLYSArtifact
+implements   FacetTypes, WaterLineArtifact
+{
+    private static final long serialVersionUID = 7096025125474986011L;
+
+    /** The logger for this class. */
+    private static Logger logger = Logger.getLogger(ManualPointsArtifact.class);
+
+    /** The name of the artifact. */
+    public static final String ARTIFACT_NAME = "manualpoints";
+
+
+    public ManualPointsArtifact() {
+        logger.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)
+    {
+        logger.debug("ManualPointsArtifact.setup");
+        super.setup(identifier, factory, context, callMeta, data);
+        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) {
+        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.
+     * @return (String) value of data element (expect json).
+     */
+    public String getLinesData(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) {
+        logger.debug("ManualPointsArtifact.initialize");
+        List<Facet> fs = new ArrayList<Facet>();
+
+        DefaultState state = (DefaultState) getCurrentState(context);
+        state.computeInit(this, hash(), context, meta, fs);
+        if (!fs.isEmpty()) {
+            logger.debug("Facets to add in ManualPointsArtifact.initialize .");
+            addFacets(getCurrentStateId(), fs);
+        }
+        else {
+            logger.debug("No facets to add in ManualPointsArtifact.initialize ("
+                    + state.getID() + ").");
+        }
+    }
+
+
+    /**
+     * Get value of line at index.
+     * @param index index in json array defining lines.
+     * @return water height of line at given index.
+     */
+    protected double getLine(int index) {
+        try {
+            JSONArray lines = new JSONArray(getLinesData(null));
+            JSONArray array = lines.getJSONArray(index);
+
+            return array.getDouble(0);
+        }
+        catch(JSONException e){
+            logger.error("Could not decode json for line.");
+            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).
+     */
+    @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));
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org