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@2696:
ingo@2696: import org.w3c.dom.Element;
ingo@2696:
ingo@2696: import org.apache.log4j.Logger;
ingo@2696:
teichmann@5831: import org.dive4elements.artifacts.Artifact;
teichmann@5831: import org.dive4elements.artifacts.CallContext;
ingo@2696:
teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
teichmann@5831: import org.dive4elements.artifacts.common.model.KVP;
ingo@2696:
teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact;
teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources;
teichmann@5865: import org.dive4elements.river.utils.RiverUtils;
ingo@2705:
ingo@2696:
ingo@2696: /**
ingo@2696: * State that holds minimun and maximum (for validation).
ingo@2696: *
ingo@2696: * @author Ingo Weinzierl
ingo@2696: */
ingo@2696: public abstract class MultiIntArrayState extends DefaultState {
ingo@2696:
ingo@2696: private static final Logger logger =
ingo@2696: Logger.getLogger(MultiIntArrayState.class);
ingo@2696:
ingo@2696:
ingo@2696: @Override
ingo@2696: protected void appendItems(
ingo@2696: Artifact artifact,
ingo@2696: ElementCreator creator,
ingo@2696: String name,
ingo@2696: CallContext context,
ingo@2696: Element select
ingo@2696: ) {
ingo@2696: try {
ingo@2696: creator.addAttr(select, "type", "intoptions", true);
ingo@2696:
ingo@2696: for (KVP kvp: getOptions(artifact, name)) {
ingo@2696: Element item = creator.create("item");
ingo@2696: creator.addAttr(item, "label", kvp.getValue().toString(), true);
ingo@2708: creator.addAttr(item, "value", kvp.getKey().toString(), true);
ingo@2696:
ingo@2708: select.appendChild(item);
ingo@2696: }
ingo@2696: }
ingo@2696: catch (IllegalArgumentException iae) {
ingo@2696: logger.warn("Illegal argument", iae);
ingo@2696: }
ingo@2696: }
ingo@2696:
ingo@2696:
ingo@2705: @Override
ingo@2705: protected Element createStaticData(
teichmann@5867: D4EArtifact flys,
ingo@2705: ElementCreator creator,
ingo@2705: CallContext cc,
ingo@2705: String name,
ingo@2705: String value,
ingo@2705: String type
ingo@2705: ) {
ingo@2705: Element data = creator.create("data");
ingo@2705: creator.addAttr(data, "name", name, true);
ingo@2705: creator.addAttr(data, "type", type, true);
ingo@2705: creator.addAttr(data, "label",
ingo@2705: Resources.getMsg(cc.getMeta(), name, name), true);
ingo@2705:
teichmann@5865: int[] values = RiverUtils.intArrayFromString(value);
ingo@2705:
ingo@2705: for (int val: values) {
ingo@2705: try {
ingo@2705: Element item = creator.create("item");
ingo@2705: creator.addAttr(item, "value", String.valueOf(val), true);
ingo@2705: creator.addAttr(item, "label", getLabelFor(cc, name, val), true);
ingo@2705:
ingo@2705: data.appendChild(item);
ingo@2705: }
ingo@2705: catch (IllegalArgumentException iae) {
ingo@2705: logger.warn("Cannot append item: " + val, iae);
ingo@2705: }
ingo@2705: }
ingo@2705:
ingo@2705: return data;
ingo@2705: }
ingo@2705:
ingo@2705:
ingo@2696: protected abstract KVP[] getOptions(
ingo@2696: Artifact artifact,
ingo@2696: String parameterName
ingo@2696: )
ingo@2696: throws IllegalArgumentException;
ingo@2705:
ingo@2705:
ingo@2705: protected abstract String getLabelFor(
ingo@2705: CallContext cc,
ingo@2705: String parameterName,
ingo@2705: int value)
ingo@2705: throws IllegalArgumentException;
ingo@2696: }
sascha@3083: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :