Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / service / simulator / java / sdk / src / org / oic / simulator / DoubleProperty.java
1 /*
2  * Copyright 2015 Samsung Electronics All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.oic.simulator;
18
19 import java.util.Arrays;
20
21 public class DoubleProperty extends AttributeProperty {
22
23     private double   mDefaultValue;
24     private double   mMin;
25     private double   mMax;
26     private double[] mValues;
27     private boolean  mHasRange = false;
28
29     private DoubleProperty(double value) {
30         super(Type.DOUBLE);
31         mDefaultValue = value;
32     }
33
34     private DoubleProperty(double value, double min, double max) {
35         super(Type.DOUBLE);
36         mDefaultValue = value;
37         mMin = min;
38         mMax = max;
39         mHasRange = true;
40     }
41
42     private DoubleProperty(double value, double[] values) {
43         super(Type.DOUBLE);
44         mDefaultValue = value;
45         mValues = Arrays.copyOf(values, values.length);
46         Arrays.sort(mValues);
47     }
48
49     @Override
50     public boolean isDouble() {
51         return true;
52     }
53
54     @Override
55     public DoubleProperty asDouble() {
56         return this;
57     }
58
59     public double getDefaultValue() {
60         return mDefaultValue;
61     }
62
63     public boolean hasRange() {
64         return mHasRange;
65     }
66
67     public double min() {
68         return mMin;
69     }
70
71     public double max() {
72         return mMax;
73     }
74
75     public boolean hasValues() {
76         return (null != mValues && (mValues.length > 0));
77     }
78
79     public double[] getValues() {
80         return mValues;
81     }
82
83     @Override
84     public boolean validate(AttributeValue value) {
85         return new DoubleValueValidator(this).validate(value);
86     }
87
88     public boolean validate(double value) {
89         if (mHasRange && (value < mMin || value > mMax)) {
90             return false;
91         } else if (hasValues() && 0 > Arrays.binarySearch(mValues, value)) {
92             return false;
93         }
94
95         return true;
96     }
97
98     public static class Builder {
99         private double   mDefaultValue = 0;
100         private double   mMin;
101         private double   mMax;
102         private double[] mValues;
103         private boolean  mHasRange     = false;
104
105         public void setDefaultValue(double value) {
106             mDefaultValue = value;
107         }
108
109         public void setRange(double min, double max) {
110             mMin = min;
111             mMax = max;
112             mHasRange = true;
113         }
114
115         public void setValues(double[] values) {
116             mValues = values;
117         }
118
119         public DoubleProperty build() {
120             if (mHasRange)
121                 return new DoubleProperty(mDefaultValue, mMin, mMax);
122             if (null != mValues && (0 != mValues.length))
123                 return new DoubleProperty(mDefaultValue, mValues);
124             return new DoubleProperty(mDefaultValue);
125         }
126     }
127 }