Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/ManualPointsArtifact.java @ 9636:ac41551a8e4d
Bundu/Bzws: Error message for missing channel/year, Nachtrag Pos. 20: import of two levels of infrastructure types
author | mschaefer |
---|---|
date | Mon, 11 Nov 2019 16:29:36 +0100 |
parents | 3f49835a00c3 |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; 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.model.FacetTypes; import org.dive4elements.river.artifacts.states.DefaultState; 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 { private static final long serialVersionUID = 7096025125474986011L; /** The log for this class. */ private static Logger log = Logger.getLogger(ManualPointsArtifact.class); /** 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(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(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. * @return (String) value of data element (expect json). */ 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(final Artifact artifact, final Object context, final CallMeta meta) { log.debug("ManualPointsArtifact.initialize"); final List<Facet> fs = new ArrayList<>(); 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() + ")."); } } /** * Get value of line at index. * * @param index * index in json array defining lines. * @return water height of line at given index. */ private double getLine(final int index) { try { final JSONArray lines = new JSONArray(getLinesData(null)); final JSONArray array = lines.getJSONArray(index); return array.getDouble(0); } 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). */ @Override 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); } }