felix@1825: package de.intevation.flys.artifacts;
felix@1825: 
felix@1825: import java.util.ArrayList;
felix@1825: import java.util.List;
felix@1825: 
felix@1825: import org.apache.log4j.Logger;
felix@1825: 
felix@1825: import org.w3c.dom.Document;
felix@1825: 
felix@1825: import de.intevation.artifactdatabase.state.Facet;
felix@1825: 
felix@1825: import de.intevation.artifacts.Artifact;
felix@1825: import de.intevation.artifacts.ArtifactFactory;
felix@1825: import de.intevation.artifacts.CallMeta;
felix@1825: 
felix@2124: import de.intevation.artifacts.common.utils.XMLUtils;
felix@2124: 
felix@1825: import de.intevation.flys.artifacts.model.FacetTypes;
felix@1825: import de.intevation.flys.artifacts.model.WQKms;
felix@1825: import de.intevation.flys.artifacts.model.WKmsFactory;
felix@1825: import de.intevation.flys.artifacts.model.WQKmsFactory;
felix@1825: 
felix@2124: import de.intevation.flys.artifacts.states.DefaultState;
felix@1825: 
felix@1825: 
felix@1825: /**
felix@1825:  * Artifact to access additional "waterlevel/discharge"-type of data, like
felix@1825:  * fixation measurements.
felix@1825:  *
felix@1825:  * This artifact neglects (Static)FLYSArtifacts capabilities of interaction
felix@1825:  * with the StateEngine by overriding the getState*-methods.
felix@1825:  */
felix@1825: public class StaticWQKmsArtifact
felix@1825: extends      StaticFLYSArtifact
felix@1825: implements   FacetTypes
felix@1825: {
felix@1825:     /** The logger for this class. */
felix@1825:     private static Logger logger =
felix@1825:         Logger.getLogger(StaticWQKmsArtifact.class);
felix@1825: 
felix@1825:     public static final String STATIC_STATE_NAME =
felix@1825:         "state.additional_wqkms.static";
felix@1825: 
felix@1825: 
felix@1825:     /**
felix@1825:      * Trivial Constructor.
felix@1825:      */
felix@1825:     public StaticWQKmsArtifact() {
felix@1825:         logger.debug("StaticWQKmsArtifact.StaticWQKmsArtifact");
felix@1825:     }
felix@1825: 
felix@1825: 
felix@1825:     /**
felix@1825:      * Gets called from factory, to set things up.
felix@1825:      */
felix@1825:     @Override
felix@1825:     public void setup(
felix@1825:         String          identifier,
felix@1825:         ArtifactFactory factory,
felix@1825:         Object          context,
felix@1825:         CallMeta        callMeta,
felix@1825:         Document        data)
felix@1825:     {
felix@1825:         logger.debug("StaticWQKmsArtifact.setup");
felix@1825: 
felix@2124:         // Store the 'ids' (from datacage).
felix@2124:         logger.debug("StaticWQKmsArtiact.setup" + XMLUtils.toString(data));
felix@1825: 
felix@2741:         String code = getDatacageIDValue(data);
felix@2124:         addStringData("ids", code);
felix@1825:         if (code != null) {
felix@1825:             String [] parts = code.split("-");
felix@1825: 
felix@1825:             if (parts.length >= 4) {
felix@1900:                 int col = Integer.valueOf(parts[2]);
felix@1900:                 int wst = Integer.valueOf(parts[3]);
felix@1825: 
felix@1900:                 addStringData("col_pos", parts[2]);
felix@1900:                 addStringData("wst_id",  parts[3]);
felix@1825:             }
felix@1825:         }
felix@1825: 
felix@2124:         // Do this AFTER we have set the col_pos etc.
felix@1825:         super.setup(identifier, factory, context, callMeta, data);
felix@1825:     }
felix@1825: 
felix@1825: 
felix@1825:     /**
felix@1825:      * Called via setup.
felix@1825:      *
felix@1825:      * @param artifact The master-artifact.
felix@1825:      */
felix@1825:     @Override
felix@1825:     protected void initialize(
felix@1825:         Artifact artifact,
felix@1825:         Object context,
felix@1825:         CallMeta meta)
felix@1825:     {
felix@1825:         logger.debug("StaticWQKmsArtifact.initialize");
felix@1825:         WINFOArtifact winfo = (WINFOArtifact) artifact;
felix@2124:         // TODO: The river is of no interest, so far., also use importData
felix@2141:         importData(winfo, "river");
felix@1825: 
felix@2124:         List<Facet> fs = new ArrayList<Facet>();
felix@1825: 
felix@2124:         DefaultState state = (DefaultState) getCurrentState(context);
felix@2124:         state.computeInit(this, hash(), context, meta, fs);
sascha@3076:         if (!fs.isEmpty()) {
sascha@3076:             logger.debug("Facets to add in StaticWQKmsArtifact.initialize .");
sascha@3076:             facets.put(getCurrentStateId(), fs);
sascha@3076:         }
sascha@3076:         else {
felix@2124:             logger.debug("No facets to add in StaticWQKmsArtifact.initialize ("
felix@2124:                 + state.getID() + ").");
felix@2124:         }
felix@1825:     }
felix@1825: 
felix@1825: 
felix@1825:     /**
felix@1825:      * Get WQKms from factory.
felix@1825:      * @return WQKms according to parameterization (can be null);
felix@1825:      */
felix@2124:     public WQKms getWQKms() {
felix@1825:         logger.debug("StaticWQKmsArtifact.getWQKms");
felix@1825: 
felix@2124:         int col = Integer.valueOf(getDataAsString("col_pos"));
felix@2124:         int wst = Integer.valueOf(getDataAsString("wst_id"));
felix@2124: 
felix@2124:         /** TODO do not run twice against db to do this. */
felix@2124:         String wkmsName = WKmsFactory.getWKmsName(col, wst);
felix@2124: 
felix@2124:         WQKms res = WQKmsFactory.getWQKms(
felix@1825:             Integer.valueOf(getDataAsString("col_pos")),
felix@1825:             Integer.valueOf(getDataAsString("wst_id")));
felix@2124:         res.setName(wkmsName);
felix@2124:         return res;
felix@1825:     }
felix@1825: 
felix@1825: 
felix@1825:     /**
felix@1825:      * Determines Facets initial disposition regarding activity (think of
felix@1825:      * selection in Client ThemeList GUI). This will be checked one time
felix@1825:      * when the facet enters a collections describe document.
felix@1825:      *
felix@1825:      * @param facetName name of the facet.
felix@1825:      * @param index     index of the facet.
felix@1825:      *
felix@1825:      * @return Always 0. Static Data will enter plots inactive.
felix@1825:      */
felix@1825:     @Override
felix@1825:     public int getInitialFacetActivity(
felix@1825:         String outputName,
felix@1825:         String facetName,
felix@1825:         int index)
felix@1825:     {
felix@1825:         return 0;
felix@1825:     }
felix@2124: 
felix@2124: 
felix@2124:     /** Return specific name. */
felix@2124:     public String getName() {
felix@2124:         return "staticwqkms";
felix@2124:     }
felix@2124: 
felix@2124:     // TODO implement deepCopy.
felix@1825: }
felix@1825: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :