1
2
3
4
5 package pt.digitalis.dif.dem.objects.parameters.types;
6
7 import java.math.BigDecimal;
8 import java.util.ArrayList;
9 import java.util.Date;
10 import java.util.List;
11
12 import pt.digitalis.dif.controller.interfaces.IDIFContext;
13 import pt.digitalis.dif.dem.interfaces.IStageInstance;
14 import pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint;
15 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterError;
16 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterErrorList;
17 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterErrorType;
18 import pt.digitalis.dif.exception.objects.ParameterException;
19 import pt.digitalis.dif.startup.DIFGeneralConfigurationParameters;
20
21
22
23
24
25
26
27
28
29
30 public class DoubleParameter extends AbstractParameter<Number> {
31
32
33 @SuppressWarnings("serial")
34 final static private List<String> supportedClasses = new ArrayList<String>() {
35
36 {
37 add(Double.class.getCanonicalName());
38 }
39 };
40
41
42
43
44 @Override
45 protected String automaticConstraints()
46 {
47 return "numeric";
48 }
49
50
51
52
53 public List<String> getSupportedClasses()
54 {
55 return supportedClasses;
56 }
57
58
59
60
61 public BigDecimal getValueAsBigDecimal(IDIFContext context) throws ParameterException
62 {
63 return BigDecimal.valueOf(getValue(context).doubleValue());
64 }
65
66
67
68
69 public boolean getValueAsBoolean(IDIFContext context) throws ParameterException
70 {
71 return (getValue(context).doubleValue() != 0D);
72 }
73
74
75
76
77 public Date getValueAsDate(IDIFContext context)
78 {
79 return null;
80 }
81
82
83
84
85 public Double getValueAsDouble(IDIFContext context) throws ParameterException
86 {
87 return getValue(context).doubleValue();
88 }
89
90
91
92
93 public Long getValueAsLong(IDIFContext context) throws ParameterException
94 {
95 return getValue(context).longValue();
96 }
97
98
99
100
101 public boolean isNumeric()
102 {
103 return true;
104 }
105
106
107
108
109
110 public ParameterErrorList setValueFromString(String value, IStageInstance stageInstance,
111 boolean initializationInProgress)
112 {
113
114 ParameterErrorList list = new ParameterErrorList(this, value);
115 ParameterError error;
116
117 IParameterConstraint constraint = getConstraints().get("numeric");
118 IDIFContext context;
119
120 if (stageInstance == null)
121 context = null;
122 else
123 context = stageInstance.getContext();
124
125
126 if (!constraint.validateConstraint(value, stageInstance))
127 {
128 String language;
129
130 if (context == null)
131 language = DIFGeneralConfigurationParameters.getInstance().getDefaultLanguage();
132 else
133 language = context.getLanguage();
134
135 error = new ParameterError(constraint.validationErrorMessage(language), ParameterErrorType.CONSTRAINT);
136 error.setConstraint("numeric", constraint);
137
138 list.addError(error);
139 }
140 else
141 {
142 try
143 {
144 if (value == null || "".equals(value))
145 return setValue(null, stageInstance, initializationInProgress);
146 else
147 {
148 value = value.replace(',', '.').trim();
149
150 return setValue(Double.valueOf(value), stageInstance, initializationInProgress);
151 }
152 }
153 catch (Exception e)
154 {
155
156
157
158
159
160
161 error = new ParameterError("Error parsing value", ParameterErrorType.OTHER);
162 error.setException(e);
163 list.addError(error);
164 }
165 }
166 return list;
167 }
168 }