blob: 52595c78493577a01fa836396884040050259478 [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;
Bharat saraswale2d51d62016-03-23 19:40:35 +053040import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
41import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
42import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
43import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
44import static org.onosproject.yangutils.utils.UtilConstants.INT;
45import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
46import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053047import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053048import static org.onosproject.yangutils.utils.UtilConstants.LONG;
49import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053050import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053051import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
52import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
53import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053054import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
55import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
56import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
57import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
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;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530100 case BINARY:
101 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530102 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530103 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530104 case STRING:
105 return STRING_DATA_TYPE;
106 case BOOLEAN:
107 return BOOLEAN_DATA_TYPE;
janani be18b5342016-07-13 21:06:41 +0530108 case INSTANCE_IDENTIFIER:
109 return STRING_DATA_TYPE;
110 case LEAFREF:
111 return getJavaDataType(getReferredTypeFromLeafref(yangType));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530112 default:
113 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530114 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530115 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530116
117 /**
118 * Returns java import class.
119 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530120 * @param yangType YANG type
121 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530122 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530123 * @return java import class
124 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530125 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530126 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530127
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530128 YangDataTypes type = yangType.getDataType();
129
130 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530131 switch (type) {
132 case INT8:
133 return BYTE_WRAPPER;
134 case INT16:
135 return SHORT_WRAPPER;
136 case INT32:
137 return INTEGER_WRAPPER;
138 case INT64:
139 return LONG_WRAPPER;
140 case UINT8:
141 return SHORT_WRAPPER;
142 case UINT16:
143 return INTEGER_WRAPPER;
144 case UINT32:
145 return LONG_WRAPPER;
146 case UINT64:
147 return BIG_INTEGER;
148 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530149 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530150 case STRING:
151 return STRING_DATA_TYPE;
152 case BOOLEAN:
153 return BOOLEAN_WRAPPER;
154 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530155 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530156 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
157 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530158 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530159 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530160 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530161 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530162 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530163 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
164 return getJavaImportClass(referredType, isListAttr, pluginConfig);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530165 case IDENTITYREF:
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530166 YangIdentityRef identityRef = (YangIdentityRef) yangType.getDataTypeExtendedInfo();
167 YangIdentity identity = identityRef.getReferredIdentity();
168 return getCapitalCase(getCamelCase(((YangJavaIdentity) identity).
169 getName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530170 case EMPTY:
171 return BOOLEAN_WRAPPER;
172 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530173 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530174 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530175 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530176 return STRING_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530177 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530178 return getCapitalCase(
179 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530180 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530181 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530182 }
183 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530184 switch (type) {
185 case UINT64:
186 return BIG_INTEGER;
187 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530188 return YANG_DECIMAL64_CLASS;
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:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530196 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530197 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530198 return YANG_BINARY_CLASS;
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:
244 case STRING:
245 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530246 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530247 return JAVA_LANG;
248 case UINT64:
249 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530250 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530251 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530252 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530253 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530254 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530255 return YANG_TYPES_PKG;
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:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530273 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530274 case STRING:
275 return JAVA_LANG;
276 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530277 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530278 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530279 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530280 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530281 return YANG_TYPES_PKG;
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 EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530288 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530289 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530290 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530291 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530292 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530293 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530294 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530295 default:
296 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530297 }
298 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530299 }
300
301 /**
302 * Returns java package for typedef node.
303 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530304 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530305 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530306 * @return java package for typedef node
307 */
janani bdd1314f2016-05-19 17:39:50 +0530308 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530309 Object var = type.getDataTypeExtendedInfo();
310 if (!(var instanceof YangDerivedInfo)) {
311 throw new TranslatorException("type should have been derived.");
312 }
313
314 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
315 throw new TranslatorException("derived info is not an instance of typedef.");
316 }
317
318 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
319 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530320 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530321 }
322 return typedef.getJavaFileInfo().getPackage();
323 }
324
325 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530326 * Returns java package for union node.
327 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530328 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530329 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530330 * @return java package for union node
331 */
janani bdd1314f2016-05-19 17:39:50 +0530332 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530333
334 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
335 throw new TranslatorException("type should have been union.");
336 }
337
338 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
339 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530340 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530341 }
342 return union.getJavaFileInfo().getPackage();
343 }
344
345 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530346 * Returns YANG enumeration's java package.
347 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530348 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530349 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530350 * @return YANG enumeration's java package
351 */
janani bdd1314f2016-05-19 17:39:50 +0530352 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530353
354 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
355 throw new TranslatorException("type should have been enumeration.");
356 }
357 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
358 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530359 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530360 }
361 return enumeration.getJavaFileInfo().getPackage();
362 }
363
364 /**
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530365 * Returns YANG identity's java package.
366 *
367 * @param type YANG type
368 * @param conflictResolver object of YANG to java naming conflict util
369 * @return YANG identity's java package
370 */
371 private static String getIdentityRefPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
372
373 if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
374 throw new TranslatorException("type should have been identityref.");
375 }
376 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
377 YangJavaIdentity identity = (YangJavaIdentity) (identityRef.getReferredIdentity());
378 if (identity.getJavaFileInfo().getPackage() == null) {
379 return getPackageFromParent(identity.getParent(), conflictResolver);
380 }
381 return identity.getJavaFileInfo().getPackage();
382 }
383 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530384 * Returns package from parent node.
385 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530386 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530387 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530388 * @return java package from parent node
389 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530390 private static String getPackageFromParent(YangNode parent,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530391 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530392 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530393 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530394 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530395 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530396 if (parentInfo.getPackage() == null) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530397 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530398 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530399 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530400 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530401
402 /**
403 * Update the referred data model nodes java file info, this will be called,
404 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
405 *
406 * @param yangNode node whose java info needs to be updated
407 * @param conflictResolver yang plugin config
408 */
409 public static void updateJavaFileInfo(YangNode yangNode,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530410 YangToJavaNamingConflictUtil conflictResolver) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530411 Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
412
413 /*
414 * Add the nodes to be updated for package info in a stack.
415 */
416 while (yangNode != null
417 && ((JavaFileInfoContainer) yangNode)
418 .getJavaFileInfo().getPackage() == null) {
419 nodesToUpdatePackage.push(yangNode);
420 yangNode = yangNode.getParent();
421 }
422
423 /*
424 * If the package is not updated till root node, then root package needs to
425 * be updated.
426 */
427 if (yangNode == null) {
428 yangNode = nodesToUpdatePackage.pop();
429 String pkg;
430 if (yangNode instanceof YangJavaModule) {
431 YangJavaModule module = (YangJavaModule) yangNode;
432 pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
433 .getRevision().getRevDate(), conflictResolver);
434 } else if (yangNode instanceof YangJavaSubModule) {
435 YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
436 pkg = getRootPackage(submodule.getVersion(),
437 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
438 submodule.getRevision().getRevDate(), conflictResolver);
439 } else {
440 throw new TranslatorException("Invalid root node of data model tree");
441 }
442
443 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
444 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
445 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
446 .setPackage(pkg);
447 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
448 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
449 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
450 .getPackage()));
451 }
452
453 /**
454 * Parent of the node in stack is updated with java info,
455 * all the nodes can be popped and updated
456 */
457 while (nodesToUpdatePackage.size() != 0) {
458 yangNode = nodesToUpdatePackage.pop();
459 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
460 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
461 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
462 .setPackage(getCurNodePackage(yangNode));
463 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
464 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
465 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
466 .getPackage()));
467 }
468 }
janani be18b5342016-07-13 21:06:41 +0530469
470 /**
471 * Returns the referred type from leaf/leaf-list.
472 *
473 * @param type current type in leaf
474 * @return type from the leafref
475 */
476 private static YangType<?> getReferredTypeFromLeafref(YangType type) {
477 YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
478 return leafRefInfo.getEffectiveDataType();
479 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530480}