[PATCH 03 of 19] issue1435: Stubs for SedimentDensityFacet and -Artifact
Wald Commits
scm-commit at wald.intevation.org
Mon Sep 30 17:30:28 CEST 2013
# HG changeset patch
# User Felix Wolfsteller <felix.wolfsteller at intevation.de>
# Date 1380526689 -7200
# Node ID baf04164fcc616a365d990626f02ab21296208f6
# Parent f707ee04ac8075777383e110c7f0fdd1f62a6478
issue1435: Stubs for SedimentDensityFacet and -Artifact.
diff -r f707ee04ac80 -r baf04164fcc6 artifacts/src/main/java/org/dive4elements/river/artifacts/SedimentDensityArtifact.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/SedimentDensityArtifact.java Mon Sep 30 09:38:09 2013 +0200
@@ -0,0 +1,226 @@
+/* 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.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Document;
+
+import org.dive4elements.artifactdatabase.state.DefaultOutput;
+import org.dive4elements.artifactdatabase.state.Facet;
+import org.dive4elements.artifactdatabase.state.FacetActivity;
+import org.dive4elements.artifactdatabase.state.State;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.ArtifactFactory;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.minfo.SedimentDensity;
+import org.dive4elements.river.artifacts.model.minfo.SedimentDensityFacet;
+import org.dive4elements.river.artifacts.model.minfo.SedimentDensityFactory;
+import org.dive4elements.river.artifacts.states.StaticState;
+
+import org.dive4elements.river.artifacts.model.FacetTypes;
+
+import org.dive4elements.river.utils.Formatter;
+
+
+/** Artifact to access sediment density measurements. */
+public class SedimentDensityArtifact
+extends StaticD4EArtifact
+implements FacetTypes
+{
+ /** The logger for this class. */
+ private static Logger logger =
+ Logger.getLogger(SedimentDensityArtifact.class);
+
+ /** Artifact key name. */
+ private static final String NAME = "sedimentdensity";
+
+ /** Spawn only inactive facets. */
+ static {
+ // TODO: Move to configuration.
+ FacetActivity.Registry.getInstance()
+ .register(NAME, FacetActivity.INACTIVE);
+ }
+
+ /** Need to give the state an id. */
+ public static final String STATIC_STATE_NAME =
+ "state.sedimentdensity.static";
+
+ /** One and only state to be in. */
+ protected transient State state = null;
+
+ protected String DATA_ID = "ID";
+ protected String DATA_YEAR = "YEAR";
+
+ /**
+ * Trivial Constructor.
+ */
+ public SedimentDensityArtifact() {
+ logger.debug("SedimentDensityArtifact.SedimentDensityArtifact");
+ }
+
+
+ /** Get artifact key name. */
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+
+ private Object getSedimentDensity() {
+ logger.debug("SedimentDensityArtifact.getSedimentDensity");
+ Integer id = getDataAsInteger(DATA_ID);
+ Integer year = getDataAsInteger(DATA_YEAR);
+
+ // TODO use cache if possible
+ return SedimentDensityFactory.getSedimentDensityUncached(id, year);
+ }
+
+
+ private State newDensityState() {
+ return new StaticState(STATIC_STATE_NAME) {
+ public Object staticCompute(List<Facet> facets) {
+ return getSedimentDensity();
+ }
+ };
+ }
+
+
+ /** Create a new state with bogus output. */
+ protected State spawnState() {
+ state = newDensityState();
+ List<Facet> fs = getFacets(STATIC_STATE_NAME);
+ DefaultOutput output = new DefaultOutput(
+ "general",
+ "general",
+ "image/png",
+ fs,
+ "chart");
+
+ state.getOutputs().add(output);
+
+ return state;
+ }
+
+
+ /**
+ * Gets called from factory, to set things up.
+ */
+ @Override
+ public void setup(
+ String identifier,
+ ArtifactFactory factory,
+ Object context,
+ CallMeta callMeta,
+ Document data)
+ {
+ logger.debug("SedimentDensityArtifact.setup");
+
+ // Store id, yield yields.
+ state = newDensityState();
+ if (logger.isDebugEnabled()) {
+ logger.debug(XMLUtils.toString(data));
+ }
+
+ List<Facet> fs = new ArrayList<Facet>();
+
+ String code = getDatacageIDValue(data);
+
+ if (code != null) {
+ //String name = SedimentDensityFactory.getSedimentDensityDescription(Integer.valueOf(code));
+ //id: and year?
+
+ String name = "facet";
+
+ Facet facet = new SedimentDensityFacet(
+ 0,
+ SEDIMENT_LOAD_COARSE,
+ name,
+ //????
+ ComputeType.ADVANCE, state.getID(), "hash"
+ );
+ fs.add(facet);
+ addFacets(state.getID(), fs);
+ addStringData(DATA_ID, code);
+ addStringData(DATA_YEAR, code);
+ }
+
+ spawnState();
+ super.setup(identifier, factory, context, callMeta, data);
+ }
+
+
+ /**
+ * Get a list containing the one and only State.
+ * @param context ignored.
+ * @return list with one and only state.
+ */
+ @Override
+ protected List<State> getStates(Object context) {
+ ArrayList<State> states = new ArrayList<State>();
+ states.add(getState());
+ return states;
+ }
+
+
+ /**
+ * Get the "current" state (there is but one).
+ * @param cc ignored.
+ * @return the "current" (only possible) state.
+ */
+ @Override
+ public State getCurrentState(Object cc) {
+ return getState();
+ }
+
+
+ /**
+ * Get the only possible state.
+ * @return the state.
+ */
+ protected State getState() {
+ return getState(null, null);
+ }
+
+
+ /**
+ * Get the state.
+ * @param context ignored.
+ * @param stateID ignored.
+ * @return the state.
+ */
+ @Override
+ protected State getState(Object context, String stateID) {
+ return (state != null)
+ ? state
+ : spawnState();
+ }
+
+
+ /**
+ * Called via setup. Overridden to avoid cloning all data.
+ *
+ * @param artifact The master-artifact.
+ */
+ @Override
+ protected void initialize(
+ Artifact artifact,
+ Object context,
+ CallMeta meta)
+ {
+ logger.debug("SedimentDensityArtifact.initialize");
+ }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
diff -r f707ee04ac80 -r baf04164fcc6 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensityFacet.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensityFacet.java Mon Sep 30 09:38:09 2013 +0200
@@ -0,0 +1,83 @@
+/* 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.model.minfo;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import gnu.trove.TDoubleArrayList;
+
+import org.dive4elements.artifactdatabase.state.Facet;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+
+import org.dive4elements.river.artifacts.D4EArtifact;
+
+import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.DataFacet;
+import org.dive4elements.river.artifacts.model.FacetTypes;
+
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+
+import org.dive4elements.river.utils.RiverUtils;
+
+import org.apache.log4j.Logger;
+
+
+/** Facet to access sediment density values measured in one year. */
+public class SedimentDensityFacet
+extends DataFacet
+{
+ /** Very own logger. */
+ private static Logger logger = Logger.getLogger(SedimentDensityFacet.class);
+
+ /** Used as tolerance value when fetching measurement stations. */
+ private static double EPSILON = 1e-5;
+
+
+ public SedimentDensityFacet() {
+ }
+
+ public SedimentDensityFacet(int idx, String name, String description,
+ ComputeType type, String stateId, String hash) {
+ super(idx, name, description, type, hash, stateId);
+ }
+
+ @Override
+ public Object getData(Artifact artifact, CallContext context) {
+ logger.debug("Get data for sediment density at index: " + index);
+
+ D4EArtifact flys = (D4EArtifact) artifact;
+
+ CalculationResult res = (CalculationResult) flys.compute(context, hash,
+ stateId, type, false);
+
+ if (res == null) {
+ logger.error("No CalculationResult");
+ }
+
+ return null;
+ }
+
+
+ /** Copy deeply. */
+ @Override
+ public Facet deepCopy() {
+ SedimentDensityFacet copy = new SedimentDensityFacet();
+ copy.set(this);
+ copy.type = type;
+ copy.hash = hash;
+ copy.stateId = stateId;
+ return copy;
+ }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
More information about the Dive4elements-commits
mailing list