teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.states; felix@1173: felix@1173: import java.util.List; felix@1173: felix@1173: import org.apache.log4j.Logger; gernotbelger@9580: import org.dive4elements.artifactdatabase.ProtocolUtils; gernotbelger@9580: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; teichmann@8186: import org.dive4elements.river.backend.utils.StringUtil; gernotbelger@9580: import org.w3c.dom.Element; felix@1663: felix@1737: /** felix@1737: * State in which the user selects 1 to n pairs of Waterlevels and alikes. felix@1737: */ gernotbelger@9580: public class WaterlevelPairSelectState extends DefaultState implements FacetTypes { teichmann@8202: /** The log that is used in this state. */ gernotbelger@9580: private static Logger log = Logger.getLogger(WaterlevelPairSelectState.class); felix@1663: felix@1737: /** Trivial constructor. */ felix@1173: public WaterlevelPairSelectState() { felix@1173: } felix@1173: felix@1173: /** Specify to display a datacage_twin_panel. */ felix@1173: @Override felix@1173: protected String getUIProvider() { gernotbelger@8852: return "waterlevel_twin_panel"; felix@1173: } felix@1173: felix@1737: /** felix@1737: * Overridden to do nothing. felix@1737: */ felix@1173: @Override gernotbelger@9580: public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { gernotbelger@9580: // Get data and do stuff, do not calculate felix@1737: return ""; felix@1693: } felix@1693: felix@1693: /** felix@1693: * Create elements for document (prepopulated with data, if any). gernotbelger@9580: * gernotbelger@9580: * @param artifact gernotbelger@9580: * D4EArtifact to get data from. gernotbelger@9580: * @param name gernotbelger@9580: * DataName, expceted to be "diffids". felix@1693: */ felix@1693: @Override gernotbelger@9580: protected Element[] createItems(final ElementCreator cr, final Artifact artifact, final String name, final CallContext context) { teichmann@8202: log.debug("createItems: " + name); felix@1693: if (name.equals("diffids")) { gernotbelger@9580: final Element item = ProtocolUtils.createArtNode(cr, "item", null, null); gernotbelger@9580: final Element label = ProtocolUtils.createArtNode(cr, "label", null, null); gernotbelger@9580: final Element value = ProtocolUtils.createArtNode(cr, "value", null, null); gernotbelger@9580: final D4EArtifact flys = (D4EArtifact) artifact; gernotbelger@9580: final String s = flys.getDataAsString("diffids"); felix@1693: value.setTextContent(s); felix@1693: item.appendChild(label); felix@1693: item.appendChild(value); felix@1693: return new Element[] { item }; felix@1693: } felix@1693: return new Element[] {}; felix@1173: } felix@1663: felix@1663: /** felix@1663: * Creats the data element used for the static part of DESCRIBE document. felix@1663: */ felix@1663: @Override gernotbelger@9580: protected Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value, gernotbelger@9580: final String type) { gernotbelger@9580: final Element dataElement = creator.create("data"); felix@1663: creator.addAttr(dataElement, "name", name, true); felix@1663: creator.addAttr(dataElement, "type", type, true); felix@1663: gernotbelger@9580: final Element itemElement = creator.create("item"); felix@1663: creator.addAttr(itemElement, "value", value, true); felix@1663: gernotbelger@9580: final String[] labels = getLabels(cc, value, false); gernotbelger@9580: final Object[] obj = new Object[] { labels[0] }; felix@1663: felix@1663: // TODO own i18n gernotbelger@9580: final String attrValue = Resources.getMsg(cc.getMeta(), "wsp.selected.string", "wsp.selected.string", obj); gernotbelger@9580: // I18N_STATIC_KEY, I18N_STATIC_KEY, obj); felix@1663: felix@1663: creator.addAttr(itemElement, "label", attrValue, true); felix@1663: dataElement.appendChild(itemElement); felix@1663: felix@1663: return dataElement; felix@1663: } felix@1663: felix@1663: /** felix@1663: * Get name to display for selected watelerlevels (for example "Q=123") sascha@3076: * from the CalculationResult. felix@1663: */ gernotbelger@9580: public static String[] getLabels(final CallContext cc, final String value, final boolean minuendSubtrahendUiReversed) { gernotbelger@9580: final String[] recommendations = value.split("#"); felix@1663: String displayString = ""; felix@1663: felix@1663: // Walk over all selected recommendations and create label felix@1663: // like "W (Q=1) - W (Q=2)". gernotbelger@9580: final int minuendIndex = minuendSubtrahendUiReversed ? 1 : 0; gernotbelger@9580: final int subtrahendIndex = minuendSubtrahendUiReversed ? 0 : 1; gernotbelger@9580: gernotbelger@9580: for (int i = 0; i < recommendations.length; i += 2) { gernotbelger@9580: final String[] minuendParts = StringUtil.unbracket(recommendations[i + minuendIndex]).split(";"); gernotbelger@9580: if (minuendParts.length >= 4) { felix@1737: displayString += "(" + minuendParts[3]; gernotbelger@9580: } else { felix@1737: displayString += "([error]"; felix@1737: } felix@1737: felix@1737: displayString += " - "; felix@1737: gernotbelger@9580: final String[] subtrahendParts = StringUtil.unbracket(recommendations[i + subtrahendIndex]).split(";"); gernotbelger@9580: if (subtrahendParts.length >= 4) { felix@1737: displayString += subtrahendParts[3] + ") "; gernotbelger@9580: } else { felix@1737: displayString += "[error])"; felix@1663: } felix@1663: } felix@1663: felix@1663: return new String[] { displayString }; felix@1663: } gernotbelger@9580: felix@1173: } felix@1173: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :