Source code: org/apache/hivemind/schema/rules/DoubleTranslator.java
1 // Copyright 2004, 2005 The Apache Software Foundation
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package org.apache.hivemind.schema.rules;
16
17 import java.util.Map;
18
19 import org.apache.hivemind.ApplicationRuntimeException;
20 import org.apache.hivemind.HiveMind;
21 import org.apache.hivemind.Location;
22 import org.apache.hivemind.internal.Module;
23 import org.apache.hivemind.schema.Translator;
24
25 /**
26 * Translates strings to integer values.
27 *
28 * @author Howard Lewis Ship
29 */
30 public class DoubleTranslator implements Translator
31 {
32 private double _minValue;
33 private boolean _isMinValue;
34 private double _maxValue;
35 private boolean _isMaxValue;
36 private double _defaultValue = 0;
37
38 public DoubleTranslator()
39 {
40 }
41
42 /**
43 * Initializers:
44 * <ul>
45 * <li>default: default value for empty or invalid input
46 * <li>min: minimum acceptible value
47 * <li>max: maximum acceptible value
48 * </ul>
49 */
50 public DoubleTranslator(String initializer)
51 {
52 Map m = RuleUtils.convertInitializer(initializer);
53
54 String defaultInit = (String) m.get("default");
55
56 if (defaultInit != null)
57 _defaultValue = Double.parseDouble(defaultInit);
58
59 String minInit = (String) m.get("min");
60 if (minInit != null)
61 {
62 _isMinValue = true;
63 _minValue = Double.parseDouble(minInit);
64 }
65
66 String maxInit = (String) m.get("max");
67 if (maxInit != null)
68 {
69 _isMaxValue = true;
70 _maxValue = Double.parseDouble(maxInit);
71 }
72 }
73
74 /**
75 * Converts the string to an Double. The empty string is returned as zero.
76 * On failure, an error is logged and the method returns zero.
77 */
78 public Object translate(
79 Module contributingModule,
80 Class propertyType,
81 String inputValue,
82 Location location)
83 {
84 if (HiveMind.isBlank(inputValue))
85 return new Double(_defaultValue);
86
87 double value;
88
89 try
90 {
91 value = Double.parseDouble(inputValue);
92 }
93 catch (Exception ex)
94 {
95 throw new ApplicationRuntimeException(
96 RulesMessages.invalidDoubleValue(inputValue),
97 location,
98 ex);
99 }
100
101 if (_isMinValue && value < _minValue)
102 throw new ApplicationRuntimeException(
103 RulesMessages.minDoubleValue(inputValue, _minValue));
104
105 if (_isMaxValue && value > _maxValue)
106 throw new ApplicationRuntimeException(
107 RulesMessages.maxDoubleValue(inputValue, _maxValue));
108
109 return new Double(value);
110 }
111 }