blob: ce172fff19f3961e9fb7034918486df5cd142ecc [file] [log] [blame]
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc46ee2a2016-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 Agrawalbfce9342016-06-15 13:58:01 +053017package org.onosproject.yangutils.translator.tojava.javamodel;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053018
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +053019import java.util.Stack;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053020import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053021import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huawei234cd092016-07-14 11:35:34 +053022import org.onosproject.yangutils.datamodel.YangIdentity;
Shankara-Huawei234cd092016-07-14 11:35:34 +053023import org.onosproject.yangutils.datamodel.YangIdentityRef;
Shankara-Huaweib7564772016-08-02 18:13:13 +053024import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053025import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053026import org.onosproject.yangutils.datamodel.YangType;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053027import org.onosproject.yangutils.datamodel.YangUnion;
janani b0e4e8ae2016-07-13 21:06:41 +053028import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053029import org.onosproject.yangutils.translator.exception.TranslatorException;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053030import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +053031import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawale5057f02016-08-22 17:14:33 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
33import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
Bharat saraswal84366c52016-03-23 19:40:35 +053034
Bharat saraswalaf413b82016-07-14 15:18:20 +053035import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getCurNodePackage;
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +053036import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +053037import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
Shankara-Huaweib7564772016-08-02 18:13:13 +053038import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +053039import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal84366c52016-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;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +053044import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
Bharat saraswal84366c52016-03-23 19:40:35 +053045import static org.onosproject.yangutils.utils.UtilConstants.INT;
46import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
47import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053048import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
Bharat saraswal84366c52016-03-23 19:40:35 +053049import static org.onosproject.yangutils.utils.UtilConstants.LONG;
50import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053051import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal84366c52016-03-23 19:40:35 +053052import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
53import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +053054import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +053055import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Gaurav Agrawalbfce9342016-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 saraswalc46ee2a2016-02-25 02:26:43 +053059
60/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053061 * Represents java data types info corresponding to YANG type.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053062 */
63public final class AttributesJavaDataType {
64
65 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053066 * Creates an instance of attribute java data type.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053067 */
68 private AttributesJavaDataType() {
69 }
70
71 /**
Vinod Kumar S08710982016-03-03 19:55:30 +053072 * Returns java type.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053073 *
74 * @param yangType YANG type
Vinod Kumar S08710982016-03-03 19:55:30 +053075 * @return java type
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053076 */
Vinod Kumar S08710982016-03-03 19:55:30 +053077 public static String getJavaDataType(YangType<?> yangType) {
Bharat saraswal84366c52016-03-23 19:40:35 +053078
Vinod Kumar S08710982016-03-03 19:55:30 +053079 YangDataTypes type = yangType.getDataType();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053080
Bharat saraswale2bc60d2016-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;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +053098 case BITS:
99 return BIT_SET;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530100 case BINARY:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530101 return BYTE + SQUARE_BRACKETS;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530102 case DECIMAL64:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530103 return BIG_DECIMAL;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530104 case STRING:
105 return STRING_DATA_TYPE;
106 case BOOLEAN:
107 return BOOLEAN_DATA_TYPE;
janani b0e4e8ae2016-07-13 21:06:41 +0530108 case INSTANCE_IDENTIFIER:
109 return STRING_DATA_TYPE;
110 case LEAFREF:
111 return getJavaDataType(getReferredTypeFromLeafref(yangType));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530112 default:
113 throw new TranslatorException("given data type is not supported.");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530114 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530115 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530116
117 /**
118 * Returns java import class.
119 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530120 * @param yangType YANG type
121 * @param isListAttr if the attribute need to be a list
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530122 * @param pluginConfig plugin configurations
Vinod Kumar S08710982016-03-03 19:55:30 +0530123 * @return java import class
124 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530125 public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530126 YangToJavaNamingConflictUtil pluginConfig) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530127
Vinod Kumar S08710982016-03-03 19:55:30 +0530128 YangDataTypes type = yangType.getDataType();
129
130 if (isListAttr) {
Bharat saraswale2bc60d2016-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:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530149 return BIG_DECIMAL;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530150 case STRING:
151 return STRING_DATA_TYPE;
152 case BOOLEAN:
153 return BOOLEAN_WRAPPER;
154 case ENUMERATION:
janani b703cfe42016-05-17 13:12:22 +0530155 return getCapitalCase(
Shankara-Huaweib7564772016-08-02 18:13:13 +0530156 getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530157 pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530158 case BITS:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530159 return BIT_SET;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530160 case BINARY:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530161 return BYTE + SQUARE_BRACKETS;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530162 case LEAFREF:
janani b0e4e8ae2016-07-13 21:06:41 +0530163 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530164 return getJavaImportClass(referredType, true, pluginConfig);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530165 case IDENTITYREF:
Shankara-Huawei234cd092016-07-14 11:35:34 +0530166 YangIdentityRef identityRef = (YangIdentityRef) yangType.getDataTypeExtendedInfo();
167 YangIdentity identity = identityRef.getReferredIdentity();
Shankara-Huaweib7564772016-08-02 18:13:13 +0530168 return getCapitalCase(getCamelCase(identity.
169 getName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530170 case EMPTY:
171 return BOOLEAN_WRAPPER;
172 case UNION:
Shankara-Huaweib7564772016-08-02 18:13:13 +0530173 return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
174 .getDataTypeExtendedInfo()).getName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530175 case INSTANCE_IDENTIFIER:
janani b0e4e8ae2016-07-13 21:06:41 +0530176 return STRING_DATA_TYPE;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530177 case DERIVED:
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530178 return getCapitalCase(
179 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530180 default:
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530181 throw new TranslatorException("given data type is not supported.");
Vinod Kumar S08710982016-03-03 19:55:30 +0530182 }
183 } else {
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530184 switch (type) {
185 case UINT64:
186 return BIG_INTEGER;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530187 case STRING:
188 return STRING_DATA_TYPE;
189 case ENUMERATION:
janani b703cfe42016-05-17 13:12:22 +0530190 return getCapitalCase(
Shankara-Huaweib7564772016-08-02 18:13:13 +0530191 getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530192 pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530193 case BITS:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530194 return BIT_SET;
195 case DECIMAL64:
196 return BIG_DECIMAL;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530197 case LEAFREF:
janani b0e4e8ae2016-07-13 21:06:41 +0530198 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530199 return getJavaImportClass(referredType, false, pluginConfig);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530200 case IDENTITYREF:
Shankara-Huawei234cd092016-07-14 11:35:34 +0530201 YangIdentityRef identityRef = (YangIdentityRef) yangType.getDataTypeExtendedInfo();
202 YangIdentity identity = identityRef.getReferredIdentity();
Shankara-Huaweib7564772016-08-02 18:13:13 +0530203 return getCapitalCase(getCamelCase(identity.getName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530204 case EMPTY:
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530205 return BOOLEAN_DATA_TYPE;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530206 case UNION:
Shankara-Huaweib7564772016-08-02 18:13:13 +0530207 return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
208 .getDataTypeExtendedInfo()).getName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530209 case INSTANCE_IDENTIFIER:
janani b0e4e8ae2016-07-13 21:06:41 +0530210 return STRING_DATA_TYPE;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530211 case DERIVED:
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530212 return getCapitalCase(
213 getCamelCase(yangType.getDataTypeName(), pluginConfig));
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530214 default:
215 return null;
Vinod Kumar S08710982016-03-03 19:55:30 +0530216 }
217 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530218 }
219
220 /**
221 * Returns java import package.
222 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530223 * @param yangType YANG type
224 * @param isListAttr if the attribute is of list type
janani b3e357f62016-05-19 17:39:50 +0530225 * @param conflictResolver object of YANG to java naming conflict util
Vinod Kumar S08710982016-03-03 19:55:30 +0530226 * @return java import package
227 */
Bharat saraswal5cd9e9c2016-05-26 23:48:38 +0530228 public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530229 YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530230
Vinod Kumar S08710982016-03-03 19:55:30 +0530231 YangDataTypes type = yangType.getDataType();
232
233 if (isListAttr) {
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530234 switch (type) {
235 case INT8:
236 case INT16:
237 case INT32:
238 case INT64:
239 case UINT8:
240 case UINT16:
241 case UINT32:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530242 case BINARY:
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530243 case STRING:
244 case BOOLEAN:
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530245 case EMPTY:
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530246 return JAVA_LANG;
247 case UINT64:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530248 case DECIMAL64:
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530249 return JAVA_MATH;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530250 case ENUMERATION:
janani b3e357f62016-05-19 17:39:50 +0530251 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530252 case BITS:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530253 return COLLECTION_IMPORTS;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530254 case LEAFREF:
janani b0e4e8ae2016-07-13 21:06:41 +0530255 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530256 return getJavaImportPackage(referredType, true, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530257 case IDENTITYREF:
Shankara-Huawei234cd092016-07-14 11:35:34 +0530258 return getIdentityRefPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530259 case UNION:
janani b3e357f62016-05-19 17:39:50 +0530260 return getUnionPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530261 case INSTANCE_IDENTIFIER:
janani b0e4e8ae2016-07-13 21:06:41 +0530262 return JAVA_LANG;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530263 case DERIVED:
Bharat saraswal8beac342016-08-04 02:00:03 +0530264 return getTypeDefsPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530265 default:
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530266 throw new TranslatorException("given data type is not supported.");
Vinod Kumar S08710982016-03-03 19:55:30 +0530267 }
268 } else {
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530269 switch (type) {
270 case UINT64:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530271 case DECIMAL64:
Bharat saraswal250a7472016-05-12 13:16:57 +0530272 return JAVA_MATH;
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530273 case EMPTY:
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530274 case STRING:
275 return JAVA_LANG;
276 case ENUMERATION:
janani b3e357f62016-05-19 17:39:50 +0530277 return getEnumsPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530278 case BITS:
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530279 return COLLECTION_IMPORTS;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530280 case LEAFREF:
janani b0e4e8ae2016-07-13 21:06:41 +0530281 YangType<?> referredType = getReferredTypeFromLeafref(yangType);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530282 return getJavaImportPackage(referredType, false, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530283 case IDENTITYREF:
Shankara-Huawei234cd092016-07-14 11:35:34 +0530284 return getIdentityRefPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530285 case UNION:
janani b3e357f62016-05-19 17:39:50 +0530286 return getUnionPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530287 case INSTANCE_IDENTIFIER:
janani b0e4e8ae2016-07-13 21:06:41 +0530288 return JAVA_LANG;
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530289 case DERIVED:
Bharat saraswal8beac342016-08-04 02:00:03 +0530290 return getTypeDefsPackage(yangType, conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530291 default:
292 return null;
Vinod Kumar S08710982016-03-03 19:55:30 +0530293 }
294 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530295 }
296
297 /**
298 * Returns java package for typedef node.
299 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530300 * @param type YANG type
janani b3e357f62016-05-19 17:39:50 +0530301 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530302 * @return java package for typedef node
303 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530304 private static String getTypeDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530305 Object var = type.getDataTypeExtendedInfo();
306 if (!(var instanceof YangDerivedInfo)) {
307 throw new TranslatorException("type should have been derived.");
308 }
309
Shankara-Huaweib7564772016-08-02 18:13:13 +0530310 if (!(((YangDerivedInfo<?>) var).getReferredTypeDef() != null)) {
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530311 throw new TranslatorException("derived info is not an instance of typedef.");
312 }
313
Shankara-Huaweib7564772016-08-02 18:13:13 +0530314 YangJavaTypeDefTranslator typedef = (YangJavaTypeDefTranslator) ((YangDerivedInfo<?>) var).getReferredTypeDef();
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530315 if (typedef.getJavaFileInfo().getPackage() == null) {
janani b3e357f62016-05-19 17:39:50 +0530316 return getPackageFromParent(typedef.getParent(), conflictResolver);
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530317 }
318 return typedef.getJavaFileInfo().getPackage();
319 }
320
321 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530322 * Returns java package for union node.
323 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530324 * @param type YANG type
janani b3e357f62016-05-19 17:39:50 +0530325 * @param conflictResolver object of YANG to java naming conflict util
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530326 * @return java package for union node
327 */
janani b3e357f62016-05-19 17:39:50 +0530328 private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530329
330 if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
331 throw new TranslatorException("type should have been union.");
332 }
333
Shankara-Huaweib7564772016-08-02 18:13:13 +0530334 YangJavaUnionTranslator union = (YangJavaUnionTranslator) type.getDataTypeExtendedInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530335 if (union.getJavaFileInfo().getPackage() == null) {
janani b3e357f62016-05-19 17:39:50 +0530336 return getPackageFromParent(union.getParent(), conflictResolver);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530337 }
338 return union.getJavaFileInfo().getPackage();
339 }
340
341 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530342 * Returns YANG enumeration's java package.
343 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530344 * @param type YANG type
janani b3e357f62016-05-19 17:39:50 +0530345 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530346 * @return YANG enumeration's java package
347 */
janani b3e357f62016-05-19 17:39:50 +0530348 private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530349
350 if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
351 throw new TranslatorException("type should have been enumeration.");
352 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530353 YangJavaEnumerationTranslator enumeration = (YangJavaEnumerationTranslator) type.getDataTypeExtendedInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530354 if (enumeration.getJavaFileInfo().getPackage() == null) {
janani b3e357f62016-05-19 17:39:50 +0530355 return getPackageFromParent(enumeration.getParent(), conflictResolver);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530356 }
357 return enumeration.getJavaFileInfo().getPackage();
358 }
359
360 /**
Shankara-Huawei234cd092016-07-14 11:35:34 +0530361 * Returns YANG identity's java package.
362 *
363 * @param type YANG type
364 * @param conflictResolver object of YANG to java naming conflict util
365 * @return YANG identity's java package
366 */
367 private static String getIdentityRefPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
368
369 if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
370 throw new TranslatorException("type should have been identityref.");
371 }
372 YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
Shankara-Huaweib7564772016-08-02 18:13:13 +0530373 YangJavaIdentityTranslator identity = (YangJavaIdentityTranslator) (identityRef.getReferredIdentity());
Shankara-Huawei234cd092016-07-14 11:35:34 +0530374 if (identity.getJavaFileInfo().getPackage() == null) {
375 return getPackageFromParent(identity.getParent(), conflictResolver);
376 }
377 return identity.getJavaFileInfo().getPackage();
378 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530379
Shankara-Huawei234cd092016-07-14 11:35:34 +0530380 /**
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530381 * Returns package from parent node.
382 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530383 * @param parent parent YANG node
janani b3e357f62016-05-19 17:39:50 +0530384 * @param conflictResolver object of YANG to java naming conflict util
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530385 * @return java package from parent node
386 */
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530387 private static String getPackageFromParent(YangNode parent,
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530388 YangToJavaNamingConflictUtil conflictResolver) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530389 if (!(parent instanceof JavaFileInfoContainer)) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530390 throw new TranslatorException("invalid child node is being processed.");
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530391 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530392 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530393 if (parentInfo.getPackage() == null) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530394 updateJavaFileInfo(parent, conflictResolver);
Gaurav Agrawalab7c4bd2016-05-17 18:06:38 +0530395 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530396 return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
Vinod Kumar S08710982016-03-03 19:55:30 +0530397 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530398
399 /**
400 * Update the referred data model nodes java file info, this will be called,
401 * when the linked node is yet to translate. Then resolve until the parent hierarchy.
402 *
403 * @param yangNode node whose java info needs to be updated
404 * @param conflictResolver yang plugin config
405 */
406 public static void updateJavaFileInfo(YangNode yangNode,
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530407 YangToJavaNamingConflictUtil conflictResolver) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530408 Stack<YangNode> nodesToUpdatePackage = new Stack<>();
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530409
410 /*
411 * Add the nodes to be updated for package info in a stack.
412 */
413 while (yangNode != null
414 && ((JavaFileInfoContainer) yangNode)
415 .getJavaFileInfo().getPackage() == null) {
416 nodesToUpdatePackage.push(yangNode);
417 yangNode = yangNode.getParent();
418 }
419
420 /*
421 * If the package is not updated till root node, then root package needs to
422 * be updated.
423 */
424 if (yangNode == null) {
425 yangNode = nodesToUpdatePackage.pop();
426 String pkg;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530427 if (yangNode instanceof YangJavaModuleTranslator) {
428 YangJavaModuleTranslator module = (YangJavaModuleTranslator) yangNode;
Gaurav Agrawale5057f02016-08-22 17:14:33 +0530429 pkg = getRootPackage(module.getVersion(), module.getNameSpace(), module
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530430 .getRevision().getRevDate(), conflictResolver);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530431 } else if (yangNode instanceof YangJavaSubModuleTranslator) {
432 YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) yangNode;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530433 pkg = getRootPackage(submodule.getVersion(),
434 submodule.getNameSpaceFromModule(submodule.getBelongsTo()),
435 submodule.getRevision().getRevDate(), conflictResolver);
436 } else {
437 throw new TranslatorException("Invalid root node of data model tree");
438 }
439
440 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
441 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
442 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
443 .setPackage(pkg);
444 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
445 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
446 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
447 .getPackage()));
448 }
449
Shankara-Huaweib7564772016-08-02 18:13:13 +0530450 /*
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530451 * Parent of the node in stack is updated with java info,
452 * all the nodes can be popped and updated
453 */
454 while (nodesToUpdatePackage.size() != 0) {
455 yangNode = nodesToUpdatePackage.pop();
456 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
457 .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
458 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
459 .setPackage(getCurNodePackage(yangNode));
460 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
461 .setPackageFilePath(getPackageDirPathFromJavaJPackage(
462 ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
463 .getPackage()));
464 }
465 }
janani b0e4e8ae2016-07-13 21:06:41 +0530466
467 /**
468 * Returns the referred type from leaf/leaf-list.
469 *
470 * @param type current type in leaf
471 * @return type from the leafref
472 */
473 private static YangType<?> getReferredTypeFromLeafref(YangType type) {
474 YangLeafRef<?> leafRefInfo = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
475 return leafRefInfo.getEffectiveDataType();
476 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530477}