Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/CalculationSelectMinfo.java @ 5818:a4ff4167be1e
Request feature info on all layers and show it as html if
the server does not return valid gml.
Non queryable layers produce an error message when the request
fails. This is good enough
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 24 Apr 2013 17:33:27 +0200 |
parents | edaa2297aea3 |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.states; import org.apache.log4j.Logger; import org.w3c.dom.Element; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifactdatabase.data.StateData; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.resources.Resources; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class CalculationSelectMinfo extends DefaultState { /** The logger that is used in this class. */ private static Logger logger = Logger.getLogger(CalculationSelectMinfo.class); public static final String FIELD_MODE = "calculation_mode"; public static final String CALC_BED_MIDDLE = "calc.bed.middle"; public static final String CALC_BED_DIFF = "calc.bed.diff"; public static final String CALC_BED_QUALITY = "calc.bed.quality"; public static final String CALC_SEDIMENT_LOAD = "calc.sediment.load"; public static final String CALC_FLOW_VELOCITY = "calc.flow.velocity"; public static final String CALC_SQ_RELATION = "calc.sq.relation"; /** An array that holds all available calculation modes. */ public static final String[] CALCULATIONS = { CALC_BED_MIDDLE, CALC_BED_DIFF, CALC_BED_QUALITY, CALC_SEDIMENT_LOAD, CALC_FLOW_VELOCITY, CALC_SQ_RELATION }; /** Error message that is thrown if no mode has been chosen. */ public static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode"; /** Error message that is thrown if an invalid calculation mode has been * chosen. */ public static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode"; public CalculationSelectMinfo() { } @Override protected Element[] createItems( XMLUtils.ElementCreator cr, Artifact artifact, String name, CallContext context) { CallMeta meta = context.getMeta(); Element[] calcs = new Element[CALCULATIONS.length]; for (int i = 0; i < CALCULATIONS.length; ++i) { String calc = CALCULATIONS[i]; calcs[i] = createItem( cr, new String[] { Resources.getMsg(meta, calc, calc), calc }); } return calcs; } @Override public boolean validate(Artifact artifact) throws IllegalArgumentException { logger.debug("CalculationSelect.validate"); FLYSArtifact flys = (FLYSArtifact) artifact; StateData data = getData(flys, FIELD_MODE); String calc = (data != null) ? (String) data.getValue() : null; if (calc == null) { throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE); } calc = calc.trim().toLowerCase(); for (String mode: CALCULATIONS) { if (mode.equals(calc)) { return true; } } throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :