Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/LocationSelect.java @ 444:932a5e3c7fa1
ISSUE-72 Repaired broken XPath expression in MainValuesService to extract start and end kilometer.
flys-artifacts/trunk@1936 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 17 May 2011 11:53:02 +0000 |
parents | 478940d06876 |
children | 929137ee8154 |
line wrap: on
line source
package de.intevation.flys.artifacts.states; import java.util.Map; import gnu.trove.TDoubleArrayList; import org.apache.log4j.Logger; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifactdatabase.data.StateData; /** * This state is used to realize the input of multiple locations as string. The * string should be a whitespace separated list of double values where each * double value represents a location. * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class LocationSelect extends LocationDistanceSelect { /** The logger used in this class.*/ private static Logger logger = Logger.getLogger(LocationSelect.class); /** The name of the StateData object that stores the location string.*/ public static final String FIELD_LOCATIONS = "ld_locations"; public LocationSelect() { } @Override protected String getUIProvider() { return "location_panel"; } @Override public boolean validate(Artifact artifact, CallContext context) throws IllegalArgumentException { logger.debug("LocationSelect.validate"); Map<String, StateData> data = getData(); String locationStr = (String) data.get(FIELD_LOCATIONS).getValue(); if (locationStr == null || locationStr.length() == 0) { logger.error("No locations given."); throw new IllegalArgumentException("error_empty_state"); } double[] minmax = getMinMaxDistance(artifact); double[] mm = extractLocations(locationStr); logger.debug("Inserted min location: " + mm[0]); logger.debug("Inserted max location: " + mm[mm.length-1]); return validateBounds(minmax[0], minmax[1], mm[0], mm[mm.length-1], 0d); } /** * This method takes a string that consist of whitespace separated double * values and returns the double values as array. * * @param locationStr The locations inserted in this state. * * @return the locations as array. */ protected double[] extractLocations(String locationStr) { String[] tmp = locationStr.split(" "); TDoubleArrayList locations = new TDoubleArrayList(); for (String l: tmp) { try { locations.add(Double.parseDouble(l)); } catch (NumberFormatException nfe) { logger.warn(nfe, nfe); } } locations.sort(); return locations.toNativeArray(); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :