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: import de.intevation.artifactdatabase.state.DefaultOutput; felix@1825: import de.intevation.artifactdatabase.state.State; felix@1825: felix@1825: import de.intevation.artifacts.Artifact; felix@1825: import de.intevation.artifacts.ArtifactFactory; felix@1825: import de.intevation.artifacts.ArtifactNamespaceContext; felix@1825: import de.intevation.artifacts.CallMeta; felix@1825: 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.WQKmsFacet; felix@1825: import de.intevation.flys.artifacts.model.WKmsFactory; felix@1825: import de.intevation.flys.artifacts.model.WQKmsFactory; felix@1825: felix@1825: import de.intevation.flys.artifacts.states.StaticState; felix@1825: import de.intevation.flys.artifacts.resources.Resources; felix@1825: felix@1825: import de.intevation.artifacts.common.utils.XMLUtils; 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: /** XPath to access initial parameter. */ felix@1825: public static final String XPATH_DATA = felix@1825: "/art:action/art:ids/@value"; felix@1825: felix@1825: public static final String STATIC_STATE_NAME = felix@1825: "state.additional_wqkms.static"; felix@1825: felix@1825: /** One and only state to be in. */ felix@1825: protected transient State state = null; 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@1825: state = new StaticState(STATIC_STATE_NAME); felix@1825: felix@1825: List fs = new ArrayList(); felix@1825: logger.debug(XMLUtils.toString(data)); felix@1825: String code = XMLUtils.xpathString( felix@1825: data, XPATH_DATA, ArtifactNamespaceContext.INSTANCE); felix@1825: felix@1825: // TODO Go for JSON, one day. felix@1825: //ex.: flood_protection-wstv-114-12 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@1900: String wkmsName = WKmsFactory.getWKmsName(col, wst); felix@1900: felix@1900: String name; felix@1900: if (parts[0].equals(HEIGHTMARKS_POINTS)) { felix@1900: name = HEIGHTMARKS_POINTS; felix@1825: } felix@1900: else { felix@1900: name = STATIC_WQKMS; felix@1900: } felix@1900: felix@1900: Facet facet = new WQKmsFacet( felix@1900: name, felix@1900: Resources.getMsg( felix@1900: callMeta, felix@1900: wkmsName, felix@1900: wkmsName)); felix@1900: fs.add(facet); felix@1900: facets.put(state.getID(), fs); felix@1825: } felix@1825: } felix@1825: felix@1825: spawnState(); felix@1825: super.setup(identifier, factory, context, callMeta, data); felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Initialize the static state with output. felix@1825: * @return static state felix@1900: * @TODO merge with StaticWKmsArtifact implementation. felix@1825: */ felix@1825: protected State spawnState() { felix@1825: state = new StaticState(STATIC_STATE_NAME); felix@1825: List fs = facets.get(STATIC_STATE_NAME); felix@1900: DefaultOutput output = new DefaultOutput( felix@1900: "general", felix@1900: "general", felix@1900: "image/png", felix@1825: fs, felix@1825: "chart"); felix@1825: felix@1900: state.getOutputs().add(output); felix@1825: return state; 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@1825: // TODO: The river is of no interest, so far. felix@1825: addData("river", winfo.getData("river")); felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Get a list containing the one and only State. felix@1825: * @param context ignored. felix@1825: * @return list with one and only state. felix@1825: */ felix@1825: @Override felix@1825: protected List getStates(Object context) { felix@1825: ArrayList states = new ArrayList(); felix@1825: states.add(getState()); felix@1825: return states; felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Get the "current" state (there is but one). felix@1825: * @param cc ignored. felix@1825: * @return the "current" (only possible) state. felix@1825: */ felix@1825: @Override felix@1825: public State getCurrentState(Object cc) { felix@1825: return getState(); felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Get the only possible state. felix@1825: * @return the state. felix@1825: */ felix@1825: protected State getState() { felix@1825: return getState(null, null); felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Get the state. felix@1825: * @param context ignored. felix@1825: * @param stateID ignored. felix@1825: * @return the state. felix@1825: */ felix@1825: @Override felix@1825: protected State getState(Object context, String stateID) { felix@1825: return (state != null) felix@1825: ? state felix@1825: : spawnState(); felix@1825: } felix@1825: felix@1825: felix@1825: /** felix@1825: * Get WQKms from factory. felix@1825: * @param TODO idx param is not needed felix@1825: * @return WQKms according to parameterization (can be null); felix@1825: */ felix@1825: public WQKms getWQKms(int idx) { felix@1825: logger.debug("StaticWQKmsArtifact.getWQKms"); felix@1825: felix@1825: return WQKmsFactory.getWQKms( felix@1825: Integer.valueOf(getDataAsString("col_pos")), felix@1825: Integer.valueOf(getDataAsString("wst_id"))); 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@1825: } felix@1825: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :