view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java @ 5462:f2371f3aaf03

Show top level folder icons only if node has no factory If you have an empty folder the folder icon is still shown. This makes it possible to add functional "Top Level" entries in the Datacage
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 26 Mar 2013 18:29:13 +0100
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