# HG changeset patch # User Felix Wolfsteller # 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 facets) { + return getSedimentDensity(); + } + }; + } + + + /** Create a new state with bogus output. */ + protected State spawnState() { + state = newDensityState(); + List 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 fs = new ArrayList(); + + 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 getStates(Object context) { + ArrayList states = new ArrayList(); + 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 :