Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SoundingsSelect.java @ 4902:e1566938d04c
Added new functions to datacage templating language.
* get minimum of location/distance:
dc:fromValue($ld_mode, $ld_locations, $ld_from)
- returns -Double.MAX_VALUE if no min exists.
* get maximum of location/distance:
dc:toValue($ld_mode, $ld_locations, $ld_to)
- returns Double.MAX_VALUE if no max exists.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 29 Jan 2013 17:11:26 +0100 |
parents | c79b98085096 |
children |
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 logger. */ 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 :