diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWQKmsArtifact.java @ 2124:a202a9e048a5

Made StaticWQKmsArtifact a fully featured Artifact. flys-artifacts/trunk@3694 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 17 Jan 2012 08:17:50 +0000
parents 64ffc371afe7
children 79a94c4171cb
line wrap: on
line diff
--- 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<Facet> fs = new ArrayList<Facet>();
-        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<Facet> 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<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();
-    }
-
+        List<Facet> fs = new ArrayList<Facet>();
 
-    /**
-     * 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 :

http://dive4elements.wald.intevation.org