blob: 4d7c9fc916f874c58d53c0e5a5e83149237d6649 [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;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053020import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
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;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053023import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053024import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053025import org.onosproject.yangutils.datamodel.YangTypeDef;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053026import org.onosproject.yangutils.datamodel.YangUnion;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053027import org.onosproject.yangutils.translator.exception.TranslatorException;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053028import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
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;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053031import org.onosproject.yangutils.utils.io.impl.YangToJavaNamingConflictUtil;
Bharat saraswale2d51d62016-03-23 19:40:35 +053032
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053033import static org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModelUtils.getCurNodePackage;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053034import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053035import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053036import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
37import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
38import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
39import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
40import static org.onosproject.yangutils.utils.UtilConstants.INT;
41import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
42import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053043import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044import static org.onosproject.yangutils.utils.UtilConstants.LONG;
45import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053046import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
48import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
49import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053050import static org.onosproject.yangutils.utils.UtilConstants.YANG_BINARY_CLASS;
51import static org.onosproject.yangutils.utils.UtilConstants.YANG_BITS_CLASS;
52import static org.onosproject.yangutils.utils.UtilConstants.YANG_DECIMAL64_CLASS;
53import static org.onosproject.yangutils.utils.UtilConstants.YANG_TYPES_PKG;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053054import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
55import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
56import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053057
58/**
Bharat saraswald9822e92016-04-05 15:13:44 +053059 * Represents java data types info corresponding to YANG type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053060 */
61public final class AttributesJavaDataType {
62
63 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053064 * Creates an instance of attribute java data type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053065 */
66 private AttributesJavaDataType() {
67 }
68
69 /**
Vinod Kumar Sc4216002016-03-03 19:55:30 +053070 * Returns java type.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053071 *
72 * @param yangType YANG type
Vinod Kumar Sc4216002016-03-03 19:55:30 +053073 * @return java type
Bharat saraswal4bf8b152016-02-25 02:26:43 +053074 */
Vinod Kumar Sc4216002016-03-03 19:55:30 +053075 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswale2d51d62016-03-23 19:40:35 +053076
Vinod Kumar Sc4216002016-03-03 19:55:30 +053077 YangDataTypes type = yangType.getDataType();
Bharat saraswal4bf8b152016-02-25 02:26:43 +053078
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053079 switch (type) {
80 case INT8:
81 return BYTE;
82 case INT16:
83 return SHORT;
84 case INT32:
85 return INT;
86 case INT64:
87 return LONG;
88 case UINT8:
89 return SHORT;
90 case UINT16:
91 return INT;
92 case UINT32:
93 return LONG;
94 case UINT64:
95 return BIG_INTEGER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053096 case BINARY:
97 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053098 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +053099 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530100 case STRING:
101 return STRING_DATA_TYPE;
102 case BOOLEAN:
103 return BOOLEAN_DATA_TYPE;
104 default:
105 throw new TranslatorException("given data type is not supported.");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530106 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530107 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530108
109 /**
110 * Returns java import class.
111 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530112 * @param yangType YANG type
113 * @param isListAttr if the attribute need to be a list
Bharat saraswal33dfa012016-05-17 19:59:16 +0530114 * @param pluginConfig plugin configurations
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530115 * @return java import class
116 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530117 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530118 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530119
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530120 YangDataTypes type = yangType.getDataType();
121
122 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530123 switch (type) {
124 case INT8:
125 return BYTE_WRAPPER;
126 case INT16:
127 return SHORT_WRAPPER;
128 case INT32:
129 return INTEGER_WRAPPER;
130 case INT64:
131 return LONG_WRAPPER;
132 case UINT8:
133 return SHORT_WRAPPER;
134 case UINT16:
135 return INTEGER_WRAPPER;
136 case UINT32:
137 return LONG_WRAPPER;
138 case UINT64:
139 return BIG_INTEGER;
140 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530141 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530142 case STRING:
143 return STRING_DATA_TYPE;
144 case BOOLEAN:
145 return BOOLEAN_WRAPPER;
146 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530147 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530148 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
149 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530150 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530151 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530152 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530153 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530154 case LEAFREF:
155 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530156 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530157 case IDENTITYREF:
158 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530159 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530160 case EMPTY:
161 return BOOLEAN_WRAPPER;
162 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530163 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530164 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530165 case INSTANCE_IDENTIFIER:
166 //TODO:INSTANCE_IDENTIFIER
Bharat saraswal33dfa012016-05-17 19:59:16 +0530167 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530168 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530169 return getCapitalCase(
170 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530171 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530172 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530173 }
174 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530175 switch (type) {
176 case UINT64:
177 return BIG_INTEGER;
178 case DECIMAL64:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530179 return YANG_DECIMAL64_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530180 case STRING:
181 return STRING_DATA_TYPE;
182 case ENUMERATION:
janani b4a6711a2016-05-17 13:12:22 +0530183 return getCapitalCase(
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530184 getCamelCase(((YangJavaEnumeration) yangType.getDataTypeExtendedInfo()).getName(),
185 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530186 case BITS:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530187 return YANG_BITS_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530188 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530189 return YANG_BINARY_CLASS;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530190 case LEAFREF:
191 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530192 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530193 case IDENTITYREF:
194 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530195 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530196 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530197 return BOOLEAN_DATA_TYPE;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530198 case UNION:
janani b4a6711a2016-05-17 13:12:22 +0530199 return getCapitalCase(getCamelCase(((YangJavaUnion) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530200 pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530201 case INSTANCE_IDENTIFIER:
202 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530203 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530204 case DERIVED:
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530205 return getCapitalCase(
206 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530207 default:
208 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530209 }
210 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530211 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530212 }
213
214 /**
215 * Returns java import package.
216 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530217 * @param yangType YANG type
218 * @param isListAttr if the attribute is of list type
janani bdd1314f2016-05-19 17:39:50 +0530219 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530220 * @return java import package
221 */
Bharat saraswalcad0e652016-05-26 23:48:38 +0530222 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530223 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530224
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530225 YangDataTypes type = yangType.getDataType();
226
227 if (isListAttr) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530228 switch (type) {
229 case INT8:
230 case INT16:
231 case INT32:
232 case INT64:
233 case UINT8:
234 case UINT16:
235 case UINT32:
236 case STRING:
237 case BOOLEAN:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530238 case EMPTY:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530239 return JAVA_LANG;
240 case UINT64:
241 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530242 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530243 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530244 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530245 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530246 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530247 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530248 case LEAFREF:
249 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530250 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530251 case IDENTITYREF:
252 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530253 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530254 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530255 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530256 case INSTANCE_IDENTIFIER:
257 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530258 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530259 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530260 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530261 default:
Bharat saraswald72411a2016-04-19 01:00:16 +0530262 throw new TranslatorException("given data type is not supported.");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530263 }
264 } else {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530265 switch (type) {
266 case UINT64:
Bharat saraswalc0e04842016-05-12 13:16:57 +0530267 return JAVA_MATH;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530268 case STRING:
269 return JAVA_LANG;
270 case ENUMERATION:
janani bdd1314f2016-05-19 17:39:50 +0530271 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530272 case DECIMAL64:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530273 case BITS:
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530274 case BINARY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530275 return YANG_TYPES_PKG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530276 case LEAFREF:
277 //TODO:LEAFREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530278 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530279 case IDENTITYREF:
280 //TODO:IDENTITYREF
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530281 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530282 case EMPTY:
Bharat saraswal33dfa012016-05-17 19:59:16 +0530283 return JAVA_LANG;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530284 case UNION:
janani bdd1314f2016-05-19 17:39:50 +0530285 return getUnionPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530286 case INSTANCE_IDENTIFIER:
287 //TODO:INSTANCE_IDENTIFIER
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530288 break;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530289 case DERIVED:
janani bdd1314f2016-05-19 17:39:50 +0530290 return getTypDefsPackage(yangType, conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530291 default:
292 return null;
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530293 }
294 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530295 return null;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530296 }
297
298 /**
299 * Returns java package for typedef node.
300 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530301 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530302 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530303 * @return java package for typedef node
304 */
janani bdd1314f2016-05-19 17:39:50 +0530305 private static String getTypDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530306 Object var = type.getDataTypeExtendedInfo();
307 if (!(var instanceof YangDerivedInfo)) {
308 throw new TranslatorException("type should have been derived.");
309 }
310
311 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() instanceof YangTypeDef)) {
312 throw new TranslatorException("derived info is not an instance of typedef.");
313 }
314
315 YangJavaTypeDef typedef = (YangJavaTypeDef) ((YangDerivedInfo<?>) var).getReferredTypeDef();
316 if (typedef.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530317 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530318 }
319 return typedef.getJavaFileInfo().getPackage();
320 }
321
322 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530323 * Returns java package for union node.
324 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530325 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530326 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530327 * @return java package for union node
328 */
janani bdd1314f2016-05-19 17:39:50 +0530329 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530330
331 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
332 throw new TranslatorException("type should have been union.");
333 }
334
335 YangJavaUnion union = (YangJavaUnion) type.getDataTypeExtendedInfo();
336 if (union.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530337 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530338 }
339 return union.getJavaFileInfo().getPackage();
340 }
341
342 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530343 * Returns YANG enumeration's java package.
344 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530345 * @param type YANG type
janani bdd1314f2016-05-19 17:39:50 +0530346 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswald72411a2016-04-19 01:00:16 +0530347 * @return YANG enumeration's java package
348 */
janani bdd1314f2016-05-19 17:39:50 +0530349 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswald72411a2016-04-19 01:00:16 +0530350
351 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
352 throw new TranslatorException("type should have been enumeration.");
353 }
354 YangJavaEnumeration enumeration = (YangJavaEnumeration) type.getDataTypeExtendedInfo();
355 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani bdd1314f2016-05-19 17:39:50 +0530356 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswald72411a2016-04-19 01:00:16 +0530357 }
358 return enumeration.getJavaFileInfo().getPackage();
359 }
360
361 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530362 * Returns package from parent node.
363 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530364 * @param parent parent YANG node
janani bdd1314f2016-05-19 17:39:50 +0530365 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530366 * @return java package from parent node
367 */
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530368 private static String getPackageFromParent(YangNode parent,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530369 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530370 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530371 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530372 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530373 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530374 if (parentInfo.getPackage() == null) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530375 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530376 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530377 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530378 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530379
380 /**
381 * Update the referred data model nodes java file info, this will be called,
382 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
383 *
384 * @param yangNode node whose java info needs to be updated
385 * @param conflictResolver yang plugin config
386 */
387 public static void updateJavaFileInfo(YangNode yangNode,
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530388 YangToJavaNamingConflictUtil conflictResolver) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530389 Stack<YangNode> nodesToUpdatePackage = new Stack<YangNode>();
390
391 /*
392 * Add the nodes to be updated for package info in a stack.
393 */
394 while (yangNode != null
395 && ((JavaFileInfoContainer) yangNode)
396 .getJavaFileInfo().getPackage() == null) {
397 nodesToUpdatePackage.push(yangNode);
398 yangNode = yangNode.getParent();
399 }
400
401 /*
402 * If the package is not updated till root node, then root package needs to
403 * be updated.
404 */
405 if (yangNode == null) {
406 yangNode = nodesToUpdatePackage.pop();
407 String pkg;
408 if (yangNode instanceof YangJavaModule) {
409 YangJavaModule module = (YangJavaModule) yangNode;
410 pkg = getRootPackage(module.getVersion(), module.getNameSpace().getUri(), module
411 .getRevision().getRevDate(), conflictResolver);
412 } else if (yangNode instanceof YangJavaSubModule) {
413 YangJavaSubModule submodule = (YangJavaSubModule) yangNode;
414 pkg = getRootPackage(submodule.getVersion(),
415 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
416 submodule.getRevision().getRevDate(), conflictResolver);
417 } else {
418 throw new TranslatorException("Invalid root node of data model tree");
419 }
420
421 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
422 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
423 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
424 .setPackage(pkg);
425 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
426 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
427 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
428 .getPackage()));
429 }
430
431 /**
432 * Parent of the node in stack is updated with java info,
433 * all the nodes can be popped and updated
434 */
435 while (nodesToUpdatePackage.size() != 0) {
436 yangNode = nodesToUpdatePackage.pop();
437 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
438 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
439 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
440 .setPackage(getCurNodePackage(yangNode));
441 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
442 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
443 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
444 .getPackage()));
445 }
446 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530447}