# HG changeset patch # User Ingo Weinzierl # Date 1337066136 0 # Node ID 1bc35de0b786ce7f4ffc75008133cc49420c8d8c # Parent ae0742f92cd5a8dbaad077322a106e4ee2a3308e Improved the states for MINFO flow velocity calculation. flys-artifacts/trunk@4406 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r ae0742f92cd5 -r 1bc35de0b786 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon May 14 16:57:58 2012 +0000 +++ b/flys-artifacts/ChangeLog Tue May 15 07:15:36 2012 +0000 @@ -1,3 +1,16 @@ +2012-05-15 Ingo Weinzierl + + * doc/conf/artifacts/minfo.xml: Added new transistions and states for + MINFO flow velocity calculation. + + * src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java: + New abstract states that might be used to append a list of available + integer values to the DESCRIBE document. + + * src/main/java/de/intevation/flys/artifacts/states/DischargeState.java: + Concrete subclass of MultiIntArrayState which implements the abstract + method getOptions(). + 2012-05-14 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/model/Parameters.java: diff -r ae0742f92cd5 -r 1bc35de0b786 flys-artifacts/doc/conf/artifacts/minfo.xml --- a/flys-artifacts/doc/conf/artifacts/minfo.xml Mon May 14 16:57:58 2012 +0000 +++ b/flys-artifacts/doc/conf/artifacts/minfo.xml Tue May 15 07:15:36 2012 +0000 @@ -14,6 +14,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff -r ae0742f92cd5 -r 1bc35de0b786 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DischargeState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DischargeState.java Tue May 15 07:15:36 2012 +0000 @@ -0,0 +1,131 @@ +package de.intevation.flys.artifacts.states; + +import java.util.List; + +import org.apache.log4j.Logger; + +import de.intevation.artifacts.Artifact; + +import de.intevation.artifacts.common.model.KVP; + +import de.intevation.flys.model.DischargeZone; +import de.intevation.flys.model.River; + +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.utils.FLYSUtils; + + +public class DischargeState extends MultiIntArrayState { + + public static final String MAIN_CHANNEL = "main.channel"; + public static final String TOTAL_CHANNEL = "total.channel"; + + + private static final Logger logger = Logger.getLogger(DischargeState.class); + + + @Override + public String getUIProvider() { + return "parameter-matrix"; + } + + + /** + * This method fetches all DischargeZones for a given river (extracted from + * artifact) and returns a KVP[] where the key is the ID of the + * DischargeZone and the value is a string that consists of lower discharge + * and upper discharge. + * + * @param artifact Needs to be a FLYSArtifact that provides river + * information. + * @param parameterName The name of a parameter. + * + * @return a KVP[]. + */ + @Override + protected KVP[] getOptions( + Artifact artifact, + String parameterName + ) + throws IllegalArgumentException + { + if (!testParameterName(parameterName)) { + throw new IllegalArgumentException( + "Invalid parameter for state: '" + parameterName + "'"); + } + + List zones = getDischargeZones(artifact); + + KVP[] kvp = new KVP[zones.size()]; + + for (int i = 0; i < zones.size(); i++) { + DischargeZone zone = zones.get(i); + + String lower = zone.getLowerDischarge(); + String upper = zone.getUpperDischarge(); + + if (lower.equals(upper)) { + kvp[i] = new KVP(zone.getId(), lower); + } + else { + kvp[i] = new KVP(zone.getId(), lower + " - " + upper); + } + } + + return kvp; + } + + + /** + * 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 MAIN_CHANNEL or + * TOTAL_CHANNEL. Otherwise false. + */ + protected boolean testParameterName(String parameterName) { + if (parameterName == null || parameterName.length() == 0) { + return false; + } + else if (parameterName.equals(MAIN_CHANNEL)) { + return true; + } + else if (parameterName.equals(TOTAL_CHANNEL)) { + return true; + } + else { + return false; + } + } + + + /** + * Returns all discharge zones for a given river. The river information is + * extracted from artifact using FLYSUtils.getRiver(). + * + * @param artifact Needs to be a FLYSArtifact that stores a rivername. + * + * @return a list of DischargeZones. + * + * @throws IllegalArgumentException if no river information is provided by + * artifact. + */ + protected List getDischargeZones(Artifact artifact) + throws IllegalArgumentException + { + River river = FLYSUtils.getRiver((FLYSArtifact) artifact); + + if (river == null) { + throw new IllegalArgumentException("No river found"); + } + + List zones = DischargeZone.getDischargeZones(river); + + logger.debug("Found " + zones.size() + " DischargeZones."); + + return zones; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r ae0742f92cd5 -r 1bc35de0b786 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/MultiIntArrayState.java Tue May 15 07:15:36 2012 +0000 @@ -0,0 +1,59 @@ +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; + + +/** + * State that holds minimun and maximum (for validation). + * + * @author Ingo Weinzierl + */ +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); + + Element choices = creator.create("choices"); + + for (KVP kvp: getOptions(artifact, name)) { + Element item = creator.create("item"); + creator.addAttr(item, "label", kvp.getValue().toString(), true); + item.setTextContent(kvp.getKey().toString()); + + choices.appendChild(item); + } + + select.appendChild(choices); + } + catch (IllegalArgumentException iae) { + logger.warn("Illegal argument", iae); + } + } + + + protected abstract KVP[] getOptions( + Artifact artifact, + String parameterName + ) + throws IllegalArgumentException; +}