blob: 19ed11d8ad976b471ea66bde7cb87df385fc48cd [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
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053019import java.util.Stack;
20
Bharat saraswal4bf8b152016-02-25 02:26:43 +053021import org.onosproject.yangutils.datamodel.YangDataTypes;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053022import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswald72411a2016-04-19 01:00:16 +053023import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053024import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053025import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053026import org.onosproject.yangutils.datamodel.YangTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053027import org.onosproject.yangutils.datamodel.YangUnion;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053028import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053029import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053031import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Bharat saraswald72411a2016-04-19 01:00:16 +053032import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumeration;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053033import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
34import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053035import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053036import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnion;
Bharat saraswale2d51d62016-03-23 19:40:35 +053037
Bharat saraswale2d51d62016-03-23 19:40:35 +053038import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
janani b4a6711a2016-05-17 13:12:22 +053039import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053040import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
41import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053042import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053043import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
45import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
46import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
47import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053048import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswalc0e04842016-05-12 13:16:57 +053049import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
Bharat saraswale2d51d62016-03-23 19:40:35 +053050import static org.onosproject.yangutils.utils.UtilConstants.INT;
51import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
52import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053053import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053054import static org.onosproject.yangutils.utils.UtilConstants.LONG;
55import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053056import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswal33dfa012016-05-17 19:59:16 +053057import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BOOLEAN;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053058import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BYTE;
59import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
60import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
61import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053062import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053063import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
64import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053065import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053066import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053067import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
68import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
69import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
70import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053071
72/**
Bharat saraswald9822e92016-04-05 15:13:44 +053073 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053074 */
75public final class AttributesJavaDataType {
76
77 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053078 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053079 */
80 private AttributesJavaDataType() {
81 }
82
83 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053084 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053085 *
86 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053087 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053088 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053089 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053090
Vinod Kumar Sc4216002016-03-03 19:55:30 +053091 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053092
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053093 switch (type) {
94 case INT8:
95 return BYTE;
96 case INT16:
97 return SHORT;
98 case INT32:
99 return INT;
100 case INT64:
101 return LONG;
102 case UINT8:
103 return SHORT;
104 case UINT16:
105 return INT;
106 case UINT32:
107 return LONG;
108 case UINT64:
109 return BIG_INTEGER;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530110 case BINARY:
111 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530112 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530113 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530114 case STRING:
115 return STRING_DATA_TYPE;
116 case BOOLEAN:
117 return BOOLEAN_DATA_TYPE;
118 default:
119 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530120 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530121 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530122
123 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530124 * Returns from string method parsed string.
125 *
126 * @param targetDataType target data type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530127 * @param yangType YANG type
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530128 * @return parsed string
129 */
130 public static String getParseFromStringMethod(String targetDataType, YangType<?> yangType) {
131
132 YangDataTypes type = yangType.getDataType();
133
134 switch (type) {
135 case INT8:
136 return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
137 case INT16:
138 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
139 case INT32:
140 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
141 case INT64:
142 return LONG_WRAPPER + PERIOD + PARSE_LONG;
143 case UINT8:
144 return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
145 case UINT16:
146 return INTEGER_WRAPPER + PERIOD + PARSE_INT;
147 case UINT32:
148 return LONG_WRAPPER + PERIOD + PARSE_LONG;
149 case UINT64:
150 return NEW + SPACE + BIG_INTEGER;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530151 case STRING:
152 return EMPTY_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530153 case EMPTY:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530154 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530155 return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
156 case DECIMAL64:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530157 case BITS:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530158 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530159 case UNION:
160 case ENUMERATION:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530161 case DERIVED:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530162 return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530163 default:
164 throw new TranslatorException("given data type is not supported.");
165 }
166 }
167
168 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530169 * Returns java import class.
170 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530171 * @param yangType YANG type
172 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530173 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530174 * @return java import class
175 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530176 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
177 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530178
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530179 YangDataTypes type = yangType.getDataType();
180
181 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530182 switch (type) {
183 case INT8:
184 return BYTE_WRAPPER;
185 case INT16:
186 return SHORT_WRAPPER;
187 case INT32:
188 return INTEGER_WRAPPER;
189 case INT64:
190 return LONG_WRAPPER;
191 case UINT8:
192 return SHORT_WRAPPER;
193 case UINT16:
194 return INTEGER_WRAPPER;
195 case UINT32:
196 return LONG_WRAPPER;
197 case UINT64:
198 return BIG_INTEGER;
199 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530200 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530201 case STRING:
202 return STRING_DATA_TYPE;
203 case BOOLEAN:
204 return BOOLEAN_WRAPPER;
205 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530206 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530207 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
208 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530209 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530210 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530211 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530212 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530213 case LEAFREF:
214 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530215 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530216 case IDENTITYREF:
217 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530218 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530219 case EMPTY:
220 return BOOLEAN_WRAPPER;
221 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530222 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530223 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530224 case INSTANCE_IDENTIFIER:
225 //TODO:INSTANCE_IDENTIFIER
Bharat saraswal33dfa012016-05-17 19:59:16 +0530226 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530227 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530228 return getCapitalCase(
229 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530230 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530231 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 return BIG_INTEGER;
237 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530238 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530239 case STRING:
240 return STRING_DATA_TYPE;
241 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530242 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530243 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
244 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530245 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530246 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530247 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530248 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530249 case LEAFREF:
250 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530251 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530252 case IDENTITYREF:
253 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530254 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530255 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530256 return BOOLEAN_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530257 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530258 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530259 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530260 case INSTANCE_IDENTIFIER:
261 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530262 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530263 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530264 return getCapitalCase(
265 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530266 default:
267 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530268 }
269 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530270 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530271 }
272
273 /**
274 * Returns java import package.
275 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530276 * @param yangType YANG type
277 * @param isListAttr if the attribute is of list type
janani bdd1314f2016-05-19 17:39:50 +0530278 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530279 * @return java import package
280 */
Bharat saraswalcad0e652016-05-26 23:48:38 +0530281 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
janani bdd1314f2016-05-19 17:39:50 +0530282 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530283
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530284 YangDataTypes type = yangType.getDataType();
285
286 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530287 switch (type) {
288 case INT8:
289 case INT16:
290 case INT32:
291 case INT64:
292 case UINT8:
293 case UINT16:
294 case UINT32:
295 case STRING:
296 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530297 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530298 return JAVA_LANG;
299 case UINT64:
300 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530301 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530302 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530303 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530304 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530305 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530306 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530307 case LEAFREF:
308 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530309 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530310 case IDENTITYREF:
311 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530312 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530313 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530314 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530315 case INSTANCE_IDENTIFIER:
316 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530317 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530318 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530319 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530320 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530321 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530322 }
323 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530324 switch (type) {
325 case UINT64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530326 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530327 case STRING:
328 return JAVA_LANG;
329 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530330 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530331 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530332 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530333 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530334 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530335 case LEAFREF:
336 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530337 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530338 case IDENTITYREF:
339 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530340 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530341 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530342 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530343 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530344 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530345 case INSTANCE_IDENTIFIER:
346 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530347 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530348 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530349 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530350 default:
351 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530352 }
353 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530354 return null;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530355 }
356
357 /**
358 * Returns java package for typedef node.
359 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530360 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530361 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530362 * @return java package for typedef node
363 */
janani bdd1314f2016-05-19 17:39:50 +0530364 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530365 Object var = type.getDataTypeExtendedInfo();
366 if (!(var instanceof YangDerivedInfo)) {
367 throw new TranslatorException("type should have been derived.");
368 }
369
370 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
371 throw new TranslatorException("derived info is not an instance of typedef.");
372 }
373
374 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
375 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530376 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530377 }
378 return typedef.getJavaFileInfo().getPackage();
379 }
380
381 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530382 * Returns java package for union node.
383 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530384 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530385 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530386 * @return java package for union node
387 */
janani bdd1314f2016-05-19 17:39:50 +0530388 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530389
390 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
391 throw new TranslatorException("type should have been union.");
392 }
393
394 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
395 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530396 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530397 }
398 return union.getJavaFileInfo().getPackage();
399 }
400
401 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530402 * Returns YANG enumeration's java package.
403 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530404 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530405 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530406 * @return YANG enumeration's java package
407 */
janani bdd1314f2016-05-19 17:39:50 +0530408 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530409
410 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
411 throw new TranslatorException("type should have been enumeration.");
412 }
413 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
414 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530415 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530416 }
417 return enumeration.getJavaFileInfo().getPackage();
418 }
419
420 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530421 * Returns package from parent node.
422 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530423 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530424 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530425 * @return java package from parent node
426 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530427 private static String getPackageFromParent(YangNode parent,
428 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530429 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530430 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530431 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530432 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530433 if (parentInfo.getPackage() == null) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530434 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530435 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530436 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530437 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530438
439 /**
440 * Update the referred data model nodes java file info, this will be called,
441 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
442 *
443 * @param yangNode node whose java info needs to be updated
444 * @param conflictResolver yang plugin config
445 */
446 public static void updateJavaFileInfo(YangNode yangNode,
447 YangToJavaNamingConflictUtil conflictResolver) {
448 Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
449
450 /*
451 * Add the nodes to be updated for package info in a stack.
452 */
453 while (yangNode != null
454 && ((JavaFileInfoContainer) yangNode)
455 .getJavaFileInfo().getPackage() == null) {
456 nodesToUpdatePackage.push(yangNode);
457 yangNode = yangNode.getParent();
458 }
459
460 /*
461 * If the package is not updated till root node, then root package needs to
462 * be updated.
463 */
464 if (yangNode == null) {
465 yangNode = nodesToUpdatePackage.pop();
466 String pkg;
467 if (yangNode instanceof YangJavaModule) {
468 YangJavaModule module = (YangJavaModule) yangNode;
469 pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
470 .getRevision().getRevDate(), conflictResolver);
471 } else if (yangNode instanceof YangJavaSubModule) {
472 YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
473 pkg = getRootPackage(submodule.getVersion(),
474 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
475 submodule.getRevision().getRevDate(), conflictResolver);
476 } else {
477 throw new TranslatorException("Invalid root node of data model tree");
478 }
479
480 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
481 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
482 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
483 .setPackage(pkg);
484 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
485 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
486 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
487 .getPackage()));
488 }
489
490 /**
491 * Parent of the node in stack is updated with java info,
492 * all the nodes can be popped and updated
493 */
494 while (nodesToUpdatePackage.size() != 0) {
495 yangNode = nodesToUpdatePackage.pop();
496 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
497 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
498 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
499 .setPackage(getCurNodePackage(yangNode));
500 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
501 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
502 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
503 .getPackage()));
504 }
505 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530506}