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;
ingo@2709:
ingo@2709: import org.w3c.dom.Element;
ingo@2709:
tom@9726: import org.apache.logging.log4j.Logger;
tom@9726: import org.apache.logging.log4j.LogManager;
ingo@2709:
teichmann@5831: import org.dive4elements.artifacts.Artifact;
teichmann@5831: import org.dive4elements.artifacts.CallContext;
ingo@2709:
teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
teichmann@5831: import org.dive4elements.artifacts.common.model.KVP;
ingo@2709:
teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact;
teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources;
ingo@2709:
ingo@2709:
ingo@2709: /**
ingo@2709: *
ingo@2709: * @author Ingo Weinzierl
ingo@2709: */
ingo@2709: public abstract class MultiStringArrayState extends DefaultState {
ingo@2709:
teichmann@8202: private static final Logger log =
tom@9726: LogManager.getLogger(MultiStringArrayState.class);
ingo@2709:
ingo@2709:
ingo@2709: @Override
ingo@2709: protected void appendItems(
ingo@2709: Artifact artifact,
ingo@2709: ElementCreator creator,
ingo@2709: String name,
ingo@2709: CallContext context,
ingo@2709: Element select
ingo@2709: ) {
ingo@2709: try {
ingo@2709: creator.addAttr(select, "type", "options", true);
ingo@2709:
ingo@3649: for (KVP kvp: getOptions(artifact, name, context)) {
ingo@2709: Element item = creator.create("item");
ingo@2709: creator.addAttr(item, "label", kvp.getValue().toString(), true);
ingo@2709: creator.addAttr(item, "value", kvp.getKey().toString(), true);
ingo@2709:
ingo@2709: select.appendChild(item);
ingo@2709: }
ingo@2709: }
ingo@2709: catch (IllegalArgumentException iae) {
teichmann@8202: log.warn("Illegal argument", iae);
ingo@2709: }
ingo@2709: }
ingo@2709:
ingo@2709:
ingo@2709: @Override
ingo@2709: protected Element createStaticData(
teichmann@5867: D4EArtifact flys,
ingo@2709: ElementCreator creator,
ingo@2709: CallContext cc,
ingo@2709: String name,
ingo@2709: String value,
ingo@2709: String type
ingo@2709: ) {
ingo@2709: Element data = creator.create("data");
ingo@2709: creator.addAttr(data, "name", name, true);
ingo@2709: creator.addAttr(data, "type", type, true);
ingo@2709: creator.addAttr(data, "label",
ingo@2709: Resources.getMsg(cc.getMeta(), name, name), true);
ingo@2709:
ingo@2709: String[] values = value.split(";");
ingo@2709:
ingo@2709: for (String val: values) {
ingo@2709: Element item = creator.create("item");
ingo@2709: creator.addAttr(item, "value", val, true);
ingo@2709: creator.addAttr(item, "label", getLabelFor(cc, name, val), true);
ingo@2709:
ingo@2709: data.appendChild(item);
ingo@2709: }
ingo@2709:
ingo@2709: return data;
ingo@2709: }
ingo@2709:
ingo@2709:
ingo@2709: protected abstract KVP[] getOptions(
ingo@2709: Artifact artifact,
ingo@3649: String parameterName,
ingo@3649: CallContext context
ingo@2709: )
ingo@2709: throws IllegalArgumentException;
ingo@2709:
ingo@2709:
ingo@2709: protected abstract String getLabelFor(
ingo@2709: CallContext cc,
ingo@2709: String parameterName,
ingo@2709: String value
ingo@2709: )
ingo@2709: throws IllegalArgumentException;
ingo@2709: }
sascha@3083: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :