39945ebe769876f8e26860214e653196c1b1f9ab
[platform/upstream/iotivity.git] / service / simulator / java / sdk / src / org / oic / simulator / StringProperty.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 StringProperty extends AttributeProperty {
22
23     private String   mDefaultValue;
24     private int      mMin;
25     private int      mMax;
26     private String[] mValues;
27     private boolean  mHasRange = false;
28
29     private StringProperty(String value) {
30         super(Type.STRING);
31         mDefaultValue = value;
32     }
33
34     private StringProperty(String value, int min, int max) {
35         super(Type.STRING);
36         mDefaultValue = value;
37         mMin = min;
38         mMax = max;
39         mHasRange = true;
40     }
41
42     private StringProperty(String value, String[] values) {
43         super(Type.STRING);
44         mDefaultValue = value;
45         mValues = values;
46     }
47
48     @Override
49     public boolean isString() {
50         return true;
51     }
52
53     @Override
54     public StringProperty asString() {
55         return this;
56     }
57
58     public String getDefaultValue() {
59         return mDefaultValue;
60     }
61
62     public boolean hasRange() {
63         return mHasRange;
64     }
65
66     public int min() {
67         return mMin;
68     }
69
70     public int max() {
71         return mMax;
72     }
73
74     public boolean hasValues() {
75         return (null != mValues && (mValues.length > 0));
76     }
77
78     public String[] getValues() {
79         return mValues;
80     }
81
82     @Override
83     public boolean validate(AttributeValue value) {
84         return new StringValueValidator(this).validate(value);
85     }
86
87     public boolean validate(String value) {
88         int length = value.length();
89         if (mHasRange && (length < mMin || length > mMax)) {
90             return false;
91         } else if (mValues.length > 0
92                 && -1 == Arrays.binarySearch(mValues, value)) {
93             return false;
94         }
95
96         return true;
97     }
98
99     public static class Builder {
100         private String   mDefaultValue = new String();
101         private int      mMin;
102         private int      mMax;
103         private String[] mValues;
104         private boolean  mHasRange     = false;
105
106         public void setDefaultValue(String value) {
107             if (null != value)
108                 mDefaultValue = value;
109         }
110
111         public void setRange(int min, int max) {
112             mMin = min;
113             mMax = max;
114             mHasRange = true;
115         }
116
117         public void setValues(String[] values) {
118             mValues = values;
119         }
120
121         public StringProperty build() {
122             if (mHasRange)
123                 return new StringProperty(mDefaultValue, mMin, mMax);
124             if (null != mValues && (0 != mValues.length))
125                 return new StringProperty(mDefaultValue, mValues);
126             return new StringProperty(mDefaultValue);
127         }
128     }
129 }