[SDC-29] rebase continue work to align source
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / tosca / ToscaPropertyType.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.tosca;
22
23 import org.openecomp.sdc.be.model.tosca.converters.BooleanConverter;
24 import org.openecomp.sdc.be.model.tosca.converters.DefaultConverter;
25 import org.openecomp.sdc.be.model.tosca.converters.FloatConverter;
26 import org.openecomp.sdc.be.model.tosca.converters.IntegerConverter;
27 import org.openecomp.sdc.be.model.tosca.converters.JsonConverter;
28 import org.openecomp.sdc.be.model.tosca.converters.ListConverter;
29 import org.openecomp.sdc.be.model.tosca.converters.MapConverter;
30 import org.openecomp.sdc.be.model.tosca.converters.PropertyValueConverter;
31 import org.openecomp.sdc.be.model.tosca.converters.StringConvertor;
32 import org.openecomp.sdc.be.model.tosca.converters.ToscaBooleanConverter;
33 import org.openecomp.sdc.be.model.tosca.converters.ToscaFloatConverter;
34 import org.openecomp.sdc.be.model.tosca.converters.ToscaJsonValueConverter;
35 import org.openecomp.sdc.be.model.tosca.converters.ToscaListValueConverter;
36 import org.openecomp.sdc.be.model.tosca.converters.ToscaMapValueConverter;
37 import org.openecomp.sdc.be.model.tosca.converters.ToscaStringConvertor;
38 import org.openecomp.sdc.be.model.tosca.converters.ToscaValueConverter;
39 import org.openecomp.sdc.be.model.tosca.converters.ToscaValueDefaultConverter;
40 import org.openecomp.sdc.be.model.tosca.validators.BooleanValidator;
41 import org.openecomp.sdc.be.model.tosca.validators.FloatValidator;
42 import org.openecomp.sdc.be.model.tosca.validators.IntegerValidator;
43 import org.openecomp.sdc.be.model.tosca.validators.JsonValidator;
44 import org.openecomp.sdc.be.model.tosca.validators.KeyValidator;
45 import org.openecomp.sdc.be.model.tosca.validators.ListValidator;
46 import org.openecomp.sdc.be.model.tosca.validators.MapValidator;
47 import org.openecomp.sdc.be.model.tosca.validators.PropertyTypeValidator;
48 import org.openecomp.sdc.be.model.tosca.validators.StringValidator;
49
50 /**
51  * The primitive type that TOSCA YAML supports.
52  * 
53  * @author esofer
54  */
55 public enum ToscaPropertyType {
56
57         Root("tosca.datatypes.Root", null, null, null, true),
58
59         STRING("string", StringValidator.getInstance(), StringConvertor.getInstance(), ToscaStringConvertor.getInstance()),
60
61         BOOLEAN("boolean", BooleanValidator.getInstance(), ToscaBooleanConverter.getInstance(), BooleanConverter.getInstance()),
62
63         FLOAT("float", FloatValidator.getInstance(), ToscaFloatConverter.getInstance(), FloatConverter.getInstance()),
64
65         INTEGER("integer", IntegerValidator.getInstance(), DefaultConverter.getInstance(), IntegerConverter.getInstance()),
66         
67         SCALAR_UNIT("scalar-unit", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
68
69         SCALAR_UNIT_SIZE("scalar-unit.size", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
70
71         SCALAR_UNIT_TIME("scalar-unit.time", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
72
73         SCALAR_UNIT_FREQUENCY("scalar-unit.frequency", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
74
75         RANGE("range", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
76
77         TIMESTAMP("timestamp", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
78
79         MAP("map", MapValidator.getInstance(), MapConverter.getInstance(), ToscaMapValueConverter.getInstance()),
80
81         LIST("list", ListValidator.getInstance(), ListConverter.getInstance(), ToscaListValueConverter.getInstance()),
82
83         VERSION("version", StringValidator.getInstance(), DefaultConverter.getInstance(), ToscaValueDefaultConverter.getInstance()),
84
85         KEY("key", KeyValidator.getInstance(), StringConvertor.getInstance(), ToscaValueDefaultConverter.getInstance()),
86
87         JSON("json", JsonValidator.getInstance(), JsonConverter.getInstance(), ToscaJsonValueConverter.getInstance());
88
89         // CREDENTIAL("tosca.datatypes.Credential", StringValidator.getInstance(),
90         // DefaultConverter.getInstance());
91
92         private String type;
93         private PropertyTypeValidator validator;
94         private PropertyValueConverter converter;
95         private ToscaValueConverter valueConverter;
96         private boolean isAbstract = false;
97
98         ToscaPropertyType(String type, PropertyTypeValidator validator, PropertyValueConverter converter, ToscaValueConverter valueConverter) {
99                 this.type = type;
100                 this.validator = validator;
101                 this.converter = converter;
102                 this.valueConverter = valueConverter;
103         }
104
105         ToscaPropertyType(String type, PropertyTypeValidator validator, PropertyValueConverter converter, ToscaValueConverter valueConverter, boolean isAbstract) {
106                 this(type, validator, converter, valueConverter);
107                 this.isAbstract = isAbstract;
108         }
109
110         // private static final Pattern TIMESTAMP_REGEX = Pattern
111         // .compile("[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?([Tt]|[
112         // \\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](\\.[0-9]*)?(([ \\t]*)Z|([
113         // \\t]*)[-+][0-9][0-9]?(:[0-9][0-9])?)?");
114
115         public String getType() {
116                 return type;
117         }
118
119         public void setType(String type) {
120                 this.type = type;
121         }
122
123         public PropertyTypeValidator getValidator() {
124                 return validator;
125         }
126
127         public void setValidator(PropertyTypeValidator validator) {
128                 this.validator = validator;
129         }
130
131         public PropertyValueConverter getConverter() {
132                 return converter;
133         }
134
135         public void setConverter(PropertyValueConverter converter) {
136                 this.converter = converter;
137         }
138
139         public boolean isAbstract() {
140                 return isAbstract;
141         }
142
143         public void setAbstract(boolean isAbstract) {
144                 this.isAbstract = isAbstract;
145         }
146
147         public ToscaValueConverter getValueConverter() {
148                 return valueConverter;
149         }
150
151         public void setValueConverter(ToscaValueConverter valueConverter) {
152                 this.valueConverter = valueConverter;
153         }
154
155         public static ToscaPropertyType isValidType(String typeName) {
156                 if (typeName == null) {
157                         return null;
158                 }
159
160                 for (ToscaPropertyType type : ToscaPropertyType.values()) {
161                         if (type.getType().equals(typeName)) {
162                                 return type;
163                         }
164                 }
165                 return null;
166         }
167
168         public static boolean isScalarType(String dataTypeName) {
169
170                 ToscaPropertyType isPrimitiveToscaType = ToscaPropertyType.isValidType(dataTypeName);
171
172                 return isPrimitiveToscaType != null && isPrimitiveToscaType.isAbstract() == false;
173
174         }
175         
176         public static boolean isPrimitiveType(String dataTypeName) {
177                 
178                 if (ToscaPropertyType.MAP.getType().equals(dataTypeName) || ToscaPropertyType.LIST.getType().equals(dataTypeName)){
179                         return false;
180                 }
181                 if(isScalarType(dataTypeName)){
182                         return true;
183                 }
184                 return false;
185         }
186
187         public static ToscaPropertyType getTypeIfScalar(String dataTypeName) {
188
189                 ToscaPropertyType isPrimitiveToscaType = ToscaPropertyType.isValidType(dataTypeName);
190
191                 if (isPrimitiveToscaType != null && isPrimitiveToscaType.isAbstract() == false) {
192                         return isPrimitiveToscaType;
193                 } else {
194                         return null;
195                 }
196
197         }
198
199         @Override
200         public String toString() {
201                 return name().toLowerCase();
202         }
203 }