Mercurial > dive4elements > gnv-client
diff gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java @ 663:9a019c125b60
Improved error handling when changing chart/histogram options.
gnv/trunk@755 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 09 Mar 2010 15:18:11 +0000 |
parents | a634d5ee961d |
children | 15ac78a91d1b |
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java Mon Mar 08 17:09:28 2010 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java Tue Mar 09 15:18:11 2010 +0000 @@ -1,7 +1,10 @@ package de.intevation.gnv.action; +import java.text.NumberFormat; +import java.text.ParseException; import java.util.Collection; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -18,6 +21,8 @@ import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.OutputMode; import de.intevation.gnv.artifactdatabase.objects.OutputParameter; +import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; +import de.intevation.gnv.propertiesreader.PropertiesReader; /** * @author Tim Englich <tim.englich@intevation.de> @@ -42,6 +47,8 @@ HttpServletResponse response) throws Exception { log.debug("NextArtifactStepAction.execute"); try { + PropertiesReaderFactory fac = PropertiesReaderFactory.getInstance(); + PropertiesReader reader = fac.getPropertiesReader(); SessionModel sm = SessionModelFactory.getInstance() .getSessionModel(request); @@ -58,17 +65,66 @@ DiagrammOptions diagrammOptions = new DiagrammOptions(); while (it.hasNext()) { OutputParameter parameter = it.next(); - String value = request.getParameter(parameter.getName()); - if (parameter.getType().equalsIgnoreCase("boolean")){ + String name = parameter.getName(); + String old = parameter.getValue(); + String value = request.getParameter(name); + String type = parameter.getType(); + + if (log.isDebugEnabled()) { + log.debug("Change chart options now..."); + log.debug("Parameter name: " + name); + log.debug("Parameter type: " + type); + log.debug("Parameter value: " + value); + } + + if (type.equalsIgnoreCase("boolean")){ if (value == null){ value = "false"; } else { value = "true"; } + + diagrammOptions.setValue(name,value); } - diagrammOptions.setValue(parameter.getName(),value); + else if (type.equalsIgnoreCase("integer")) { + if (validInteger(request.getLocale(), value)) { + diagrammOptions.setValue(name, value); + } + else { + log.warn("Text is not a valid integer: "+value); + diagrammOptions.setValue(name, old); + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_MESSAGE, + "input.not.a.integer" + ); + + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_VALUE, + value + ); + } + } + else if (type.equalsIgnoreCase("double")) { + if (validDouble(request.getLocale(), value)) { + diagrammOptions.setValue(name, value); + } + else { + log.warn("Text is not a valid double: "+value); + diagrammOptions.setValue(name, old); + + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_MESSAGE, + "input.not.a.double" + ); + + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_VALUE, + value + ); + } + } } sm.setDiagrammOptions(diagrammOptions); @@ -101,5 +157,40 @@ } } + protected boolean validInteger(Locale locale, String value) { + try { + if (value.split("\\.").length > 1 || value.split("\\,").length > 1){ + return false; + } + + NumberFormat format = NumberFormat.getIntegerInstance(locale); + format.setParseIntegerOnly(true); + Number number = format.parse(value); + + if (number.longValue() < 0) + return false; + + return (number instanceof Integer) || (number instanceof Long); + } + catch (ParseException pe) { + return false; + } + } + + + protected boolean validDouble(Locale locale, String value) { + try { + NumberFormat format = NumberFormat.getInstance(locale); + Number number = format.parse(value); + + if (number.doubleValue() < 0) + return false; + + return (number instanceof Double) || validInteger(locale, value); + } + catch (ParseException pe) { + return false; + } + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :