Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/states/SoundingsSelect.java @ 9479:2b83d3a96703
i18n TODO "benutzerdefiniert" = "custom" fixed
author | gernotbelger |
---|---|
date | Mon, 10 Sep 2018 15:31:55 +0200 |
parents | ba3ad54edbae |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.states; import java.text.NumberFormat; import java.util.Collections; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.common.model.KVP; import org.dive4elements.artifacts.common.utils.XMLUtils; import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.model.BedHeight; import org.dive4elements.river.model.River; import org.dive4elements.river.utils.Formatter; import org.dive4elements.river.utils.RiverUtils; import org.w3c.dom.Element; public abstract class SoundingsSelect extends DefaultState { private static final String SOUNDINGS = "soundings"; public static final String PREFIX_SINGLE = "single-"; /** Private log. */ private static final Logger log = Logger.getLogger(SoundingsSelect.class); @Override protected final void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { try { creator.addAttr(select, "type", "multiattribute", true); appendMeta(creator, select); getOptions(artifact, name, context, creator, select); } catch (final IllegalArgumentException iae) { log.warn("Illegal argument", iae); } } private static Element order(final ElementCreator creator, final String name, final String order) { final Element element = creator.create(name); creator.addAttr(element, "order", order, false); return element; } private void appendMeta(final ElementCreator creator, final Element select) { final Element meta = creator.create("meta"); meta.appendChild(order(creator, "year", "0")); meta.appendChild(order(creator, "value", "1")); meta.appendChild(order(creator, "analyzed_range", "2")); meta.appendChild(order(creator, "label", "3")); meta.appendChild(order(creator, "minfo_type", "4")); select.appendChild(meta); } private KVP<String, String>[] getOptions(final Artifact artifact, final String parameterName, final CallContext context, final ElementCreator creator, final Element select) throws IllegalArgumentException { log.debug("Get options for parameter: '" + parameterName + "'"); if (!testParameterName(parameterName)) { throw new IllegalArgumentException("Invalid parameter for state: '" + parameterName + "'"); } final River river = RiverUtils.getRiver((D4EArtifact) artifact); final double lo = ((D4EArtifact) artifact).getDataAsDouble("ld_from"); final double hi = ((D4EArtifact) artifact).getDataAsDouble("ld_to"); final double kmLo = Math.min(lo, hi); final double kmHi = Math.max(lo, hi); appendSingles(river, kmLo, kmHi, creator, select, context); final List<KVP<String, String>> kvp = Collections.<KVP<String, String>>emptyList(); return kvp.toArray(new KVP[kvp.size()]); } protected abstract boolean withHeightFieldsOnly(); private void appendSingles(final River river, final double kmLo, final double kmHi, final ElementCreator creator, final Element select, final CallContext context) { final List<BedHeight> singles = BedHeight.getBedHeights(river, kmLo, kmHi, withHeightFieldsOnly()); if (singles != null) { final int size = singles.size(); log.debug("Found " + size + " singles."); final NumberFormat nf = Formatter.getCalculationKm(context.getMeta()); for (int i = 0; i < size; i++) { final BedHeight s = singles.get(i); final String id = PREFIX_SINGLE + s.getId(); final String value = s.getDescription(); final Integer year = s.getYear(); final Element item = creator.create("item"); creator.addAttr(item, "label", value, true); creator.addAttr(item, "value", id, true); creator.addAttr(item, "analyzed_range", nf.format(s.getRange().getA()) + " - " + nf.format(s.getRange().getB())); creator.addAttr(item, "year", year != null ? s.getYear().toString() : ""); creator.addAttr(item, "minfo_type", s.getType().getName()); select.appendChild(item); } } if (log.isDebugEnabled()) { log.debug("appended singles"); log.debug(XMLUtils.toString(select)); } } @Override protected final Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value, final String type) { final 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); final String[] values = value.split(";"); for (final String val : values) { final Element item = creator.create("item"); creator.addAttr(item, "value", val, true); creator.addAttr(item, "label", getLabelFor(cc, name, val), true); data.appendChild(item); } return data; } private String getLabelFor(final CallContext cc, final String parameterName, final 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); } return value; } private String getLabelForSingle(final CallContext cc, final String value) { final String id = value.replace(PREFIX_SINGLE, ""); try { final BedHeight s = BedHeight.getBedHeightById(Integer.parseInt(id)); if (s != null) { return s.getDescription(); } else { return "no value for '" + id + "'"; } } catch (final NumberFormatException nfe) { log.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. */ private boolean testParameterName(final 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 :