comparison 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
comparison
equal deleted inserted replaced
966:13de46229f63 967:c7f8a9b4b006
53 SessionModel sm = SessionModelFactory.getInstance() 53 SessionModel sm = SessionModelFactory.getInstance()
54 .getSessionModel(request); 54 .getSessionModel(request);
55 55
56 ArtifactDescription ad = sm.getArtifactDescription(); 56 ArtifactDescription ad = sm.getArtifactDescription();
57 57
58 String target = request.getParameter("target"); 58 String target = request.getParameter("target");
59 OutputMode outputMode = sm.getOutputMode(target); 59 OutputMode outputMode = sm.getOutputMode(target);
60 Locale locale = sm.getCurrentLocale();
61
60 if (outputMode != null) { 62 if (outputMode != null) {
61
62 Collection<OutputParameter> op = outputMode 63 Collection<OutputParameter> op = outputMode
63 .getOutputParameters(); 64 .getOutputParameters();
64 if (op != null) { 65 if (op != null) {
65 Iterator<OutputParameter> it = op.iterator(); 66 Iterator<OutputParameter> it = op.iterator();
67 DiagrammOptions oldOptions = sm.getDiagrammOptions();
66 DiagrammOptions diagrammOptions = new DiagrammOptions(); 68 DiagrammOptions diagrammOptions = new DiagrammOptions();
67 while (it.hasNext()) { 69 while (it.hasNext()) {
68 OutputParameter parameter = it.next(); 70 OutputParameter parameter = it.next();
69 String name = parameter.getName(); 71 String name = parameter.getName();
70 String old = parameter.getValue(); 72 Object old = oldOptions != null
73 ? oldOptions.getValue(name)
74 : parameter.getValue();
71 String value = request.getParameter(name); 75 String value = request.getParameter(name);
72 String type = parameter.getType(); 76 String type = parameter.getType();
73 77
74 if (log.isDebugEnabled()) { 78 if (log.isDebugEnabled()) {
75 log.debug("Change chart options now..."); 79 log.debug("Change chart options now...");
106 value 110 value
107 ); 111 );
108 } 112 }
109 } 113 }
110 else if (type.equalsIgnoreCase("double")) { 114 else if (type.equalsIgnoreCase("double")) {
111 if (validDouble(request.getLocale(), value)) { 115 try {
112 diagrammOptions.setValue(name, value); 116 double val = parseDoubleValue(locale, value);
117 String valStr = Double.toString(val);
118 log.debug("Change diagram options ["
119 + name +"] to " + val);
120 diagrammOptions.setValue(name, val);
113 } 121 }
114 else { 122 catch (ParseException pe) {
115 log.warn("Text is not a valid double: "+value); 123 log.warn("Text is not a valid double: "+value);
116 diagrammOptions.setValue(name, old); 124 diagrammOptions.setValue(name, old);
117 125
118 request.setAttribute( 126 request.setAttribute(
119 CommunicationKeys.REQUEST_EXCEPTION_MESSAGE, 127 CommunicationKeys.REQUEST_EXCEPTION_MESSAGE,
176 catch (ParseException pe) { 184 catch (ParseException pe) {
177 return false; 185 return false;
178 } 186 }
179 } 187 }
180 188
181 protected boolean validDouble(Locale locale, String value) { 189 protected double parseDoubleValue(Locale locale, String value)
182 try { 190 throws ParseException
183 NumberFormat format = NumberFormat.getInstance(locale); 191 {
184 Number number = format.parse(value); 192 log.error("LOCALE FOR DOUBLE PARSING: " + locale.toString());
193 NumberFormat format = NumberFormat.getNumberInstance(locale);
194 Number number = format.parse(value);
185 195
186 if (number.doubleValue() < 0) 196 return number.doubleValue();
187 return false;
188
189 return (number instanceof Double) || validInteger(locale, value);
190 }
191 catch (ParseException pe) {
192 return false;
193 }
194 } 197 }
195 } 198 }
196 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 199 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org