Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java @ 8951:322b0e6298ea
Work on SINFO FlowDepth-Development
author | gernotbelger |
---|---|
date | Fri, 16 Mar 2018 18:08:38 +0100 |
parents | |
children | 5294114b1df4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java Fri Mar 16 18:08:38 2018 +0100 @@ -0,0 +1,118 @@ +/* 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; + + /** 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) { + this.uiProvider = uiProvider; + this.dataId = dataId; + } + + /** 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[] {}; + } + + /** + * Creats 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); + final Object[] obj = new Object[] { labels[0] }; + + // TODO own i18n + 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; + } +} \ No newline at end of file