view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java @ 4031:e4e345d81a65

issue889/2
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Thu, 04 Oct 2012 14:54:44 +0200
parents 4bd3d8bbb60c
children
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import org.w3c.dom.Element;

import org.apache.log4j.Logger;

import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.CallContext;

import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
import de.intevation.artifacts.common.model.KVP;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.resources.Resources;
import de.intevation.flys.utils.FLYSUtils;


/**
 * State that holds minimun and maximum (for validation).
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public abstract class MultiIntArrayState extends DefaultState {

    private static final Logger logger =
        Logger.getLogger(MultiIntArrayState.class);


    @Override
    protected void appendItems(
        Artifact       artifact,
        ElementCreator creator,
        String         name,
        CallContext    context,
        Element        select
    ) {
        try {
            creator.addAttr(select, "type", "intoptions", true);

            for (KVP kvp: getOptions(artifact, name)) {
                Element item = creator.create("item");
                creator.addAttr(item, "label", kvp.getValue().toString(), true);
                creator.addAttr(item, "value", kvp.getKey().toString(), true);

                select.appendChild(item);
            }
        }
        catch (IllegalArgumentException iae) {
            logger.warn("Illegal argument", iae);
        }
    }


    @Override
    protected Element createStaticData(
        FLYSArtifact   flys,
        ElementCreator creator,
        CallContext    cc,
        String         name,
        String         value,
        String         type
    ) {
        Element data = creator.create("data");
        creator.addAttr(data, "name",  name, true);
        creator.addAttr(data, "type",  type, true);
        creator.addAttr(data, "label",
            Resources.getMsg(cc.getMeta(), name, name), true);

        int[] values = FLYSUtils.intArrayFromString(value);

        for (int val: values) {
            try {
                Element item = creator.create("item");
                creator.addAttr(item, "value", String.valueOf(val), true);
                creator.addAttr(item, "label", getLabelFor(cc, name, val), true);

                data.appendChild(item);
            }
            catch (IllegalArgumentException iae) {
                logger.warn("Cannot append item: " + val, iae);
            }
        }

        return data;
    }


    protected abstract KVP<Integer, String>[] getOptions(
        Artifact artifact,
        String   parameterName
    )
    throws IllegalArgumentException;


    protected abstract String getLabelFor(
        CallContext cc,
        String      parameterName,
        int         value)
    throws IllegalArgumentException;
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org