# HG changeset patch # User Felix Wolfsteller # Date 1318942572 0 # Node ID 690037105542b8be966725bec5bb59d2cd7b7c1d # Parent fb4fb1c67c35827050f0ac6cddbb8e070664ac03 Added new Artifact and Facet to access 'static' data via WKmsFactory. flys-artifacts/trunk@3005 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r fb4fb1c67c35 -r 690037105542 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue Oct 18 12:44:02 2011 +0000 +++ b/flys-artifacts/ChangeLog Tue Oct 18 12:56:12 2011 +0000 @@ -1,3 +1,17 @@ +2011-10-18 Felix Wolfsteller + + Add a new Artifact and Facet (StaticWKmsArtifact, WKmsFacet) to + access WKms obtainable with the WKmsFactory. + + * src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java: + New, artifact with single state to get WKms from WKmsFactory. + + * src/main/java/de/intevation/flys/artifacts/model/WKmsFacet.java: + New Facet to display W over km. + + * src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java: + Added new type name. + 2011-10-18 Felix Wolfsteller Add WKMsFactory to access 'static' wst-data. diff -r fb4fb1c67c35 -r 690037105542 flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java Tue Oct 18 12:56:12 2011 +0000 @@ -0,0 +1,208 @@ +package de.intevation.flys.artifacts; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; + +import de.intevation.artifactdatabase.state.Facet; +import de.intevation.artifactdatabase.state.DefaultOutput; +import de.intevation.artifactdatabase.state.State; + +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallMeta; + +import de.intevation.flys.artifacts.model.WKms; +import de.intevation.flys.artifacts.model.WKmsFacet; +import de.intevation.flys.artifacts.model.WstValueTable; +import de.intevation.flys.artifacts.model.WstValueTableFactory; +import de.intevation.flys.artifacts.model.WKmsFactory; + +import de.intevation.flys.artifacts.states.StaticState; +import de.intevation.flys.artifacts.resources.Resources; + +import de.intevation.flys.utils.FLYSUtils; +import de.intevation.artifacts.common.utils.XMLUtils; + + +/** + * Artifact to access additional "waterlevel"-type of data, like the height + * of protective measures (dikes). + * + * This artifact neglects (Static)FLYSArtifacts capabilities of interaction + * with the StateEngine by overriding the getState*-methods. + */ +public class StaticWKmsArtifact +extends StaticFLYSArtifact +{ + /** The logger for this class. */ + private static Logger logger = + Logger.getLogger(StaticWKmsArtifact.class); + + /** XPath to access initial parameter. */ + public static final String XPATH_DATA = + "/art:action/art:ids/@value"; + + /** One and only state to be in. */ + protected transient State state = null; + + protected int col_pos; + + protected int wst_id; + + + /** + * Trivial Constructor. + */ + public StaticWKmsArtifact() { + logger.debug("StaticWKmsArtifact.StaticWKmsArtifact"); + } + + + /** + * Gets called from factory, to set things up. + */ + @Override + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta callMeta, + Document data) + { + logger.debug("StaticWKmsArtifact.setup"); + + state = new StaticState( + "state.additional_wkms.static", + "state.additional_wkms.static"); + List fs = new ArrayList(); + logger.debug(XMLUtils.toString(data)); + String code = XMLUtils.xpathString( + data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); + + logger.debug("makes: " + code); + + //ex.: flood_protection-wstv-114-12 + if (code != null) { + String [] parts = code.split("-"); + int col = Integer.valueOf(parts[2]); + int wst = Integer.valueOf(parts[3]); + // These shall be put in data (addData) + this.col_pos = col; + this.wst_id = wst; + // addDataAsString? + } + + // Will get col_id and wst_id + + Facet facet = new WKmsFacet(Resources.getMsg(callMeta, + "facet.discharge_curves.mainvalues.w", + "facet.discharge_curves.mainvalues.w")); + fs.add(facet); + facets.put(state.getID(), fs); + + spawnState(); + super.setup(identifier, factory, context, callMeta, data); + } + + + /** + * Initialize the static state with output. + */ + protected State spawnState() { + state = new StaticState( + "state.additional_wkms.static", + "state.additional_wkms.static"); + List fs = (List) facets.get("state.additional_wkms.static"); + DefaultOutput output = new DefaultOutput( + "w_differences", + "w_differences.longitudinal_section", "image/png", + fs, + "chart"); + // TODO: also add longitudinal_section output? + + state.getOutputs().add(output); + return state; + } + + + /** + * Called via setup. + */ + @Override + protected void initialize(Artifact artifact, Object context, CallMeta meta) { + logger.debug("StaticWKmsArtifact.initialize"); + WINFOArtifact winfo = (WINFOArtifact) artifact; + // TODO: The river is of no interest, so far. + addData("river", winfo.getData("river")); + } + + + /** + * 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) { + if (state != null) + return state; + else + return spawnState(); + } + + + /** + * Get WKms from factory. + * @param TODO idx param is not needed + * @return WKms according to parameterization (can be null); + */ + public WKms getWKms(int idx) { + logger.debug("StaticWKmsArtifact.getWKms"); + + // TODO KIND is not needed. + return WKmsFactory.getWKms( + WKmsFactory.KIND_PROTECTION, + this.col_pos, + this.wst_id); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r fb4fb1c67c35 -r 690037105542 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Tue Oct 18 12:44:02 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FacetTypes.java Tue Oct 18 12:56:12 2011 +0000 @@ -29,6 +29,8 @@ String DURATION_W = "duration_curve.w"; String DURATION_Q = "duration_curve.q"; + String STATIC_WKMS = "other.wkms"; + String CSV = "csv"; String WST = "wst"; String AT = "at"; diff -r fb4fb1c67c35 -r 690037105542 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKmsFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WKmsFacet.java Tue Oct 18 12:56:12 2011 +0000 @@ -0,0 +1,53 @@ +package de.intevation.flys.artifacts.model; + +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.CallContext; + +import de.intevation.artifactdatabase.state.DefaultFacet; + +import de.intevation.flys.artifacts.StaticWKmsArtifact; +import de.intevation.flys.artifacts.model.FacetTypes; + +/** + * Facet to show W|km Values. + */ +public class WKmsFacet +extends DefaultFacet +implements FacetTypes { + + /** Trivial Constructor. */ + public WKmsFacet(String description) { + this.description = description; + name = STATIC_WKMS; + index = 0; + } + + + /** + * Returns the data this facet requires. + * + * @param artifact the owner artifact. + * @param context the CallContext (ignored). + * + * @return the data. + */ + @Override + public Object getData(Artifact artifact, CallContext context) { + StaticWKmsArtifact staticData = + (StaticWKmsArtifact) artifact; + return staticData.getWKms(0); + } + + + /** + * Create a deep copy of this Facet. + * @return a deep copy. + */ + @Override + public WKmsFacet deepCopy() { + WKmsFacet copy = new WKmsFacet(description); + copy.set(this); + return copy; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :