blob: 9e7cc5cf7e897c8f2e916d429fdc769fc607bfc5 [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
janani bdd1314f2016-05-19 17:39:50 +0530273 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530274 * @return java import package
275 */
Bharat saraswalcad0e652016-05-26 23:48:38 +0530276 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
janani bdd1314f2016-05-19 17:39:50 +0530277 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530278
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530279 YangDataTypes type = yangType.getDataType();
280
281 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530282 switch (type) {
283 case INT8:
284 case INT16:
285 case INT32:
286 case INT64:
287 case UINT8:
288 case UINT16:
289 case UINT32:
290 case STRING:
291 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530292 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530293 return JAVA_LANG;
294 case UINT64:
295 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530296 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530297 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530298 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530299 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530300 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530301 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530302 case LEAFREF:
303 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530304 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530305 case IDENTITYREF:
306 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530307 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530308 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530309 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530310 case INSTANCE_IDENTIFIER:
311 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530312 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530313 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530314 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530315 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530316 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530317 }
318 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530319 switch (type) {
320 case UINT64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530321 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530322 case STRING:
323 return JAVA_LANG;
324 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530325 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530326 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530327 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530328 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530329 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530330 case LEAFREF:
331 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530332 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530333 case IDENTITYREF:
334 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530335 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530336 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530337 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530338 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530339 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530340 case INSTANCE_IDENTIFIER:
341 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530342 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530343 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530344 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530345 default:
346 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530347 }
348 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530349 return null;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530350 }
351
352 /**
353 * Returns java package for typedef node.
354 *
355 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530356 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530357 * @return java package for typedef node
358 */
janani bdd1314f2016-05-19 17:39:50 +0530359 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530360 Object var = type.getDataTypeExtendedInfo();
361 if (!(var instanceof YangDerivedInfo)) {
362 throw new TranslatorException("type should have been derived.");
363 }
364
365 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
366 throw new TranslatorException("derived info is not an instance of typedef.");
367 }
368
369 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
370 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530371 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530372 }
373 return typedef.getJavaFileInfo().getPackage();
374 }
375
376 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530377 * Returns java package for union node.
378 *
379 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530380 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530381 * @return java package for union node
382 */
janani bdd1314f2016-05-19 17:39:50 +0530383 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530384
385 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
386 throw new TranslatorException("type should have been union.");
387 }
388
389 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
390 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530391 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530392 }
393 return union.getJavaFileInfo().getPackage();
394 }
395
396 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530397 * Returns YANG enumeration's java package.
398 *
399 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530400 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530401 * @return YANG enumeration's java package
402 */
janani bdd1314f2016-05-19 17:39:50 +0530403 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530404
405 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
406 throw new TranslatorException("type should have been enumeration.");
407 }
408 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
409 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530410 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530411 }
412 return enumeration.getJavaFileInfo().getPackage();
413 }
414
415 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530416 * Returns package from parent node.
417 *
418 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530419 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530420 * @return java package from parent node
421 */
janani bdd1314f2016-05-19 17:39:50 +0530422 private static String getPackageFromParent(YangNode parent, YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530423 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530424 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530425 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530426 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530427 if (parentInfo.getPackage() == null) {
428 if (parent instanceof YangJavaModule) {
429 YangJavaModule module = (YangJavaModule) parent;
430 String modulePkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
janani bdd1314f2016-05-19 17:39:50 +0530431 .getRevision().getRevDate(), conflictResolver);
Bharat saraswalcad0e652016-05-26 23:48:38 +0530432 return modulePkg + PERIOD + getCamelCase(module.getName(), conflictResolver).toLowerCase();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530433 } else if (parent instanceof YangJavaSubModule) {
434 YangJavaSubModule submodule = (YangJavaSubModule) parent;
435 String subModulePkg = getRootPackage(submodule.getVersion(),
436 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
janani bdd1314f2016-05-19 17:39:50 +0530437 submodule.getRevision().getRevDate(), conflictResolver);
Bharat saraswalcad0e652016-05-26 23:48:38 +0530438 return subModulePkg + PERIOD + getCamelCase(submodule.getName(), conflictResolver).toLowerCase();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530439 }
440 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530441 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530442 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530443}