blob: ebcdc997974ea5ecc4c7e4126390d09dd0981d81 [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;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053027import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswald72411a2016-04-19 01:00:16 +053029import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053030import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
31import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053032import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053033import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion;
Bharat saraswale2d51d62016-03-23 19:40:35 +053034
Bharat saraswale2d51d62016-03-23 19:40:35 +053035import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
janani b4a6711a2016-05-17 13:12:22 +053036import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053037import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053038import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053039import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
40import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
41import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
42import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053043import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswalc0e04842016-05-12 13:16:57 +053044import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
Bharat saraswale2d51d62016-03-23 19:40:35 +053045import static org.onosproject.yangutils.utils.UtilConstants.INT;
46import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
47import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053048import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053049import static org.onosproject.yangutils.utils.UtilConstants.LONG;
50import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053051import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswal33dfa012016-05-17 19:59:16 +053052import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BOOLEAN;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053053import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BYTE;
54import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
55import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
56import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053057import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053058import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
59import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053061import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053062import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
63import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
64import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
65import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053066
67/**
Bharat saraswald9822e92016-04-05 15:13:44 +053068 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053069 */
70public final class AttributesJavaDataType {
71
72 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053073 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053074 */
75 private AttributesJavaDataType() {
76 }
77
78 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053079 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053080 *
81 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053082 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053083 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053084 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053085
Vinod Kumar Sc4216002016-03-03 19:55:30 +053086 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053087
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053088 switch (type) {
89 case INT8:
90 return BYTE;
91 case INT16:
92 return SHORT;
93 case INT32:
94 return INT;
95 case INT64:
96 return LONG;
97 case UINT8:
98 return SHORT;
99 case UINT16:
100 return INT;
101 case UINT32:
102 return LONG;
103 case UINT64:
104 return BIG_INTEGER;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530105 case BINARY:
106 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530107 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530108 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530109 case STRING:
110 return STRING_DATA_TYPE;
111 case BOOLEAN:
112 return BOOLEAN_DATA_TYPE;
113 default:
114 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530115 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530116 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530117
118 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530119 * Returns from string method parsed string.
120 *
121 * @param targetDataType target data type
Bharat saraswal33dfa012016-05-17 19:59:16 +0530122 * @param yangType YANG type
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530123 * @return parsed string
124 */
125 public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) {
126
127 YangDataTypes type = yangType.getDataType();
128
129 switch (type) {
130 case INT8:
131 return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
132 case INT16:
133 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
134 case INT32:
135 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
136 case INT64:
137 return LONG_WRAPPER + PERIOD + PARSE_LONG;
138 case UINT8:
139 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
140 case UINT16:
141 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
142 case UINT32:
143 return LONG_WRAPPER + PERIOD + PARSE_LONG;
144 case UINT64:
145 return NEW + SPACE + BIG_INTEGER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530146 case STRING:
147 return EMPTY_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530148 case EMPTY:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530149 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530150 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
151 case DECIMAL64:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530152 case BITS:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530153 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530154 case UNION:
155 case ENUMERATION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530156 case DERIVED:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530157 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530158 default:
159 throw new TranslatorException("given data type is not supported.");
160 }
161 }
162
163 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530164 * Returns java import class.
165 *
Bharat saraswal33dfa012016-05-17 19:59:16 +0530166 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530167 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530168 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530169 * @return java import class
170 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530171 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
172 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530173
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530174 YangDataTypes type = yangType.getDataType();
175
176 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530177 switch (type) {
178 case INT8:
179 return BYTE_WRAPPER;
180 case INT16:
181 return SHORT_WRAPPER;
182 case INT32:
183 return INTEGER_WRAPPER;
184 case INT64:
185 return LONG_WRAPPER;
186 case UINT8:
187 return SHORT_WRAPPER;
188 case UINT16:
189 return INTEGER_WRAPPER;
190 case UINT32:
191 return LONG_WRAPPER;
192 case UINT64:
193 return BIG_INTEGER;
194 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530195 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530196 case STRING:
197 return STRING_DATA_TYPE;
198 case BOOLEAN:
199 return BOOLEAN_WRAPPER;
200 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530201 return getCapitalCase(
Bharat saraswal33dfa012016-05-17 19:59:16 +0530202 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
203 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530204 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530205 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530206 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530207 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530208 case LEAFREF:
209 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530210 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530211 case IDENTITYREF:
212 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530213 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530214 case EMPTY:
215 return BOOLEAN_WRAPPER;
216 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530217 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530218 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530219 case INSTANCE_IDENTIFIER:
220 //TODO:INSTANCE_IDENTIFIER
Bharat saraswal33dfa012016-05-17 19:59:16 +0530221 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530222 case DERIVED:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530223 return getCapitalCase(
224 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530225 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530226 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530227 }
228 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530229 switch (type) {
230 case UINT64:
231 return BIG_INTEGER;
232 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530233 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530234 case STRING:
235 return STRING_DATA_TYPE;
236 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530237 return getCapitalCase(
Bharat saraswal33dfa012016-05-17 19:59:16 +0530238 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
239 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530240 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530241 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530242 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530243 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530244 case LEAFREF:
245 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530246 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530247 case IDENTITYREF:
248 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530249 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530250 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530251 return BOOLEAN_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530252 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530253 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530254 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530255 case INSTANCE_IDENTIFIER:
256 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530257 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530258 case DERIVED:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530259 return getCapitalCase(
260 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530261 default:
262 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530263 }
264 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530265 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530266 }
267
268 /**
269 * Returns java import package.
270 *
Bharat saraswal33dfa012016-05-17 19:59:16 +0530271 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530272 * @param isListAttr if the attribute is of list type
Bharat saraswal33dfa012016-05-17 19:59:16 +0530273 * @param classInfo java import class info
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530274 * @return java import package
275 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530276 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr, String classInfo) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530277
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530278 YangDataTypes type = yangType.getDataType();
279
280 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530281 switch (type) {
282 case INT8:
283 case INT16:
284 case INT32:
285 case INT64:
286 case UINT8:
287 case UINT16:
288 case UINT32:
289 case STRING:
290 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530291 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530292 return JAVA_LANG;
293 case UINT64:
294 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530295 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530296 return getEnumsPackage(yangType);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530297 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530298 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530299 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530300 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530301 case LEAFREF:
302 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530303 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530304 case IDENTITYREF:
305 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530306 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530307 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530308 return getUnionPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530309 case INSTANCE_IDENTIFIER:
310 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530311 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530312 case DERIVED:
313 return getTypDefsPackage(yangType);
314 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530315 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530316 }
317 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530318 switch (type) {
319 case UINT64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530320 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530321 case STRING:
322 return JAVA_LANG;
323 case ENUMERATION:
Bharat saraswald72411a2016-04-19 01:00:16 +0530324 return getEnumsPackage(yangType);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530325 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530326 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530327 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530328 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530329 case LEAFREF:
330 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530331 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530332 case IDENTITYREF:
333 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530334 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530335 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530336 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530337 case UNION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530338 return getUnionPackage(yangType);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530339 case INSTANCE_IDENTIFIER:
340 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530341 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530342 case DERIVED:
343 return getTypDefsPackage(yangType);
344 default:
345 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530346 }
347 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530348 return null;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530349 }
350
351 /**
352 * Returns java package for typedef node.
353 *
354 * @param type YANG type
355 * @return java package for typedef node
356 */
357 private static String getTypDefsPackage(YangType<?> type) {
358 Object var = type.getDataTypeExtendedInfo();
359 if (!(var instanceof YangDerivedInfo)) {
360 throw new TranslatorException("type should have been derived.");
361 }
362
363 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
364 throw new TranslatorException("derived info is not an instance of typedef.");
365 }
366
367 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
368 if (typedef.getJavaFileInfo().getPackage() == null) {
369 return getPackageFromParent(typedef.getParent());
370 }
371 return typedef.getJavaFileInfo().getPackage();
372 }
373
374 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530375 * Returns java package for union node.
376 *
377 * @param type YANG type
378 * @return java package for union node
379 */
380 private static String getUnionPackage(YangType<?> type) {
381
382 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
383 throw new TranslatorException("type should have been union.");
384 }
385
386 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
387 if (union.getJavaFileInfo().getPackage() == null) {
388 return getPackageFromParent(union.getParent());
389 }
390 return union.getJavaFileInfo().getPackage();
391 }
392
393 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530394 * Returns YANG enumeration's java package.
395 *
396 * @param type YANG type
397 * @return YANG enumeration's java package
398 */
399 private static String getEnumsPackage(YangType<?> type) {
400
401 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
402 throw new TranslatorException("type should have been enumeration.");
403 }
404 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
405 if (enumeration.getJavaFileInfo().getPackage() == null) {
406 return getPackageFromParent(enumeration.getParent());
407 }
408 return enumeration.getJavaFileInfo().getPackage();
409 }
410
411 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530412 * Returns package from parent node.
413 *
414 * @param parent parent YANG node
415 * @return java package from parent node
416 */
417 private static String getPackageFromParent(YangNode parent) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530418 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530419 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530420 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530421 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530422 if (parentInfo.getPackage() == null) {
423 if (parent instanceof YangJavaModule) {
424 YangJavaModule module = (YangJavaModule) parent;
425 String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
426 .getRevision().getRevDate());
427 return modulePkg + PERIOD + getCamelCase(module.getName(), null).toLowerCase();
428 } else if (parent instanceof YangJavaSubModule) {
429 YangJavaSubModule submodule = (YangJavaSubModule) parent;
430 String subModulePkg = getRootPackage(submodule.getVersion(),
431 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
432 submodule.getRevision().getRevDate());
433 return subModulePkg + PERIOD + getCamelCase(submodule.getName(), null).toLowerCase();
434 }
435 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530436 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530437 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530438}