diff gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java @ 967:c7f8a9b4b006

Improved parsing i18n values of chart/histogram options (issue289). gnv/trunk@1129 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 26 May 2010 17:03:29 +0000
parents 21ad44ccdb84
children 33198e55371c
line wrap: on
line diff
--- a/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java	Tue May 25 14:30:25 2010 +0000
+++ b/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java	Wed May 26 17:03:29 2010 +0000
@@ -55,19 +55,23 @@
 
             ArtifactDescription ad = sm.getArtifactDescription();
 
-            String target = request.getParameter("target");
+            String target         = request.getParameter("target");
             OutputMode outputMode = sm.getOutputMode(target);
+            Locale locale         = sm.getCurrentLocale();
+
             if (outputMode != null) {
-
                 Collection<OutputParameter> op = outputMode
                         .getOutputParameters();
                 if (op != null) {
                     Iterator<OutputParameter> it = op.iterator();
+                    DiagrammOptions oldOptions      = sm.getDiagrammOptions();
                     DiagrammOptions diagrammOptions = new DiagrammOptions();
                     while (it.hasNext()) {
                         OutputParameter parameter = it.next();
                         String name  = parameter.getName();
-                        String old   = parameter.getValue();
+                        Object old   = oldOptions != null
+                            ? oldOptions.getValue(name)
+                            : parameter.getValue();
                         String value = request.getParameter(name);
                         String type  = parameter.getType();
 
@@ -108,10 +112,14 @@
                             }
                         }
                         else if (type.equalsIgnoreCase("double")) {
-                            if (validDouble(request.getLocale(), value)) {
-                                diagrammOptions.setValue(name, value);
+                            try {
+                                double val    = parseDoubleValue(locale, value);
+                                String valStr = Double.toString(val);
+                                log.debug("Change diagram options ["
+                                    + name +"] to " + val);
+                                diagrammOptions.setValue(name, val);
                             }
-                            else {
+                            catch (ParseException pe) {
                                 log.warn("Text is not a valid double: "+value);
                                 diagrammOptions.setValue(name, old);
 
@@ -178,19 +186,14 @@
         }
     }
 
-    protected boolean validDouble(Locale locale, String value) {
-        try {
-            NumberFormat format = NumberFormat.getInstance(locale);
-            Number       number = format.parse(value);
+    protected double parseDoubleValue(Locale locale, String value)
+    throws ParseException
+    {
+        log.error("LOCALE FOR DOUBLE PARSING: " + locale.toString());
+        NumberFormat format = NumberFormat.getNumberInstance(locale);
+        Number       number = format.parse(value);
 
-            if (number.doubleValue() < 0)
-                return false;
-
-            return (number instanceof Double) || validInteger(locale, value);
-        }
-        catch (ParseException pe) {
-            return false;
-        }
+        return number.doubleValue();
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org