Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SoundingsSelect.java @ 3318:dbe2f85bf160
merged flys-artifacts/2.8
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:35 +0200 |
parents | 4a76da133144 |
children | 200e70f31f6f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SoundingsSelect.java Fri Sep 28 12:14:35 2012 +0200 @@ -0,0 +1,199 @@ +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 + ) + 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<String,String>[]) 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) { + for (int i = 0, S = singles.size(); i < S; 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) { + for (int i = 0, E = epochs.size(); i < E; 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 :