diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java @ 3198:d35f28655fa6

Create and handle new manual line type facets. flys-artifacts/trunk@4814 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 27 Jun 2012 15:22:01 +0000
parents 5642a83420f2
children 049ccd2c5935
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java	Wed Jun 27 15:11:23 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java	Wed Jun 27 15:22:01 2012 +0000
@@ -3,10 +3,15 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import java.awt.geom.Point2D;
+
 import org.apache.log4j.Logger;
 
 import org.w3c.dom.Document;
 
+import org.json.JSONArray;
+import org.json.JSONException;
+
 import de.intevation.artifactdatabase.state.Facet;
 
 import de.intevation.artifacts.Artifact;
@@ -17,6 +22,9 @@
 
 import de.intevation.flys.artifacts.states.DefaultState;
 
+import de.intevation.flys.model.FastCrossSectionLine;
+
+import de.intevation.flys.geom.Lines;
 
 
 /**
@@ -24,7 +32,7 @@
  */
 public class ManualPointsArtifact
 extends      StaticFLYSArtifact
-implements   FacetTypes
+implements   FacetTypes, WaterLineArtifact
 {
     /** The logger for this class. */
     private static Logger logger = Logger.getLogger(ManualPointsArtifact.class);
@@ -70,6 +78,20 @@
     }
 
 
+    /**
+     * 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) {
@@ -90,6 +112,34 @@
 
 
     /**
+     * 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((String) 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".
+     */
+    @Override
+    public Lines.LineData getWaterLines(int index, FastCrossSectionLine csl) {
+        List<Point2D> points = csl.getPoints();
+        return Lines.createWaterLines(points, getLine(index));
+    }
+
+    /**
      * Determines Facets initial disposition regarding activity (think of
      * selection in Client ThemeList GUI). This will be checked one time
      * when the facet enters a collections describe document.

http://dive4elements.wald.intevation.org