view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java @ 9580:839b2aa84dd0

minuend/subtrahend-UI-switch
author gernotbelger
date Tue, 08 Jan 2019 17:01:09 +0100
parents 5294114b1df4
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.artifacts.sinfo.common;

import java.util.List;

import org.apache.log4j.Logger;
import org.dive4elements.artifactdatabase.ProtocolUtils;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.DefaultState;
import org.dive4elements.river.artifacts.states.WaterlevelPairSelectState;
import org.w3c.dom.Element;

/**
 * Copy of {@link WaterlevelPairSelectState}. We must copy instead of crate an abstraction, else we break the
 * serialization of {@link WaterlevelPairSelectState}.
 * State in which the user selects 1 to n pairs of Waterlevels and alikes.
 */
public abstract class DatacagePairSelectState extends DefaultState implements FacetTypes {

    private static final long serialVersionUID = 1L;

    private final boolean minuendSubtrahendUiReversed;

    /** The log that is used in this state. */
    private static Logger log = Logger.getLogger(DatacagePairSelectState.class);

    private final String dataId;

    private final String uiProvider;

    /**
     * Name of the state data this state is responsible for.
     */
    public DatacagePairSelectState(final String uiProvider, final String dataId, final boolean minuendSubtrahendUiReversed) {
        this.uiProvider = uiProvider;
        this.dataId = dataId;
        this.minuendSubtrahendUiReversed = minuendSubtrahendUiReversed;
    }

    /** Specify to display a datacage_twin_panel. */
    @Override
    protected final String getUIProvider() {
        return this.uiProvider;
    }

    /**
     * Overridden to do nothing.
     */
    @Override
    public final Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
        // Get data and do stuff, do not calculate
        return "";
    }

    /**
     * Create elements for document (prepopulated with data, if any).
     *
     * @param artifact
     *            D4EArtifact to get data from.
     * @param name
     *            DataName, expceted to be dataId given in constructor.
     */
    @Override
    protected final Element[] createItems(final ElementCreator cr, final Artifact artifact, final String name, final CallContext context) {
        log.debug("createItems: " + name);

        if (name.equals(this.dataId)) {
            final Element item = ProtocolUtils.createArtNode(cr, "item", null, null);
            final Element label = ProtocolUtils.createArtNode(cr, "label", null, null);
            final Element value = ProtocolUtils.createArtNode(cr, "value", null, null);

            final D4EArtifact flys = (D4EArtifact) artifact;

            final String s = flys.getDataAsString(name);
            value.setTextContent(s);
            item.appendChild(label);
            item.appendChild(value);
            return new Element[] { item };
        }

        return new Element[] {};
    }

    /**
     * Creates the data element used for the static part of DESCRIBE document.
     */
    @Override
    protected final Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value,
            final String type) {
        final Element dataElement = creator.create("data");
        creator.addAttr(dataElement, "name", name, true);
        creator.addAttr(dataElement, "type", type, true);

        final Element itemElement = creator.create("item");
        creator.addAttr(itemElement, "value", value, true);

        final String[] labels = WaterlevelPairSelectState.getLabels(cc, value, this.minuendSubtrahendUiReversed);
        final Object[] obj = new Object[] { labels[0] };

        final String attrValue = Resources.getMsg(cc.getMeta(), "wsp.selected.string", "wsp.selected.string", obj);

        creator.addAttr(itemElement, "label", attrValue, true);
        dataElement.appendChild(itemElement);

        return dataElement;
    }
}

http://dive4elements.wald.intevation.org