view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java @ 4478:6153c50f78cf

WaterLineArtifact: Added callcontext-parameter to interfaces getWaterLine. Update all implementations. The change was done to be able to compute the extreme values during getWaterLine to access data needed in CrossSectionProfile Diagrams.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 13 Nov 2012 14:46:44 +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