Mercurial > dive4elements > river
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.