gernotbelger@9053: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9053: * Software engineering by gernotbelger@9053: * Björnsen Beratende Ingenieure GmbH gernotbelger@9053: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9053: * gernotbelger@9053: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9053: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9053: * documentation coming with Dive4Elements River for details. gernotbelger@9053: */ gernotbelger@9053: package org.dive4elements.river.artifacts.states; gernotbelger@9053: gernotbelger@9178: import java.util.LinkedHashMap; gernotbelger@9178: import java.util.Map; gernotbelger@9053: gernotbelger@9053: import org.dive4elements.artifacts.Artifact; gernotbelger@9053: import org.dive4elements.artifacts.CallContext; gernotbelger@9053: import org.dive4elements.artifacts.CallMeta; gernotbelger@9053: import org.dive4elements.artifacts.common.utils.XMLUtils; gernotbelger@9053: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9053: import org.w3c.dom.Element; gernotbelger@9053: gernotbelger@9053: /** gernotbelger@9053: * @author Domenico Nardi Tironi gernotbelger@9053: * gernotbelger@9053: */ gernotbelger@9053: public abstract class RadioSelect extends DefaultState { gernotbelger@9053: gernotbelger@9053: private static final long serialVersionUID = 1L; gernotbelger@9184: private Artifact artifact; gernotbelger@9053: gernotbelger@9369: protected abstract String getDatakey(); gernotbelger@9178: gernotbelger@9369: @Override gernotbelger@9369: protected abstract String getUIProvider(); // force override in subs! gernotbelger@9369: // { gernotbelger@9369: // return "radio_panel"; //no generic radiopanel gernotbelger@9369: // } gernotbelger@9053: gernotbelger@9184: protected abstract LinkedHashMap makeEntries(CallMeta meta, Artifact artifact); // AUSNAHMSWEISE EXPLIZITER TYP, damit Reihenfolge nicht gernotbelger@9184: // verrutscht gernotbelger@9053: gernotbelger@9053: @Override gernotbelger@9053: protected Element[] createItems(final XMLUtils.ElementCreator ec, final Artifact artifact, final String name, final CallContext context) { gernotbelger@9184: gernotbelger@9184: // REMEBER: we need it for getLabelFor later gernotbelger@9178: gernotbelger@9369: if (name.equals(getDatakey())) { gernotbelger@9369: this.artifact = artifact; gernotbelger@9369: gernotbelger@9369: final CallMeta meta = context.getMeta(); gernotbelger@9369: final Map entries = makeEntries(meta, artifact); gernotbelger@9369: gernotbelger@9369: final Element[] elements = new Element[entries.size()]; gernotbelger@9369: int i = 0; gernotbelger@9369: for (final String key : entries.keySet()) { gernotbelger@9369: final String label = entries.get(key); gernotbelger@9369: final String labelToSet = label != null ? label : Resources.getMsg(meta, key); gernotbelger@9369: elements[i] = createItem(ec, new String[] { labelToSet, key }); gernotbelger@9369: i++; gernotbelger@9369: } gernotbelger@9369: return elements; gernotbelger@9053: } gernotbelger@9369: return super.createItems(ec, artifact, name, context); gernotbelger@9053: } gernotbelger@9053: gernotbelger@9178: @Override gernotbelger@9178: protected String getLabelFor(final CallContext cc, final String name, final String value, final String type) { gernotbelger@9184: // artifacts must be set in "createItems" -> createItems has to be called first gernotbelger@9184: final Map entries = makeEntries(cc.getMeta(), this.artifact); gernotbelger@9178: gernotbelger@9178: final String valueToSet = entries.get(value) != null ? entries.get(value) : value; gernotbelger@9178: return super.getLabelFor(cc, name, valueToSet, type); gernotbelger@9178: } gernotbelger@9178: }