Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/LocationSelect.java @ 4241:49cb65d5932d
Improved the historical discharge calculation.
The calculation now creates new HistoricalWQKms (new subclass of WQKms). Those WQKms are used
to create new facets from (new) type 'HistoricalDischargeCurveFacet'. The chart generator is
improved to support those facets.
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 14:34:35 +0200 |
parents | d9af29a4bb85 |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.states; import gnu.trove.TDoubleArrayList; import org.apache.log4j.Logger; import org.w3c.dom.Element; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifactdatabase.data.StateData; import de.intevation.flys.artifacts.FLYSArtifact; /** * 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); public LocationSelect() { } /** UI Provider (which input method should the client provide to user. */ @Override protected String getUIProvider() { return "location_panel"; } @Override protected Element[] createItems( XMLUtils.ElementCreator cr, Artifact artifact, String name, CallContext context) { double[] minmax = getMinMax(artifact); double minVal = Double.MIN_VALUE; double maxVal = Double.MAX_VALUE; if (minmax != null) { minVal = minmax[0]; maxVal = minmax[1]; } else { logger.warn("Could not read min/max distance values!"); } if (name.equals(LOCATIONS)) { Element min = createItem( cr, new String[] {"min", new Double(minVal).toString()}); Element max = createItem( cr, new String[] {"max", new Double(maxVal).toString()}); return new Element[] { min, max }; } return null; } /** Validates data from artifact. */ @Override public boolean validate(Artifact artifact) throws IllegalArgumentException { logger.debug("LocationSelect.validate"); FLYSArtifact flys = (FLYSArtifact) artifact; StateData data = getData(flys, LOCATIONS); String locationStr = data != null ? (String) data.getValue() : null; if (locationStr == null || locationStr.length() == 0) { logger.error("No locations given."); throw new IllegalArgumentException("error_empty_state"); } double[] minmax = getMinMax(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 :