view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SoundingsSelect.java @ 3785:a5f65e8983be

Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk ........ r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line fix issue865 - missing showarea theme prop. ........ r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line Add robustness checks to prevent NPEs ........ r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line i18n for area label (fix issue487). ........ r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line Update themes to show point descriptions ........ r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines Removed incorrect characteristic diameter. ........ r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines Fixed some stupid bugs in bed quality data factory and calculation. ........ r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line The usual whitespace and import cleanups. ........ r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line Use generics aware Collections.emptyList(). ........ r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line Some more little steps towards "Auslagerung extremer Wasserspiegellagen". ........ r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line A and B facets of fix analyis are now deactivated by default ........ r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines Add the gauge station to the GaugeOverviewInfoService xml response ........ r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines Added CSV export to bed quality calculation. ........ r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines Fix date in changelog entry ........ r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line Removed trailing whitespace. ........ flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 19 Sep 2012 14:58:31 +0000
parents 5d0419882382
children c79b98085096
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

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

import de.intevation.artifacts.common.model.KVP;

import de.intevation.flys.model.BedHeightEpoch;
import de.intevation.flys.model.BedHeightSingle;
import de.intevation.flys.model.River;

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


public class SoundingsSelect extends MultiStringArrayState {

    public static final String SOUNDINGS  = "soundings";

    public static final String PREFIX_SINGLE = "single-";

    public static final String PREFIX_EPOCH  = "epoch-";


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


    @Override
    public String getUIProvider() {
        return "parameter-matrix";
    }


    @Override
    protected KVP<String, String>[] getOptions(
        Artifact artifact,
        String   parameterName,
        CallContext context
    )
    throws IllegalArgumentException
    {
        logger.debug("Get options for parameter: '" + parameterName + "'");

        if (!testParameterName(parameterName)) {
            throw new IllegalArgumentException(
                "Invalid parameter for state: '" + parameterName + "'");
        }

        River river = FLYSUtils.getRiver((FLYSArtifact) artifact);
        double lo = ((FLYSArtifact) artifact).getDataAsDouble("ld_from");
        double hi = ((FLYSArtifact) artifact).getDataAsDouble("ld_to");

        double kmLo = Math.min(lo, hi);
        double kmHi = Math.max(lo, hi);

        List<KVP<String, String>> kvp = new ArrayList<KVP<String, String>>();

        appendSingles(river, kmLo, kmHi, kvp);
        appendEpochs(river, kmLo, kmHi, kvp);

        return kvp.toArray(new KVP[kvp.size()]);
    }


    protected void appendSingles(
        River river,
        double kmLo,
        double kmHi,
        List<KVP<String, String>> kvp
    ) {
        List<BedHeightSingle> singles =
            BedHeightSingle.getBedHeightSingles(river, kmLo, kmHi);

        if (singles != null) {
            int size = singles.size();

            logger.debug("Found " + size + " singles.");

            for (int i = 0; i < size; i++) {
                BedHeightSingle s = singles.get(i);

                String id    = PREFIX_SINGLE + s.getId();
                String value = s.getDescription();

                kvp.add(new KVP(id, value));
            }
        }
    }


    protected void appendEpochs(
        River river,
        double kmLo,
        double kmHi,
        List<KVP<String, String>> kvp
    ) {
        List<BedHeightEpoch> epochs =
            BedHeightEpoch.getBedHeightEpochs(river, kmLo, kmHi);

        if (epochs != null) {
            int size = epochs.size();

            logger.debug("Found " + size + " epochs.");

            for (int i = 0; i < size; i++) {
                BedHeightEpoch e = epochs.get(i);

                String id    = PREFIX_EPOCH + e.getId();
                String value = e.getDescription();

                kvp.add(new KVP(id, value));
            }
        }
    }


    @Override
    protected String getLabelFor(
        CallContext cc,
        String      parameterName,
        String      value
    ) throws IllegalArgumentException
    {
        if (!testParameterName(parameterName)) {
            throw new IllegalArgumentException(
                "Invalid parameter for state: '" + parameterName + "'");
        }

        if (value.indexOf(PREFIX_SINGLE) >= 0) {
            return getLabelForSingle(cc, value);
        }
        else if (value.indexOf(PREFIX_EPOCH) >= 0) {
            return getLabelForEpoch(cc, value);
        }

        return value;
    }


    protected String getLabelForSingle(CallContext cc, String value) {
        String id = value.replace(PREFIX_SINGLE, "");
        try {
            BedHeightSingle s = BedHeightSingle.getBedHeightSingleById(
                Integer.parseInt(id));

            if (s != null) {
                return s.getDescription();
            }
            else {
                return "no value for '" + id + "'";
            }
        }
        catch (NumberFormatException nfe) {
            logger.warn("Could not parse id from string '" + id + "'", nfe);
        }

        return "n.A.";
    }


    protected String getLabelForEpoch(CallContext cc, String value) {
        String id = value.replace(PREFIX_EPOCH, "");
        try {
            BedHeightEpoch e = BedHeightEpoch.getBedHeightEpochById(
                Integer.parseInt(id));

            if (e != null) {
                return e.getDescription();
            }
            else {
                return "no value for '" + id + "'";
            }
        }
        catch (NumberFormatException nfe) {
            logger.warn("Could not parse id from string '" + id + "'", nfe);
        }

        return "n.A.";
    }


    /**
     * This method might be used to test, if a parameter name is handled by this
     * state.
     *
     * @param parameterName The name of a parameter.
     *
     * @return true, if parameterName is one of <i>MAIN_CHANNEL</i> or
     * <i>TOTAL_CHANNEL</i>. Otherwise false.
     */
    protected boolean testParameterName(String parameterName) {
        if (parameterName == null || parameterName.length() == 0) {
            return false;
        }
        else if (parameterName.equals(SOUNDINGS)) {
            return true;
        }
        else {
            return false;
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org