# HG changeset patch # User Felix Wolfsteller # Date 1326788270 0 # Node ID a202a9e048a5716c413ff843d124b402514342d5 # Parent 907322e269e347bbd522cdffc6701a9a8ed3df04 Made StaticWQKmsArtifact a fully featured Artifact. flys-artifacts/trunk@3694 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue Jan 17 08:09:03 2012 +0000 +++ b/flys-artifacts/ChangeLog Tue Jan 17 08:17:50 2012 +0000 @@ -1,3 +1,20 @@ +2012-01-17 Felix Wolfsteller + + "Ported" StaticWQKmsArtifact to use compute-type caching mechanism. + + * doc/conf/artifacts/staticwqkms.xml: Declare trivial info. + + * doc/conf/conf.xml: Register staticwqkms artifact and factory. + + * src/main/java/de/intevation/flys/artifacts/model/WQKmsFacet.java: + Sublacss DataFacet. + + * src/main/java/de/intevation/flys/artifacts/states/StaticWQKmsState.java: + New. State. + + * src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java: + Refactored. Most computation and stuff now done in State and Facet. + 2012-01-17 Felix Wolfsteller * src/main/java/de/intevation/flys/artifacts/states/WaterlevelState.java: diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/doc/conf/artifacts/staticwqkms.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/doc/conf/artifacts/staticwqkms.xml Tue Jan 17 08:17:50 2012 +0000 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Tue Jan 17 08:09:03 2012 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Tue Jan 17 08:17:50 2012 +0000 @@ -68,6 +68,9 @@ de.intevation.artifactdatabase.DefaultArtifactFactory + de.intevation.artifactdatabase.DefaultArtifactFactory de.intevation.artifactdatabase.DefaultArtifactFactory @@ -131,6 +134,7 @@ + diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java Tue Jan 17 08:09:03 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java Tue Jan 17 08:17:50 2012 +0000 @@ -8,24 +8,21 @@ 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.artifacts.common.utils.XMLUtils; + import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.WQKms; -import de.intevation.flys.artifacts.model.WQKmsFacet; import de.intevation.flys.artifacts.model.WKmsFactory; import de.intevation.flys.artifacts.model.WQKmsFactory; -import de.intevation.flys.artifacts.states.StaticState; -import de.intevation.flys.artifacts.resources.Resources; +import de.intevation.flys.artifacts.states.DefaultState; -import de.intevation.artifacts.common.utils.XMLUtils; /** * Artifact to access additional "waterlevel/discharge"-type of data, like @@ -49,9 +46,6 @@ public static final String STATIC_STATE_NAME = "state.additional_wqkms.static"; - /** One and only state to be in. */ - protected transient State state = null; - /** * Trivial Constructor. @@ -74,15 +68,12 @@ { logger.debug("StaticWQKmsArtifact.setup"); - state = new StaticState(STATIC_STATE_NAME); + // Store the 'ids' (from datacage). + logger.debug("StaticWQKmsArtiact.setup" + XMLUtils.toString(data)); - List fs = new ArrayList(); - logger.debug(XMLUtils.toString(data)); String code = XMLUtils.xpathString( data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); - - // TODO Go for JSON, one day. - //ex.: flood_protection-wstv-114-12 + addStringData("ids", code); if (code != null) { String [] parts = code.split("-"); @@ -92,54 +83,15 @@ addStringData("col_pos", parts[2]); addStringData("wst_id", parts[3]); - - String wkmsName = WKmsFactory.getWKmsName(col, wst); - - String name; - if (parts[0].equals(HEIGHTMARKS_POINTS)) { - name = HEIGHTMARKS_POINTS; - } - else { - name = STATIC_WQKMS; - } - - Facet facet = new WQKmsFacet( - name, - Resources.getMsg( - callMeta, - wkmsName, - wkmsName)); - fs.add(facet); - facets.put(state.getID(), fs); } } - spawnState(); + // Do this AFTER we have set the col_pos etc. super.setup(identifier, factory, context, callMeta, data); } /** - * Initialize the static state with output. - * @return static state - * @TODO merge with StaticWKmsArtifact implementation. - */ - protected State spawnState() { - state = new StaticState(STATIC_STATE_NAME); - List fs = facets.get(STATIC_STATE_NAME); - DefaultOutput output = new DefaultOutput( - "general", - "general", - "image/png", - fs, - "chart"); - - state.getOutputs().add(output); - return state; - } - - - /** * Called via setup. * * @param artifact The master-artifact. @@ -152,69 +104,42 @@ { logger.debug("StaticWQKmsArtifact.initialize"); WINFOArtifact winfo = (WINFOArtifact) artifact; - // TODO: The river is of no interest, so far. + // TODO: The river is of no interest, so far., also use importData 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(); - } - + List fs = new ArrayList(); - /** - * 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(); + DefaultState state = (DefaultState) getCurrentState(context); + state.computeInit(this, hash(), context, meta, fs); + if (!fs.isEmpty()) { + logger.debug("Facets to add in StaticWQKmsArtifact.initialize ."); + facets.put(getCurrentStateId(), fs); + } + else { + logger.debug("No facets to add in StaticWQKmsArtifact.initialize (" + + state.getID() + ")."); + } } /** * Get WQKms from factory. - * @param TODO idx param is not needed * @return WQKms according to parameterization (can be null); */ - public WQKms getWQKms(int idx) { + public WQKms getWQKms() { logger.debug("StaticWQKmsArtifact.getWQKms"); - return WQKmsFactory.getWQKms( + int col = Integer.valueOf(getDataAsString("col_pos")); + int wst = Integer.valueOf(getDataAsString("wst_id")); + + /** TODO do not run twice against db to do this. */ + String wkmsName = WKmsFactory.getWKmsName(col, wst); + + WQKms res = WQKmsFactory.getWQKms( Integer.valueOf(getDataAsString("col_pos")), Integer.valueOf(getDataAsString("wst_id"))); + res.setName(wkmsName); + return res; } @@ -236,5 +161,13 @@ { return 0; } + + + /** Return specific name. */ + public String getName() { + return "staticwqkms"; + } + + // TODO implement deepCopy. } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFacet.java Tue Jan 17 08:09:03 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WQKmsFacet.java Tue Jan 17 08:17:50 2012 +0000 @@ -1,29 +1,42 @@ package de.intevation.flys.artifacts.model; +import org.apache.log4j.Logger; + import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; -import de.intevation.artifactdatabase.state.DefaultFacet; - import de.intevation.flys.artifacts.StaticWQKmsArtifact; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.states.DefaultState; +import de.intevation.flys.artifacts.states.DefaultState.ComputeType; + + /** * Facet to show W|Q|km Values. + * We have following 'Types' (from FacetTypes): + * String STATIC_WQKMS = "other.wqkms"; + * String STATIC_WQMS_W = "other.wqkms.w"; + * String STATIC_WQKMS_Q = "other.wqkms.q"; */ public class WQKmsFacet -extends DefaultFacet +extends DataFacet implements FacetTypes { + /** House logger. */ + private static Logger logger = Logger.getLogger(WQKmsFacet.class); + /** Trivial Constructor. */ public WQKmsFacet(String description) { this(STATIC_WQKMS, description); } + + /** + * @param name Name of this facet (we have at least two flavors (w and q). + */ public WQKmsFacet(String name, String description) { - this.name = name; - this.description = description; - this.index = 0; + super(0, name, description, ComputeType.FEED, null, null); } @@ -37,9 +50,13 @@ */ @Override public Object getData(Artifact artifact, CallContext context) { + logger.debug("WQKmsFacet.getData"); + StaticWQKmsArtifact staticData = (StaticWQKmsArtifact) artifact; - return staticData.getWQKms(0); + Object res = staticData.compute(context, hash, stateId, type, false); + + return res; } diff -r 907322e269e3 -r a202a9e048a5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/StaticWQKmsState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/StaticWQKmsState.java Tue Jan 17 08:17:50 2012 +0000 @@ -0,0 +1,140 @@ +package de.intevation.flys.artifacts.states; + +import java.util.List; + +import org.apache.log4j.Logger; + +import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.CallMeta; + +import de.intevation.artifactdatabase.state.Facet; + +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.StaticWQKmsArtifact; + +import de.intevation.flys.artifacts.model.DataFacet; +import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WQKms; +import de.intevation.flys.artifacts.model.WQKmsFacet; + +import de.intevation.flys.artifacts.resources.Resources; + + +/** + * Only state of WQKmsArtifact. + */ +public class StaticWQKmsState +extends DefaultState +implements FacetTypes +{ + /** The logger that is used in this state. */ + private static Logger logger = Logger.getLogger(StaticWQKmsState.class); + + + /** + * From this state can not be continued. + */ + @Override + protected String getUIProvider() { + return "noinput"; + } + + + /** + * Compute, create Facets, do the same stuff as all the other states do. + */ + protected Object compute( + StaticWQKmsArtifact winfo, + CallMeta metaLocale, + String hash, + List facets, + Object old + ) { + String id = getID(); + + WQKms res = old instanceof WQKms + ? (WQKms)old + : winfo.getWQKms(); + + WQKms wqkms = res; + + if (facets == null) { + return res; + } + + /* + * TODO: re-enable HEIGHTMARKS_POINTS-thing + + String name; + if (parts[0].equals(HEIGHTMARKS_POINTS)) { + name = HEIGHTMARKS_POINTS; + } + else { + name = STATIC_WQKMS; + } + */ + + String wkmsName = wqkms.getName(); + Facet qfacet = new WQKmsFacet( + STATIC_WQKMS_Q, + wkmsName + // TODO re-enable translations. + /* + Resources.getMsg( + metaLocale, + wkmsName, + wkmsName)*/); + facets.add(qfacet); + + wkmsName = "W (" + wkmsName + ")"; + + Facet wfacet = new WQKmsFacet( + STATIC_WQKMS_W, + wkmsName + /* + // TODO re-enable translations. + Resources.getMsg( + metaLocale, + wkmsName, + wkmsName)*/); + facets.add(wfacet); + + return res; + } + + + /** + * Get data, create the facets. + * + * @param context Ignored. + */ + @Override + public Object computeFeed( + FLYSArtifact artifact, + String hash, + CallContext context, + List facets, + Object old + ) { + return compute((StaticWQKmsArtifact) artifact, context.getMeta(), + hash, facets, old); + } + + + /** + * Create the facets. + * @param context Ignored. + */ + @Override + public Object computeInit( + FLYSArtifact artifact, + String hash, + Object context, + CallMeta meta, + List facets + ) { + return compute((StaticWQKmsArtifact) artifact, meta, hash, facets, + null); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :