blob: e28fa4e92257a9f8eb5895178c73062a15f6970a [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;
Bharat saraswald72411a2016-04-19 01:00:16 +053021import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053022import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053023import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053024import org.onosproject.yangutils.datamodel.YangTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053025import org.onosproject.yangutils.datamodel.YangUnion;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053026import org.onosproject.yangutils.translator.exception.TranslatorException;
27import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
28import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswald72411a2016-04-19 01:00:16 +053029import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053030import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053031import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion;
Bharat saraswale2d51d62016-03-23 19:40:35 +053032
Bharat saraswale2d51d62016-03-23 19:40:35 +053033import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
34import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053035import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053036import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
37import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
38import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
39import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053040import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswale2d51d62016-03-23 19:40:35 +053041import static org.onosproject.yangutils.utils.UtilConstants.INT;
42import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
43import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053044import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053045import static org.onosproject.yangutils.utils.UtilConstants.LONG;
46import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.utils.UtilConstants.NEW;
48import static org.onosproject.yangutils.utils.UtilConstants.OF;
49import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BYTE;
50import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
51import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
52import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053053import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053054import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
55import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053056import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053058
59/**
Bharat saraswald9822e92016-04-05 15:13:44 +053060 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053061 */
62public final class AttributesJavaDataType {
63
64 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053065 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053066 */
67 private AttributesJavaDataType() {
68 }
69
70 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053071 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053072 *
73 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053074 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053075 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053076 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053077
Vinod Kumar Sc4216002016-03-03 19:55:30 +053078 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053079
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053080 switch (type) {
81 case INT8:
82 return BYTE;
83 case INT16:
84 return SHORT;
85 case INT32:
86 return INT;
87 case INT64:
88 return LONG;
89 case UINT8:
90 return SHORT;
91 case UINT16:
92 return INT;
93 case UINT32:
94 return LONG;
95 case UINT64:
96 return BIG_INTEGER;
97 case DECIMAL64:
98 //TODO: DECIMAL64.
99 case STRING:
100 return STRING_DATA_TYPE;
101 case BOOLEAN:
102 return BOOLEAN_DATA_TYPE;
103 default:
104 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530105 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530106 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530107
108 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530109 * Returns from string method parsed string.
110 *
111 * @param targetDataType target data type
112 * @param yangType YANG type
113 * @return parsed string
114 */
115 public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) {
116
117 YangDataTypes type = yangType.getDataType();
118
119 switch (type) {
120 case INT8:
121 return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
122 case INT16:
123 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
124 case INT32:
125 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
126 case INT64:
127 return LONG_WRAPPER + PERIOD + PARSE_LONG;
128 case UINT8:
129 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
130 case UINT16:
131 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
132 case UINT32:
133 return LONG_WRAPPER + PERIOD + PARSE_LONG;
134 case UINT64:
135 return NEW + SPACE + BIG_INTEGER;
136 case DECIMAL64:
137 //TODO: DECIMAL64.
138 case STRING:
139 return EMPTY_STRING;
140 case BOOLEAN:
141 return BOOLEAN_DATA_TYPE;
142 case ENUMERATION:
143 //TODO:ENUMERATION.
144 case BITS:
145 //TODO:BITS
146 case BINARY:
147 //TODO:BINARY
148 case DERIVED:
149 return targetDataType + PERIOD + OF;
150 default:
151 throw new TranslatorException("given data type is not supported.");
152 }
153 }
154
155 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530156 * Returns java import class.
157 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530158 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530159 * @param isListAttr if the attribute need to be a list
160 * @return java import class
161 */
162 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530163
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530164 YangDataTypes type = yangType.getDataType();
165
166 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530167 switch (type) {
168 case INT8:
169 return BYTE_WRAPPER;
170 case INT16:
171 return SHORT_WRAPPER;
172 case INT32:
173 return INTEGER_WRAPPER;
174 case INT64:
175 return LONG_WRAPPER;
176 case UINT8:
177 return SHORT_WRAPPER;
178 case UINT16:
179 return INTEGER_WRAPPER;
180 case UINT32:
181 return LONG_WRAPPER;
182 case UINT64:
183 return BIG_INTEGER;
184 case DECIMAL64:
185 //TODO: DECIMAL64.
186 case STRING:
187 return STRING_DATA_TYPE;
188 case BOOLEAN:
189 return BOOLEAN_WRAPPER;
190 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530191 return getCaptialCase(
192 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(), null));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530193 case BITS:
194 //TODO:BITS
195 case BINARY:
196 //TODO:BINARY
197 case LEAFREF:
198 //TODO:LEAFREF
199 case IDENTITYREF:
200 //TODO:IDENTITYREF
201 case EMPTY:
202 return BOOLEAN_WRAPPER;
203 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530204 return getCaptialCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
205 null));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530206 case INSTANCE_IDENTIFIER:
207 //TODO:INSTANCE_IDENTIFIER
208 case DERIVED:
209 return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
210 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530211 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530212 }
213 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530214 switch (type) {
215 case UINT64:
216 return BIG_INTEGER;
217 case DECIMAL64:
218 //TODO: DECIMAL64.
219 case STRING:
220 return STRING_DATA_TYPE;
221 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530222 return getCaptialCase(
223 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(), null));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530224 case BITS:
225 //TODO:BITS
226 case BINARY:
227 //TODO:BINARY
228 case LEAFREF:
229 //TODO:LEAFREF
230 case IDENTITYREF:
231 //TODO:IDENTITYREF
232 case EMPTY:
233 //TODO:EMPTY
234 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530235 return getCaptialCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
236 null));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530237 case INSTANCE_IDENTIFIER:
238 //TODO:INSTANCE_IDENTIFIER
239 case DERIVED:
240 return getCaptialCase(getCamelCase(yangType.getDataTypeName(), null));
241 default:
242 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530243 }
244 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530245 }
246
247 /**
248 * Returns java import package.
249 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530250 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530251 * @param isListAttr if the attribute is of list type
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530252 * @param classInfo java import class info
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530253 * @return java import package
254 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530255 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530256
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530257 YangDataTypes type = yangType.getDataType();
258
259 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530260 switch (type) {
261 case INT8:
262 case INT16:
263 case INT32:
264 case INT64:
265 case UINT8:
266 case UINT16:
267 case UINT32:
268 case STRING:
269 case BOOLEAN:
270 return JAVA_LANG;
271 case UINT64:
272 return JAVA_MATH;
273 case DECIMAL64:
274 //TODO: DECIMAL64.
275 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530276 return getEnumsPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530277 case BITS:
278 //TODO:BITS
279 case BINARY:
280 //TODO:BINARY
281 case LEAFREF:
282 //TODO:LEAFREF
283 case IDENTITYREF:
284 //TODO:IDENTITYREF
285 case EMPTY:
286 //TODO:EMPTY
287 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530288 return getUnionPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530289 case INSTANCE_IDENTIFIER:
290 //TODO:INSTANCE_IDENTIFIER
291 case DERIVED:
292 return getTypDefsPackage(yangType);
293 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530294 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530295 }
296 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530297 switch (type) {
298 case UINT64:
299 //TODO: BIGINTEGER.
300 case DECIMAL64:
301 //TODO: DECIMAL64
302 case STRING:
303 return JAVA_LANG;
304 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530305 return getEnumsPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530306 case BITS:
307 //TODO:BITS
308 case BINARY:
309 //TODO:BINARY
310 case LEAFREF:
311 //TODO:LEAFREF
312 case IDENTITYREF:
313 //TODO:IDENTITYREF
314 case EMPTY:
315 //TODO:EMPTY
316 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530317 return getUnionPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530318 case INSTANCE_IDENTIFIER:
319 //TODO:INSTANCE_IDENTIFIER
320 case DERIVED:
321 return getTypDefsPackage(yangType);
322 default:
323 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530324 }
325 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530326 }
327
328 /**
329 * Returns java package for typedef node.
330 *
331 * @param type YANG type
332 * @return java package for typedef node
333 */
334 private static String getTypDefsPackage(YangType<?> type) {
335 Object var = type.getDataTypeExtendedInfo();
336 if (!(var instanceof YangDerivedInfo)) {
337 throw new TranslatorException("type should have been derived.");
338 }
339
340 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
341 throw new TranslatorException("derived info is not an instance of typedef.");
342 }
343
344 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
345 if (typedef.getJavaFileInfo().getPackage() == null) {
346 return getPackageFromParent(typedef.getParent());
347 }
348 return typedef.getJavaFileInfo().getPackage();
349 }
350
351 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530352 * Returns java package for union node.
353 *
354 * @param type YANG type
355 * @return java package for union node
356 */
357 private static String getUnionPackage(YangType<?> type) {
358
359 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
360 throw new TranslatorException("type should have been union.");
361 }
362
363 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
364 if (union.getJavaFileInfo().getPackage() == null) {
365 return getPackageFromParent(union.getParent());
366 }
367 return union.getJavaFileInfo().getPackage();
368 }
369
370 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530371 * Returns YANG enumeration's java package.
372 *
373 * @param type YANG type
374 * @return YANG enumeration's java package
375 */
376 private static String getEnumsPackage(YangType<?> type) {
377
378 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
379 throw new TranslatorException("type should have been enumeration.");
380 }
381 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
382 if (enumeration.getJavaFileInfo().getPackage() == null) {
383 return getPackageFromParent(enumeration.getParent());
384 }
385 return enumeration.getJavaFileInfo().getPackage();
386 }
387
388 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530389 * Returns package from parent node.
390 *
391 * @param parent parent YANG node
392 * @return java package from parent node
393 */
394 private static String getPackageFromParent(YangNode parent) {
395 if (!(parent instanceof HasJavaFileInfo)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530396 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530397 }
398 JavaFileInfo parentInfo = ((HasJavaFileInfo) parent).getJavaFileInfo();
399 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530400 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530401}