blob: 077e39faf9c392c94035b44c5388c2291102412c [file] [log] [blame]
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal4bf8b152016-02-25 02:26:43 +05303 *
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
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import org.onosproject.yangutils.datamodel.YangDataTypes;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053020import org.onosproject.yangutils.datamodel.YangDerivedInfo;
21import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053023import org.onosproject.yangutils.datamodel.YangTypeDef;
24import org.onosproject.yangutils.translator.exception.TranslatorException;
25import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
26import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
27import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
Bharat saraswale2d51d62016-03-23 19:40:35 +053028
Bharat saraswale2d51d62016-03-23 19:40:35 +053029import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
30import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053031import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053032import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
33import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
34import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
35import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
36import static org.onosproject.yangutils.utils.UtilConstants.INT;
37import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
38import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053039import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053040import static org.onosproject.yangutils.utils.UtilConstants.LONG;
41import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053042import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053043import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
44import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
45import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053046
47/**
Bharat saraswald9822e92016-04-05 15:13:44 +053048 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053049 */
50public final class AttributesJavaDataType {
51
52 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053053 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053054 */
55 private AttributesJavaDataType() {
56 }
57
58 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053059 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053060 *
61 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053062 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053063 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053064 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053065
Vinod Kumar Sc4216002016-03-03 19:55:30 +053066 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053067
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053068 switch (type) {
69 case INT8:
70 return BYTE;
71 case INT16:
72 return SHORT;
73 case INT32:
74 return INT;
75 case INT64:
76 return LONG;
77 case UINT8:
78 return SHORT;
79 case UINT16:
80 return INT;
81 case UINT32:
82 return LONG;
83 case UINT64:
84 return BIG_INTEGER;
85 case DECIMAL64:
86 //TODO: DECIMAL64.
87 case STRING:
88 return STRING_DATA_TYPE;
89 case BOOLEAN:
90 return BOOLEAN_DATA_TYPE;
91 default:
92 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +053093 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +053094 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +053095
96 /**
97 * Returns java import class.
98 *
99 * @param yangType YANG type
100 * @param isListAttr if the attribute need to be a list
101 * @return java import class
102 */
103 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530104
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530105 YangDataTypes type = yangType.getDataType();
106
107 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530108 switch (type) {
109 case INT8:
110 return BYTE_WRAPPER;
111 case INT16:
112 return SHORT_WRAPPER;
113 case INT32:
114 return INTEGER_WRAPPER;
115 case INT64:
116 return LONG_WRAPPER;
117 case UINT8:
118 return SHORT_WRAPPER;
119 case UINT16:
120 return INTEGER_WRAPPER;
121 case UINT32:
122 return LONG_WRAPPER;
123 case UINT64:
124 return BIG_INTEGER;
125 case DECIMAL64:
126 //TODO: DECIMAL64.
127 case STRING:
128 return STRING_DATA_TYPE;
129 case BOOLEAN:
130 return BOOLEAN_WRAPPER;
131 case ENUMERATION:
132 //TODO: ENUMERATION.
133 case BITS:
134 //TODO:BITS
135 case BINARY:
136 //TODO:BINARY
137 case LEAFREF:
138 //TODO:LEAFREF
139 case IDENTITYREF:
140 //TODO:IDENTITYREF
141 case EMPTY:
142 return BOOLEAN_WRAPPER;
143 case UNION:
144 //TODO:UNION
145 case INSTANCE_IDENTIFIER:
146 //TODO:INSTANCE_IDENTIFIER
147 case DERIVED:
148 return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
149 default:
150 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530151 }
152 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530153 switch (type) {
154 case UINT64:
155 return BIG_INTEGER;
156 case DECIMAL64:
157 //TODO: DECIMAL64.
158 case STRING:
159 return STRING_DATA_TYPE;
160 case ENUMERATION:
161 //TODO: ENUMERATION.
162 case BITS:
163 //TODO:BITS
164 case BINARY:
165 //TODO:BINARY
166 case LEAFREF:
167 //TODO:LEAFREF
168 case IDENTITYREF:
169 //TODO:IDENTITYREF
170 case EMPTY:
171 //TODO:EMPTY
172 case UNION:
173 //TODO:UNION
174 case INSTANCE_IDENTIFIER:
175 //TODO:INSTANCE_IDENTIFIER
176 case DERIVED:
177 return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
178 default:
179 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530180 }
181 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530182 }
183
184 /**
185 * Returns java import package.
186 *
187 * @param yangType YANG type
188 * @param isListAttr if the attribute is of list type
Vinod Kumar S38046502016-03-23 15:30:27 +0530189 * @param classInfo java import class info
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530190 * @return java import package
191 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530192 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530193
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530194 YangDataTypes type = yangType.getDataType();
195
196 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530197 switch (type) {
198 case INT8:
199 case INT16:
200 case INT32:
201 case INT64:
202 case UINT8:
203 case UINT16:
204 case UINT32:
205 case STRING:
206 case BOOLEAN:
207 return JAVA_LANG;
208 case UINT64:
209 return JAVA_MATH;
210 case DECIMAL64:
211 //TODO: DECIMAL64.
212 case ENUMERATION:
213 //TODO: ENUMERATION.
214 case BITS:
215 //TODO:BITS
216 case BINARY:
217 //TODO:BINARY
218 case LEAFREF:
219 //TODO:LEAFREF
220 case IDENTITYREF:
221 //TODO:IDENTITYREF
222 case EMPTY:
223 //TODO:EMPTY
224 case UNION:
225 //TODO:UNION
226 case INSTANCE_IDENTIFIER:
227 //TODO:INSTANCE_IDENTIFIER
228 case DERIVED:
229 return getTypDefsPackage(yangType);
230 default:
231 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530232 }
233 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530234 switch (type) {
235 case UINT64:
236 //TODO: BIGINTEGER.
237 case DECIMAL64:
238 //TODO: DECIMAL64
239 case STRING:
240 return JAVA_LANG;
241 case ENUMERATION:
242 //TODO: ENUMERATION.
243 case BITS:
244 //TODO:BITS
245 case BINARY:
246 //TODO:BINARY
247 case LEAFREF:
248 //TODO:LEAFREF
249 case IDENTITYREF:
250 //TODO:IDENTITYREF
251 case EMPTY:
252 //TODO:EMPTY
253 case UNION:
254 //TODO:UNION
255 case INSTANCE_IDENTIFIER:
256 //TODO:INSTANCE_IDENTIFIER
257 case DERIVED:
258 return getTypDefsPackage(yangType);
259 default:
260 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530261 }
262 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530263 }
264
265 /**
266 * Returns java package for typedef node.
267 *
268 * @param type YANG type
269 * @return java package for typedef node
270 */
271 private static String getTypDefsPackage(YangType<?> type) {
272 Object var = type.getDataTypeExtendedInfo();
273 if (!(var instanceof YangDerivedInfo)) {
274 throw new TranslatorException("type should have been derived.");
275 }
276
277 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
278 throw new TranslatorException("derived info is not an instance of typedef.");
279 }
280
281 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
282 if (typedef.getJavaFileInfo().getPackage() == null) {
283 return getPackageFromParent(typedef.getParent());
284 }
285 return typedef.getJavaFileInfo().getPackage();
286 }
287
288 /**
289 * Returns package from parent node.
290 *
291 * @param parent parent YANG node
292 * @return java package from parent node
293 */
294 private static String getPackageFromParent(YangNode parent) {
295 if (!(parent instanceof HasJavaFileInfo)) {
296 throw new TranslatorException("Invalid child node is being processed.");
297 }
298 JavaFileInfo parentInfo = ((HasJavaFileInfo) parent).getJavaFileInfo();
299 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530300 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530301}