blob: 6df66afe4ab7b3872b4877b3a3f3f2d335a8466f [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;
janani be18b5342016-07-13 21:06:41 +053023import org.onosproject.yangutils.datamodel.YangLeafRef;
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;
janani be18b5342016-07-13 21:06:41 +053028import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053029import org.onosproject.yangutils.translator.exception.TranslatorException;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053030import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053031import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053033import org.onosproject.yangutils.utils.io.impl.YangToJavaNamingConflictUtil;
Bharat saraswale2d51d62016-03-23 19:40:35 +053034
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053035import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.getCurNodePackage;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053036import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053037import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053038import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
39import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
40import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
41import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
42import static org.onosproject.yangutils.utils.UtilConstants.INT;
43import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
44import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053045import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053046import static org.onosproject.yangutils.utils.UtilConstants.LONG;
47import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053048import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053049import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
50import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
51import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053052import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
53import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
54import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
55import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053056import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
57import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
58import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053059
60/**
Bharat saraswald9822e92016-04-05 15:13:44 +053061 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053062 */
63public final class AttributesJavaDataType {
64
65 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053066 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053067 */
68 private AttributesJavaDataType() {
69 }
70
71 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053072 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053073 *
74 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053075 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053076 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053077 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053078
Vinod Kumar Sc4216002016-03-03 19:55:30 +053079 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053080
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053081 switch (type) {
82 case INT8:
83 return BYTE;
84 case INT16:
85 return SHORT;
86 case INT32:
87 return INT;
88 case INT64:
89 return LONG;
90 case UINT8:
91 return SHORT;
92 case UINT16:
93 return INT;
94 case UINT32:
95 return LONG;
96 case UINT64:
97 return BIG_INTEGER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053098 case BINARY:
99 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530100 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530101 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530102 case STRING:
103 return STRING_DATA_TYPE;
104 case BOOLEAN:
105 return BOOLEAN_DATA_TYPE;
janani be18b5342016-07-13 21:06:41 +0530106 case INSTANCE_IDENTIFIER:
107 return STRING_DATA_TYPE;
108 case LEAFREF:
109 return getJavaDataType(getReferredTypeFromLeafref(yangType));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530110 default:
111 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530112 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530113 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530114
115 /**
116 * Returns java import class.
117 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530118 * @param yangType YANG type
119 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530120 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530121 * @return java import class
122 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530123 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530124 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530125
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530126 YangDataTypes type = yangType.getDataType();
127
128 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530129 switch (type) {
130 case INT8:
131 return BYTE_WRAPPER;
132 case INT16:
133 return SHORT_WRAPPER;
134 case INT32:
135 return INTEGER_WRAPPER;
136 case INT64:
137 return LONG_WRAPPER;
138 case UINT8:
139 return SHORT_WRAPPER;
140 case UINT16:
141 return INTEGER_WRAPPER;
142 case UINT32:
143 return LONG_WRAPPER;
144 case UINT64:
145 return BIG_INTEGER;
146 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530147 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530148 case STRING:
149 return STRING_DATA_TYPE;
150 case BOOLEAN:
151 return BOOLEAN_WRAPPER;
152 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530153 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530154 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
155 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530156 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530157 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530158 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530159 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530160 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530161 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
162 return getJavaImportClass(referredType, isListAttr, pluginConfig);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530163 case IDENTITYREF:
164 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530165 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530166 case EMPTY:
167 return BOOLEAN_WRAPPER;
168 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530169 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530170 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530171 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530172 return STRING_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530173 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530174 return getCapitalCase(
175 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530176 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530177 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530178 }
179 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530180 switch (type) {
181 case UINT64:
182 return BIG_INTEGER;
183 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530184 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530185 case STRING:
186 return STRING_DATA_TYPE;
187 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530188 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530189 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
190 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530191 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530192 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530193 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530194 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530195 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530196 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
197 return getJavaImportClass(referredType, isListAttr, pluginConfig);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530198 case IDENTITYREF:
199 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530201 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530202 return BOOLEAN_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530203 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530204 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530205 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530206 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530207 return STRING_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530208 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530209 return getCapitalCase(
210 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530211 default:
212 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530213 }
214 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530215 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530216 }
217
218 /**
219 * Returns java import package.
220 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530221 * @param yangType YANG type
222 * @param isListAttr if the attribute is of list type
janani bdd1314f2016-05-19 17:39:50 +0530223 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530224 * @return java import package
225 */
Bharat saraswalcad0e652016-05-26 23:48:38 +0530226 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530227 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530228
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530229 YangDataTypes type = yangType.getDataType();
230
231 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530232 switch (type) {
233 case INT8:
234 case INT16:
235 case INT32:
236 case INT64:
237 case UINT8:
238 case UINT16:
239 case UINT32:
240 case STRING:
241 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530242 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530243 return JAVA_LANG;
244 case UINT64:
245 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530246 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530247 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530248 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530249 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530250 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530251 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530252 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530253 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
254 return getJavaImportPackage(referredType, isListAttr, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530255 case IDENTITYREF:
256 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530257 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530258 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530259 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530260 case INSTANCE_IDENTIFIER:
janani be18b5342016-07-13 21:06:41 +0530261 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530262 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530263 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530264 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530265 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530266 }
267 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530268 switch (type) {
269 case UINT64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530270 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530271 case STRING:
272 return JAVA_LANG;
273 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530274 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530275 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530276 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530277 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530278 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530279 case LEAFREF:
janani be18b5342016-07-13 21:06:41 +0530280 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
281 return getJavaImportPackage(referredType, isListAttr, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530282 case IDENTITYREF:
283 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530284 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530285 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530286 return JAVA_LANG;
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 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530297 return null;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530298 }
299
300 /**
301 * Returns java package for typedef node.
302 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530303 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530304 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530305 * @return java package for typedef node
306 */
janani bdd1314f2016-05-19 17:39:50 +0530307 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530308 Object var = type.getDataTypeExtendedInfo();
309 if (!(var instanceof YangDerivedInfo)) {
310 throw new TranslatorException("type should have been derived.");
311 }
312
313 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
314 throw new TranslatorException("derived info is not an instance of typedef.");
315 }
316
317 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
318 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530319 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530320 }
321 return typedef.getJavaFileInfo().getPackage();
322 }
323
324 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530325 * Returns java package for union node.
326 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530327 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530328 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530329 * @return java package for union node
330 */
janani bdd1314f2016-05-19 17:39:50 +0530331 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530332
333 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
334 throw new TranslatorException("type should have been union.");
335 }
336
337 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
338 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530339 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530340 }
341 return union.getJavaFileInfo().getPackage();
342 }
343
344 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530345 * Returns YANG enumeration's java package.
346 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530347 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530348 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530349 * @return YANG enumeration's java package
350 */
janani bdd1314f2016-05-19 17:39:50 +0530351 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530352
353 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
354 throw new TranslatorException("type should have been enumeration.");
355 }
356 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
357 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530358 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530359 }
360 return enumeration.getJavaFileInfo().getPackage();
361 }
362
363 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530364 * Returns package from parent node.
365 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530366 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530367 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530368 * @return java package from parent node
369 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530370 private static String getPackageFromParent(YangNode parent,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530371 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530372 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530373 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530374 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530375 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530376 if (parentInfo.getPackage() == null) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530377 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530378 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530379 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530380 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530381
382 /**
383 * Update the referred data model nodes java file info, this will be called,
384 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
385 *
386 * @param yangNode node whose java info needs to be updated
387 * @param conflictResolver yang plugin config
388 */
389 public static void updateJavaFileInfo(YangNode yangNode,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530390 YangToJavaNamingConflictUtil conflictResolver) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530391 Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
392
393 /*
394 * Add the nodes to be updated for package info in a stack.
395 */
396 while (yangNode != null
397 && ((JavaFileInfoContainer) yangNode)
398 .getJavaFileInfo().getPackage() == null) {
399 nodesToUpdatePackage.push(yangNode);
400 yangNode = yangNode.getParent();
401 }
402
403 /*
404 * If the package is not updated till root node, then root package needs to
405 * be updated.
406 */
407 if (yangNode == null) {
408 yangNode = nodesToUpdatePackage.pop();
409 String pkg;
410 if (yangNode instanceof YangJavaModule) {
411 YangJavaModule module = (YangJavaModule) yangNode;
412 pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
413 .getRevision().getRevDate(), conflictResolver);
414 } else if (yangNode instanceof YangJavaSubModule) {
415 YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
416 pkg = getRootPackage(submodule.getVersion(),
417 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
418 submodule.getRevision().getRevDate(), conflictResolver);
419 } else {
420 throw new TranslatorException("Invalid root node of data model tree");
421 }
422
423 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
424 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
425 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
426 .setPackage(pkg);
427 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
428 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
429 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
430 .getPackage()));
431 }
432
433 /**
434 * Parent of the node in stack is updated with java info,
435 * all the nodes can be popped and updated
436 */
437 while (nodesToUpdatePackage.size() != 0) {
438 yangNode = nodesToUpdatePackage.pop();
439 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
440 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
441 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
442 .setPackage(getCurNodePackage(yangNode));
443 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
444 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
445 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
446 .getPackage()));
447 }
448 }
janani be18b5342016-07-13 21:06:41 +0530449
450 /**
451 * Returns the referred type from leaf/leaf-list.
452 *
453 * @param type current type in leaf
454 * @return type from the leafref
455 */
456 private static YangType<?> getReferredTypeFromLeafref(YangType type) {
457 YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
458 return leafRefInfo.getEffectiveDataType();
459 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530460}