gernotbelger@8951: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@8951: * Software engineering by Intevation GmbH gernotbelger@8951: * gernotbelger@8951: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8951: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8951: * documentation coming with Dive4Elements River for details. gernotbelger@8951: */ gernotbelger@8951: gernotbelger@8951: package org.dive4elements.river.artifacts.sinfo.common; gernotbelger@8951: gernotbelger@8951: import java.util.List; gernotbelger@8951: gernotbelger@8951: import org.apache.log4j.Logger; gernotbelger@8951: import org.dive4elements.artifactdatabase.ProtocolUtils; gernotbelger@8951: import org.dive4elements.artifactdatabase.state.Facet; gernotbelger@8951: import org.dive4elements.artifacts.Artifact; gernotbelger@8951: import org.dive4elements.artifacts.CallContext; gernotbelger@8951: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; gernotbelger@8951: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@8951: import org.dive4elements.river.artifacts.model.FacetTypes; gernotbelger@8951: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@8951: import org.dive4elements.river.artifacts.states.DefaultState; gernotbelger@8951: import org.dive4elements.river.artifacts.states.WaterlevelPairSelectState; gernotbelger@8951: import org.w3c.dom.Element; gernotbelger@8951: gernotbelger@8951: /** gernotbelger@8951: * Copy of {@link WaterlevelPairSelectState}. We must copy instead of crate an abstraction, else we break the gernotbelger@8951: * serialization of {@link WaterlevelPairSelectState}. gernotbelger@8951: * State in which the user selects 1 to n pairs of Waterlevels and alikes. gernotbelger@8951: */ gernotbelger@8951: public abstract class DatacagePairSelectState extends DefaultState implements FacetTypes { gernotbelger@8951: gernotbelger@8951: private static final long serialVersionUID = 1L; gernotbelger@8951: gernotbelger@9580: private final boolean minuendSubtrahendUiReversed; gernotbelger@9580: gernotbelger@8951: /** The log that is used in this state. */ gernotbelger@8951: private static Logger log = Logger.getLogger(DatacagePairSelectState.class); gernotbelger@8951: gernotbelger@8951: private final String dataId; gernotbelger@8951: gernotbelger@8951: private final String uiProvider; gernotbelger@8951: gernotbelger@8951: /** gernotbelger@8951: * Name of the state data this state is responsible for. gernotbelger@8951: */ gernotbelger@9580: public DatacagePairSelectState(final String uiProvider, final String dataId, final boolean minuendSubtrahendUiReversed) { gernotbelger@8951: this.uiProvider = uiProvider; gernotbelger@8951: this.dataId = dataId; gernotbelger@9580: this.minuendSubtrahendUiReversed = minuendSubtrahendUiReversed; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: /** Specify to display a datacage_twin_panel. */ gernotbelger@8951: @Override gernotbelger@8951: protected final String getUIProvider() { gernotbelger@8951: return this.uiProvider; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: /** gernotbelger@8951: * Overridden to do nothing. gernotbelger@8951: */ gernotbelger@8951: @Override gernotbelger@8951: public final Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { gernotbelger@8951: // Get data and do stuff, do not calculate gernotbelger@8951: return ""; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: /** gernotbelger@8951: * Create elements for document (prepopulated with data, if any). gernotbelger@8951: * gernotbelger@8951: * @param artifact gernotbelger@8951: * D4EArtifact to get data from. gernotbelger@8951: * @param name gernotbelger@8951: * DataName, expceted to be dataId given in constructor. gernotbelger@8951: */ gernotbelger@8951: @Override gernotbelger@8951: protected final Element[] createItems(final ElementCreator cr, final Artifact artifact, final String name, final CallContext context) { gernotbelger@8951: log.debug("createItems: " + name); gernotbelger@8951: gernotbelger@8951: if (name.equals(this.dataId)) { gernotbelger@8951: final Element item = ProtocolUtils.createArtNode(cr, "item", null, null); gernotbelger@8951: final Element label = ProtocolUtils.createArtNode(cr, "label", null, null); gernotbelger@8951: final Element value = ProtocolUtils.createArtNode(cr, "value", null, null); gernotbelger@8951: gernotbelger@8951: final D4EArtifact flys = (D4EArtifact) artifact; gernotbelger@8951: gernotbelger@8951: final String s = flys.getDataAsString(name); gernotbelger@8951: value.setTextContent(s); gernotbelger@8951: item.appendChild(label); gernotbelger@8951: item.appendChild(value); gernotbelger@8951: return new Element[] { item }; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: return new Element[] {}; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: /** gernotbelger@9040: * Creates the data element used for the static part of DESCRIBE document. gernotbelger@8951: */ gernotbelger@8951: @Override gernotbelger@8951: protected final Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value, gernotbelger@8951: final String type) { gernotbelger@8951: final Element dataElement = creator.create("data"); gernotbelger@8951: creator.addAttr(dataElement, "name", name, true); gernotbelger@8951: creator.addAttr(dataElement, "type", type, true); gernotbelger@8951: gernotbelger@8951: final Element itemElement = creator.create("item"); gernotbelger@8951: creator.addAttr(itemElement, "value", value, true); gernotbelger@8951: gernotbelger@9580: final String[] labels = WaterlevelPairSelectState.getLabels(cc, value, this.minuendSubtrahendUiReversed); gernotbelger@8951: final Object[] obj = new Object[] { labels[0] }; gernotbelger@8951: gernotbelger@8951: final String attrValue = Resources.getMsg(cc.getMeta(), "wsp.selected.string", "wsp.selected.string", obj); gernotbelger@8951: gernotbelger@8951: creator.addAttr(itemElement, "label", attrValue, true); gernotbelger@8951: dataElement.appendChild(itemElement); gernotbelger@8951: gernotbelger@8951: return dataElement; gernotbelger@8951: } gernotbelger@8951: }