blob: 91849b2355d99842478081b887796ff1946fabba [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
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053017package org.onosproject.yangutils.translator.tojava.javamodel;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053018
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053019import java.util.Stack;
janani be18b5342016-07-13 21:06:41 +053020
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053021import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswald72411a2016-04-19 01:00:16 +053022import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053023import org.onosproject.yangutils.datamodel.YangIdentity;
janani be18b5342016-07-13 21:06:41 +053024import org.onosproject.yangutils.datamodel.YangLeafRef;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053025import org.onosproject.yangutils.datamodel.YangIdentityRef;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053026import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053027import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053028import org.onosproject.yangutils.datamodel.YangTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053029import org.onosproject.yangutils.datamodel.YangUnion;
janani be18b5342016-07-13 21:06:41 +053030import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053031import org.onosproject.yangutils.translator.exception.TranslatorException;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053032import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053035import org.onosproject.yangutils.utils.io.impl.YangToJavaNamingConflictUtil;
Bharat saraswale2d51d62016-03-23 19:40:35 +053036
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053037import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.getCurNodePackage;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053038import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053039import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +053040import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
41import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswale2d51d62016-03-23 19:40:35 +053042import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
43import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
44import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
45import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +053046import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import static org.onosproject.yangutils.utils.UtilConstants.INT;
48import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
49import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053050import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053051import static org.onosproject.yangutils.utils.UtilConstants.LONG;
52import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
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;
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +053056import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053058import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
59import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
60import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053061
62/**
Bharat saraswald9822e92016-04-05 15:13:44 +053063 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053064 */
65public final class AttributesJavaDataType {
66
67 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053068 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053069 */
70 private AttributesJavaDataType() {
71 }
72
73 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053074 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053075 *
76 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053077 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053078 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053079 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053080
Vinod Kumar Sc4216002016-03-03 19:55:30 +053081 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053082
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053083 switch (type) {
84 case INT8:
85 return BYTE;
86 case INT16:
87 return SHORT;
88 case INT32:
89 return INT;
90 case INT64:
91 return LONG;
92 case UINT8:
93 return SHORT;
94 case UINT16:
95 return INT;
96 case UINT32:
97 return LONG;
98 case UINT64:
99 return BIG_INTEGER;
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530100 case BITS:
101 return BIT_SET;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530102 case BINARY:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530103 return BYTE + SQUARE_BRACKETS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530104 case DECIMAL64:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530105 return BIG_DECIMAL;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530106 case STRING:
107 return STRING_DATA_TYPE;
108 case BOOLEAN:
109 return BOOLEAN_DATA_TYPE;
janani be18b5342016-07-13 21:06:41 +0530110 case INSTANCE_IDENTIFIER:
111 return STRING_DATA_TYPE;
112 case LEAFREF:
113 return getJavaDataType(getReferredTypeFromLeafref(yangType));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530114 default:
115 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530116 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530117 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530118
119 /**
120 * Returns java import class.
121 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530122 * @param yangType YANG type
123 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530124 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530125 * @return java import class
126 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530127 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530128 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530130 YangDataTypes type = yangType.getDataType();
131
132 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530133 switch (type) {
134 case INT8:
135 return BYTE_WRAPPER;
136 case INT16:
137 return SHORT_WRAPPER;
138 case INT32:
139 return INTEGER_WRAPPER;
140 case INT64:
141 return LONG_WRAPPER;
142 case UINT8:
143 return SHORT_WRAPPER;
144 case UINT16:
145 return INTEGER_WRAPPER;
146 case UINT32:
147 return LONG_WRAPPER;
148 case UINT64:
149 return BIG_INTEGER;
150 case DECIMAL64:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530151 return BIG_DECIMAL;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530152 case STRING:
153 return STRING_DATA_TYPE;
154 case BOOLEAN:
155 return BOOLEAN_WRAPPER;
156 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530157 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530158 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
159 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530160 case BITS:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530161 return BIT_SET;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530162 case BINARY:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530163 return BYTE + SQUARE_BRACKETS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530164 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530165 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
166 return getJavaImportClass(referredType, isListAttr, pluginConfig);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530167 case IDENTITYREF:
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530168 YangIdentityRef identityRef = (YangIdentityRef) yangType.getDataTypeExtendedInfo();
169 YangIdentity identity = identityRef.getReferredIdentity();
170 return getCapitalCase(getCamelCase(((YangJavaIdentity) identity).
171 getName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530172 case EMPTY:
173 return BOOLEAN_WRAPPER;
174 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530175 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530176 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530177 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530178 return STRING_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530179 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530180 return getCapitalCase(
181 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530182 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530183 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530184 }
185 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530186 switch (type) {
187 case UINT64:
188 return BIG_INTEGER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530189 case STRING:
190 return STRING_DATA_TYPE;
191 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530192 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530193 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
194 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530195 case BITS:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530196 return BIT_SET;
197 case DECIMAL64:
198 return BIG_DECIMAL;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530199 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530200 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
201 return getJavaImportClass(referredType, isListAttr, pluginConfig);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530202 case IDENTITYREF:
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530203 YangIdentityRef identityRef = (YangIdentityRef) yangType.getDataTypeExtendedInfo();
204 YangIdentity identity = identityRef.getReferredIdentity();
205 return getCapitalCase(getCamelCase(((YangJavaIdentity) identity).getName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530206 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530207 return BOOLEAN_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530208 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530209 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530210 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530211 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530212 return STRING_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530213 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530214 return getCapitalCase(
215 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530216 default:
217 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530218 }
219 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530220 }
221
222 /**
223 * Returns java import package.
224 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530225 * @param yangType YANG type
226 * @param isListAttr if the attribute is of list type
janani bdd1314f2016-05-19 17:39:50 +0530227 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530228 * @return java import package
229 */
Bharat saraswalcad0e652016-05-26 23:48:38 +0530230 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530231 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530232
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530233 YangDataTypes type = yangType.getDataType();
234
235 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530236 switch (type) {
237 case INT8:
238 case INT16:
239 case INT32:
240 case INT64:
241 case UINT8:
242 case UINT16:
243 case UINT32:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530244 case BINARY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530245 case STRING:
246 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530247 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530248 return JAVA_LANG;
249 case UINT64:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530250 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530251 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530252 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530253 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530254 case BITS:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530255 return COLLECTION_IMPORTS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530256 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530257 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
258 return getJavaImportPackage(referredType, isListAttr, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530259 case IDENTITYREF:
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530260 return getIdentityRefPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530261 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530262 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530263 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530264 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530265 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530266 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530267 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530268 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530269 }
270 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530271 switch (type) {
272 case UINT64:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530273 case DECIMAL64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530274 return JAVA_MATH;
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530275 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530276 case STRING:
277 return JAVA_LANG;
278 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530279 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530280 case BITS:
Mahesh Poojary Huawei46fb4db2016-07-14 12:38:17 +0530281 return COLLECTION_IMPORTS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530282 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530283 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
284 return getJavaImportPackage(referredType, isListAttr, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530285 case IDENTITYREF:
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530286 return getIdentityRefPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530287 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530288 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530289 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530290 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530291 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530292 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530293 default:
294 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530295 }
296 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530297 }
298
299 /**
300 * Returns java package for typedef node.
301 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530302 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530303 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530304 * @return java package for typedef node
305 */
janani bdd1314f2016-05-19 17:39:50 +0530306 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530307 Object var = type.getDataTypeExtendedInfo();
308 if (!(var instanceof YangDerivedInfo)) {
309 throw new TranslatorException("type should have been derived.");
310 }
311
312 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
313 throw new TranslatorException("derived info is not an instance of typedef.");
314 }
315
316 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
317 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530318 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530319 }
320 return typedef.getJavaFileInfo().getPackage();
321 }
322
323 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530324 * Returns java package for union node.
325 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530326 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530327 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530328 * @return java package for union node
329 */
janani bdd1314f2016-05-19 17:39:50 +0530330 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530331
332 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
333 throw new TranslatorException("type should have been union.");
334 }
335
336 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
337 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530338 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530339 }
340 return union.getJavaFileInfo().getPackage();
341 }
342
343 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530344 * Returns YANG enumeration's java package.
345 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530346 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530347 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530348 * @return YANG enumeration's java package
349 */
janani bdd1314f2016-05-19 17:39:50 +0530350 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530351
352 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
353 throw new TranslatorException("type should have been enumeration.");
354 }
355 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
356 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530357 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530358 }
359 return enumeration.getJavaFileInfo().getPackage();
360 }
361
362 /**
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530363 * Returns YANG identity's java package.
364 *
365 * @param type YANG type
366 * @param conflictResolver object of YANG to java naming conflict util
367 * @return YANG identity's java package
368 */
369 private static String getIdentityRefPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
370
371 if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
372 throw new TranslatorException("type should have been identityref.");
373 }
374 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
375 YangJavaIdentity identity = (YangJavaIdentity) (identityRef.getReferredIdentity());
376 if (identity.getJavaFileInfo().getPackage() == null) {
377 return getPackageFromParent(identity.getParent(), conflictResolver);
378 }
379 return identity.getJavaFileInfo().getPackage();
380 }
381 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530382 * Returns package from parent node.
383 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530384 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530385 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530386 * @return java package from parent node
387 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530388 private static String getPackageFromParent(YangNode parent,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530389 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530390 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530391 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530392 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530393 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530394 if (parentInfo.getPackage() == null) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530395 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530396 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530397 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530398 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530399
400 /**
401 * Update the referred data model nodes java file info, this will be called,
402 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
403 *
404 * @param yangNode node whose java info needs to be updated
405 * @param conflictResolver yang plugin config
406 */
407 public static void updateJavaFileInfo(YangNode yangNode,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530408 YangToJavaNamingConflictUtil conflictResolver) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530409 Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
410
411 /*
412 * Add the nodes to be updated for package info in a stack.
413 */
414 while (yangNode != null
415 && ((JavaFileInfoContainer) yangNode)
416 .getJavaFileInfo().getPackage() == null) {
417 nodesToUpdatePackage.push(yangNode);
418 yangNode = yangNode.getParent();
419 }
420
421 /*
422 * If the package is not updated till root node, then root package needs to
423 * be updated.
424 */
425 if (yangNode == null) {
426 yangNode = nodesToUpdatePackage.pop();
427 String pkg;
428 if (yangNode instanceof YangJavaModule) {
429 YangJavaModule module = (YangJavaModule) yangNode;
430 pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
431 .getRevision().getRevDate(), conflictResolver);
432 } else if (yangNode instanceof YangJavaSubModule) {
433 YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
434 pkg = getRootPackage(submodule.getVersion(),
435 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
436 submodule.getRevision().getRevDate(), conflictResolver);
437 } else {
438 throw new TranslatorException("Invalid root node of data model tree");
439 }
440
441 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
442 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
443 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
444 .setPackage(pkg);
445 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
446 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
447 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
448 .getPackage()));
449 }
450
451 /**
452 * Parent of the node in stack is updated with java info,
453 * all the nodes can be popped and updated
454 */
455 while (nodesToUpdatePackage.size() != 0) {
456 yangNode = nodesToUpdatePackage.pop();
457 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
458 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
459 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
460 .setPackage(getCurNodePackage(yangNode));
461 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
462 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
463 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
464 .getPackage()));
465 }
466 }
janani be18b5342016-07-13 21:06:41 +0530467
468 /**
469 * Returns the referred type from leaf/leaf-list.
470 *
471 * @param type current type in leaf
472 * @return type from the leafref
473 */
474 private static YangType<?> getReferredTypeFromLeafref(YangType type) {
475 YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
476 return leafRefInfo.getEffectiveDataType();
477 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530478}