view flys-artifacts/src/main/java/de/intevation/flys/artifacts/BedHeightsArtifact.java @ 4173:7d4480c0e68e

Allow users to select the current relevant discharge table in historical discharge table calculattion. In addition to this, the discharge tables in the helper panel displayed in the client is ordered in time.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 18 Oct 2012 12:13:48 +0200
parents a66df8e8d3df
children d83e021ff638
line wrap: on
line source
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.FacetActivity;
import de.intevation.artifactdatabase.state.State;
import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.common.utils.XMLUtils;
import de.intevation.flys.artifacts.model.minfo.BedHeight;
import de.intevation.flys.artifacts.model.minfo.BedHeightFacet;
import de.intevation.flys.artifacts.model.minfo.BedHeightFactory;
import de.intevation.flys.artifacts.states.StaticState;

public class BedHeightsArtifact
extends      StaticFLYSArtifact
{
    /** The logger for this class. */
    private static Logger logger =
        Logger.getLogger(BedHeightsArtifact.class);

    private static final String NAME = "bedheights";

    static {
        // TODO: Move to configuration.
        FacetActivity.Registry.getInstance()
            .register(NAME, FacetActivity.INACTIVE);
    }

    public static final String STATIC_STATE_NAME =
        "state.additional_bedheights.static";

    /** Data Item name to know whether we are Heighmarks and reveive
     * some data slightly different. */
    public static final String DATA_HEIGHT_TYPE =
        "height_marks";

    /** One and only state to be in. */
    protected transient State state = null;


    /**
     * Trivial Constructor.
     */
    public BedHeightsArtifact() {
        logger.debug("BedHeightsArtifact.BedHeightsArtifact");
    }

    @Override
    public String getName() {
        return NAME;
    }

    /**
     * Gets called from factory, to set things up.
     */
    @Override
    public void setup(
        String          identifier,
        ArtifactFactory factory,
        Object          context,
        CallMeta        callMeta,
        Document        data)
    {
        logger.debug("BedHeightsArtifact.setup");

        state = new StaticState(STATIC_STATE_NAME);

        if (logger.isDebugEnabled()) {
            logger.debug(XMLUtils.toString(data));
        }

        List<Facet> fs = new ArrayList<Facet>();
        String code = getDatacageIDValue(data);

        if (code != null) {
            String [] parts = code.split("-");

            if (parts.length >= 4) {
                if (parts[0].equals("bedheight")) {
                    addStringData("type", parts[1]);
                    addStringData("height_id", parts[2]);
                    addStringData("time", parts[3]);
                }
                int hId = Integer.parseInt(parts[2]);
                String bedHName = BedHeightFactory.getHeightName(parts[1], hId);

                Facet bedHFacet = new BedHeightFacet(
                    "bedheight",
                    bedHName);

                fs.add(bedHFacet);
                facets.put(state.getID(), fs);
            }
        }

        //spawnState();
        super.setup(identifier, factory, context, callMeta, data);
    }

    /**
     * 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();
    }


    /**
     * 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
            : new StaticState(STATIC_STATE_NAME);
    }

    /**
     * Get WKms from factory.
     * @param idx param is not needed (TODO?)
     * @return WKms according to parameterization (can be null);
     */
    public BedHeight getHeight() {
        return BedHeightFactory.getHeight(
            getDataAsString("type"),
            Integer.parseInt(getDataAsString("height_id")),
            Integer.parseInt(getDataAsString("time")));
    }

}

http://dive4elements.wald.intevation.org