Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java @ 3318:dbe2f85bf160
merged flys-artifacts/2.8
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:35 +0200 |
parents | d9af29a4bb85 |
children | afc7bfb4800b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/ManualPointsArtifact.java Fri Sep 28 12:14:35 2012 +0200 @@ -0,0 +1,168 @@ +package de.intevation.flys.artifacts; + +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; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; + +import de.intevation.flys.artifacts.model.FacetTypes; + +import de.intevation.flys.artifacts.states.DefaultState; + +import de.intevation.flys.model.FastCrossSectionLine; + +import de.intevation.flys.artifacts.geom.Lines; + + +/** + * Artifact to store user-added points and water lines. + */ +public class ManualPointsArtifact +extends StaticFLYSArtifact +implements FacetTypes, WaterLineArtifact +{ + /** 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"; + + + /** + * Trivial Constructor. + */ + 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. */ + 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 ."); + facets.put(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((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". + * @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). + */ + @Override + public Lines.LineData getWaterLines( + int index, + FastCrossSectionLine csl, + double a, double b + ) { + 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. + * + * @param facetName name of the facet. + * @param index index of the facet. + * @return 0 if not active + */ + @Override + public int getInitialFacetActivity( + String outputName, + String facetName, + int index) + { + return 1; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :