Displaying and editing the complex value types for attributes.
[platform/upstream/iotivity.git] / service / simulator / java / sdk / src / org / oic / simulator / AttributeValueValidation.java
1 package org.oic.simulator;
2
3 public class AttributeValueValidation implements
4         AttributeValueVisitor.VisitingMethods<Boolean> {
5     private AttributeProperty mProperty = null;
6
7     public AttributeValueValidation(AttributeProperty property) {
8         mProperty = property;
9     }
10
11     public boolean validate(AttributeValue value) {
12         AttributeValueVisitor visitor = new AttributeValueVisitor(value, this);
13         Boolean result = (Boolean) visitor.visit();
14         return result.booleanValue();
15     }
16
17     @Override
18     public Boolean visitingValue(Integer value) {
19         if (mProperty == null)
20             return false;
21
22         if (checkRange(value.doubleValue()) || checkValueSet(value))
23             return true;
24         return false;
25     }
26
27     @Override
28     public Boolean visitingValue(Double value) {
29         if (mProperty == null)
30             return false;
31
32         if (checkRange(value.doubleValue()) || checkValueSet(value))
33             return true;
34         return false;
35     }
36
37     @Override
38     public Boolean visitingValue(Boolean value) {
39         if (mProperty == null)
40             return false;
41
42         if (checkValueSet(value))
43             return true;
44         return false;
45     }
46
47     @Override
48     public Boolean visitingValue(String value) {
49         if (mProperty == null)
50             return false;
51
52         if (checkRange(value.length()) || checkValueSet(value))
53             return true;
54         return false;
55     }
56
57     @Override
58     public Boolean visitingValue(SimulatorResourceModel value) {
59         return false;
60     }
61
62     @Override
63     public Boolean visitingValue(Integer[] values) {
64         if (mProperty == null)
65             return false;
66
67         if (!checkRange(values.length))
68             return false;
69
70         if (mProperty.getChildProperty() != null) {
71             AttributeValueValidation rangeValidation = new AttributeValueValidation(
72                     mProperty.getChildProperty());
73             for (Integer value : values) {
74                 if (rangeValidation.visitingValue(value) == false)
75                     return false;
76             }
77         }
78
79         return true;
80     }
81
82     @Override
83     public Boolean visitingValue(Double[] values) {
84         if (mProperty == null)
85             return false;
86
87         if (!checkRange(values.length))
88             return false;
89
90         if (mProperty.getChildProperty() != null) {
91             AttributeValueValidation rangeValidation = new AttributeValueValidation(
92                     mProperty.getChildProperty());
93             for (Double value : values) {
94                 if (rangeValidation.visitingValue(value) == false)
95                     return false;
96             }
97         }
98
99         return true;
100     }
101
102     @Override
103     public Boolean visitingValue(Boolean[] values) {
104         if (mProperty == null)
105             return false;
106
107         if (!checkRange(values.length))
108             return false;
109
110         if (mProperty.getChildProperty() != null) {
111             AttributeValueValidation rangeValidation = new AttributeValueValidation(
112                     mProperty.getChildProperty());
113             for (Boolean value : values) {
114                 if (rangeValidation.visitingValue(value) == false)
115                     return false;
116             }
117         }
118
119         return true;
120     }
121
122     @Override
123     public Boolean visitingValue(String[] values) {
124         if (mProperty == null)
125             return false;
126
127         if (!checkRange(values.length))
128             return false;
129
130         if (mProperty.getChildProperty() != null) {
131             AttributeValueValidation rangeValidation = new AttributeValueValidation(
132                     mProperty.getChildProperty());
133             for (String value : values) {
134                 if (rangeValidation.visitingValue(value) == false)
135                     return false;
136             }
137         }
138
139         return true;
140     }
141
142     @Override
143     public Boolean visitingValue(SimulatorResourceModel[] value) {
144         return false;
145     }
146
147     @Override
148     public Boolean visitingValue(Integer[][] values) {
149         if (mProperty == null)
150             return false;
151
152         if (!checkRange(values.length))
153             return false;
154
155         if (mProperty.getChildProperty() != null) {
156             AttributeValueValidation rangeValidation = new AttributeValueValidation(
157                     mProperty.getChildProperty());
158             for (Integer[] value : values) {
159                 if (rangeValidation.visitingValue(value) == false)
160                     return false;
161             }
162         }
163
164         return true;
165     }
166
167     @Override
168     public Boolean visitingValue(Double[][] values) {
169         if (mProperty == null)
170             return false;
171
172         if (!checkRange(values.length))
173             return false;
174
175         if (mProperty.getChildProperty() != null) {
176             AttributeValueValidation rangeValidation = new AttributeValueValidation(
177                     mProperty.getChildProperty());
178             for (Double[] value : values) {
179                 if (rangeValidation.visitingValue(value) == false)
180                     return false;
181             }
182         }
183
184         return true;
185     }
186
187     @Override
188     public Boolean visitingValue(Boolean[][] values) {
189         if (mProperty == null)
190             return false;
191
192         if (!checkRange(values.length))
193             return false;
194
195         if (mProperty.getChildProperty() != null) {
196             AttributeValueValidation rangeValidation = new AttributeValueValidation(
197                     mProperty.getChildProperty());
198             for (Boolean[] value : values) {
199                 if (rangeValidation.visitingValue(value) == false)
200                     return false;
201             }
202         }
203
204         return true;
205     }
206
207     @Override
208     public Boolean visitingValue(String[][] values) {
209         if (mProperty == null)
210             return false;
211
212         if (!checkRange(values.length))
213             return false;
214
215         if (mProperty.getChildProperty() != null) {
216             AttributeValueValidation rangeValidation = new AttributeValueValidation(
217                     mProperty.getChildProperty());
218             for (String[] value : values) {
219                 if (rangeValidation.visitingValue(value) == false)
220                     return false;
221             }
222         }
223
224         return true;
225     }
226
227     @Override
228     public Boolean visitingValue(SimulatorResourceModel[][] value) {
229         return false;
230     }
231
232     @Override
233     public Boolean visitingValue(Integer[][][] values) {
234         if (mProperty == null)
235             return false;
236
237         if (!checkRange(values.length))
238             return false;
239
240         if (mProperty.getChildProperty() != null) {
241             AttributeValueValidation rangeValidation = new AttributeValueValidation(
242                     mProperty.getChildProperty());
243             for (Integer[][] value : values) {
244                 if (rangeValidation.visitingValue(value) == false)
245                     return false;
246             }
247         }
248
249         return true;
250     }
251
252     @Override
253     public Boolean visitingValue(Double[][][] values) {
254         if (mProperty == null)
255             return false;
256
257         if (!checkRange(values.length))
258             return false;
259
260         if (mProperty.getChildProperty() != null) {
261             AttributeValueValidation rangeValidation = new AttributeValueValidation(
262                     mProperty.getChildProperty());
263             for (Double[][] value : values) {
264                 if (rangeValidation.visitingValue(value) == false)
265                     return false;
266             }
267         }
268
269         return true;
270     }
271
272     @Override
273     public Boolean visitingValue(Boolean[][][] values) {
274         if (mProperty == null)
275             return false;
276
277         if (!checkRange(values.length))
278             return false;
279
280         if (mProperty.getChildProperty() != null) {
281             AttributeValueValidation rangeValidation = new AttributeValueValidation(
282                     mProperty.getChildProperty());
283             for (Boolean[][] value : values) {
284                 if (rangeValidation.visitingValue(value) == false)
285                     return false;
286             }
287         }
288
289         return true;
290     }
291
292     @Override
293     public Boolean visitingValue(String[][][] values) {
294         if (mProperty == null)
295             return false;
296
297         if (!checkRange(values.length))
298             return false;
299
300         if (mProperty.getChildProperty() != null) {
301             AttributeValueValidation rangeValidation = new AttributeValueValidation(
302                     mProperty.getChildProperty());
303             for (String[][] value : values) {
304                 if (rangeValidation.visitingValue(value) == false)
305                     return false;
306             }
307         }
308
309         return true;
310     }
311
312     @Override
313     public Boolean visitingValue(SimulatorResourceModel[][][] value) {
314         return false;
315     }
316
317     private boolean checkRange(double value) {
318         if (AttributeProperty.Type.RANGE == mProperty.type()
319                 && (value >= mProperty.min() && value <= mProperty.max())) {
320             return true;
321         }
322
323         return false;
324     }
325
326     private <T> boolean checkValueSet(T value) {
327         if (AttributeProperty.Type.VALUESET == mProperty.type()
328                 && null != mProperty.valueSet()) {
329             for (AttributeValue allowedValue : mProperty.valueSet()) {
330                 if (allowedValue.get().equals(value))
331                     return true;
332             }
333         }
334
335         return false;
336     }
337 }