blob: 7f1cfcecdc13a8c5e5054f603f52287de5dcf6b4 [file] [log] [blame]
Bharat saraswal97459962016-02-20 21:57:16 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal97459962016-02-20 21:57:16 +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
17package org.onosproject.yangutils.translator.tojava.utils;
18
Bharat saraswal9fab16b2016-09-23 23:27:24 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Bharat saraswald14cbe82016-07-14 13:26:18 +053020import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswal039f59c2016-07-14 21:57:13 +053021import org.onosproject.yangutils.datamodel.YangCase;
Shankara-Huawei234cd092016-07-14 11:35:34 +053022import org.onosproject.yangutils.datamodel.YangIdentity;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053023import org.onosproject.yangutils.datamodel.YangNode;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053024import org.onosproject.yangutils.datamodel.YangNotification;
Bharat saraswal8beac342016-08-04 02:00:03 +053025import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswald14cbe82016-07-14 13:26:18 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswale3175d32016-08-31 17:50:11 +053027import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Shankara-Huaweib7564772016-08-02 18:13:13 +053028import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053029import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053030
Bharat saraswal84366c52016-03-23 19:40:35 +053031import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
32import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053035import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Shankara-Huawei234cd092016-07-14 11:35:34 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053043import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_DIAMOND_WITH_VALUE;
44import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
45import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBuilderImplStringClassDef;
46import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinition;
47import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithExtends;
48import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithImpl;
49import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultName;
50import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getErrorMsg;
51import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getEventExtendsString;
52import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSpecificModifier;
53import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSuffixedName;
Bharat saraswald14cbe82016-07-14 13:26:18 +053054import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053055import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT_EVENT;
Bharat saraswal84366c52016-03-23 19:40:35 +053056import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
57import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053058import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053059import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
60import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053061import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053062import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_JAVA_IDENTITY;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053063import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
64import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053065import static org.onosproject.yangutils.utils.UtilConstants.EVENT_TYPE;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053066import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
Bharat saraswal84366c52016-03-23 19:40:35 +053067import static org.onosproject.yangutils.utils.UtilConstants.FINAL;
Bharat saraswal84366c52016-03-23 19:40:35 +053068import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
69import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053070import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
Bharat saraswal84366c52016-03-23 19:40:35 +053071import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
72import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswal8beac342016-08-04 02:00:03 +053073import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +053074import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
75import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
janani b3e357f62016-05-19 17:39:50 +053076import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053077import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Bharat saraswal84366c52016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal8beac342016-08-04 02:00:03 +053079import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053080import static org.onosproject.yangutils.utils.UtilConstants.SUBJECT;
Shankara-Huawei234cd092016-07-14 11:35:34 +053081import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2bc60d2016-04-16 02:28:25 +053082import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +053083
84/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053085 * Represents generator for class definition of generated files.
Bharat saraswal97459962016-02-20 21:57:16 +053086 */
Bharat saraswal8beac342016-08-04 02:00:03 +053087final class ClassDefinitionGenerator {
Bharat saraswal97459962016-02-20 21:57:16 +053088
89 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +053090 * Creates an instance of class definition generator.
Bharat saraswal97459962016-02-20 21:57:16 +053091 */
92 private ClassDefinitionGenerator() {
93 }
94
95 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +053096 * Based on the file type and the YANG name of the file, generate the class
97 * / interface definition start.
Bharat saraswal97459962016-02-20 21:57:16 +053098 *
99 * @param genFileTypes generated file type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530100 * @param yangName class name
Bharat saraswal97459962016-02-20 21:57:16 +0530101 * @return class definition
102 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530103 static String generateClassDefinition(int genFileTypes, String yangName) {
Bharat saraswal97459962016-02-20 21:57:16 +0530104
Bharat saraswal8beac342016-08-04 02:00:03 +0530105 /*
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530106 * Based on the file type and the YANG name of the file, generate the
Vinod Kumar S08710982016-03-03 19:55:30 +0530107 * class / interface definition start.
Bharat saraswal97459962016-02-20 21:57:16 +0530108 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530109 switch (genFileTypes) {
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530110 case GENERATE_TYPEDEF_CLASS:
111 case GENERATE_UNION_CLASS:
112 return getTypeClassDefinition(yangName);
113 case GENERATE_ENUM_CLASS:
114 return getEnumClassDefinition(yangName);
115 default:
116 return null;
Bharat saraswal97459962016-02-20 21:57:16 +0530117 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530118 }
119
120 /**
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530121 * Based on the file type and the YANG name of the file, generate the class
122 * / interface definition start.
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530123 *
124 * @param genFileTypes generated file type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530125 * @param yangName class name
126 * @param curNode current YANG node
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530127 * @return class definition
128 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530129 static String generateClassDefinition(int genFileTypes, String yangName,
130 YangNode curNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530131 /*
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530132 * Based on the file type and the YANG name of the file, generate the
133 * class / interface definition start.
134 */
135 switch (genFileTypes) {
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530136 case INTERFACE_MASK:
137 return getInterfaceDefinition(yangName, curNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530138 case BUILDER_CLASS_MASK:
139 return getBuilderClassDefinition(yangName, curNode);
Bharat saraswal8beac342016-08-04 02:00:03 +0530140 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530141 return getImplClassDefinition(yangName, curNode);
142 case BUILDER_INTERFACE_MASK:
143 return getBuilderInterfaceDefinition(yangName, curNode);
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530144 case GENERATE_SERVICE_AND_MANAGER:
145 return getRpcInterfaceDefinition(yangName, curNode);
146 case GENERATE_EVENT_CLASS:
147 String eventName = yangName + SUBJECT;
148 return getEventDefinition(yangName, eventName);
149 case GENERATE_EVENT_LISTENER_INTERFACE:
150 return getEventListenerDefinition(yangName);
151 case GENERATE_EVENT_SUBJECT_CLASS:
152 return getClassDefinition(yangName);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530153 case GENERATE_IDENTITY_CLASS:
154 return getIdentityClassDefinition(yangName, curNode);
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530155 default:
156 return null;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530157 }
Bharat saraswal97459962016-02-20 21:57:16 +0530158 }
159
160 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530161 * Returns enum file class definition.
162 *
163 * @param yangName class name
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530164 * @return enum file class definition
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530165 */
166 private static String getEnumClassDefinition(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530167 return getDefaultDefinition(ENUM, yangName, PUBLIC);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530168 }
169
170 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530171 * Returns interface file class definition.
172 *
173 * @param yangName file name
174 * @return definition
175 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530176 private static String getInterfaceDefinition(String yangName,
177 YangNode curNode) {
Bharat saraswal97459962016-02-20 21:57:16 +0530178
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530179 String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
180 INTERFACE_MASK);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530181 if (clsDef != null) {
182 return clsDef;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530183 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530184 return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
Bharat saraswal97459962016-02-20 21:57:16 +0530185 }
186
187 /**
188 * Returns builder interface file class definition.
189 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530190 * @param yangName java class name, corresponding to which the builder
191 * class is being generated
Bharat saraswal97459962016-02-20 21:57:16 +0530192 * @return definition
193 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530194 private static String getBuilderInterfaceDefinition(String yangName,
195 YangNode curNode) {
196 if (!(curNode instanceof YangCase) &&
197 !(curNode instanceof YangAugment)) {
198 String clsDef = getClassDefinitionForWhenExtended(
199 curNode, yangName, BUILDER_INTERFACE_MASK);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530200 if (clsDef != null) {
201 return clsDef;
202 }
203 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530204 return getDefaultDefinition(INTERFACE, getSuffixedName(yangName, BUILDER),
205 null);
Bharat saraswal97459962016-02-20 21:57:16 +0530206 }
207
208 /**
209 * Returns builder file class definition.
210 *
211 * @param yangName file name
212 * @return definition
213 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530214 private static String getBuilderClassDefinition(String yangName,
215 YangNode curNode) {
216 String mod = getSpecificModifier(PUBLIC, STATIC);
217 String bName = getSuffixedName(yangName, BUILDER);
Bharat saraswal039f59c2016-07-14 21:57:13 +0530218 if (!(curNode instanceof YangCase)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530219 String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
220 BUILDER_CLASS_MASK);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530221 if (clsDef != null) {
222 return clsDef;
223 }
224 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530225 if (curNode instanceof RpcNotificationContainer) {
226 return getDefaultDefinition(CLASS, bName, mod);
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530227 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530228 return getDefaultDefinitionWithImpl(CLASS, bName, mod,
229 getBuilderImplStringClassDef(yangName));
Shankara-Huaweia1039e52016-07-14 16:53:09 +0530230 }
231
232 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530233 * Returns impl file class definition.
234 *
235 * @param yangName file name
236 * @return definition
237 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530238 private static String getImplClassDefinition(String yangName,
239 YangNode curNode) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530240 if (!(curNode instanceof YangCase)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530241 String clsDef = getClassDefinitionForWhenExtended(
242 curNode, yangName, DEFAULT_CLASS_MASK);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530243 if (clsDef != null) {
244 return clsDef;
245 }
246 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530247 if (curNode instanceof RpcNotificationContainer) {
248 return getDefaultDefinitionWithImpl(
249 CLASS, getSuffixedName(yangName, OP_PARAM), PUBLIC, yangName);
Bharat saraswal8beac342016-08-04 02:00:03 +0530250 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530251 return getDefaultDefinitionWithImpl(CLASS, getDefaultName(yangName),
252 PUBLIC, yangName);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530253 }
254
255 /**
256 * Returns impl file class definition.
257 *
258 * @param yangName file name
259 * @return definition
260 */
261 private static String getClassDefinition(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530262 return getDefaultDefinition(CLASS, yangName, PUBLIC);
Bharat saraswal97459962016-02-20 21:57:16 +0530263 }
264
Bharat saraswal022dae92016-03-04 20:08:09 +0530265 /**
Shankara-Huawei234cd092016-07-14 11:35:34 +0530266 * Returns implementation file identity class definition.
267 *
268 * @param yangName file name
269 * @return identity class definition
270 */
271 private static String getIdentityClassDefinition(String yangName, YangNode curNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530272 String error = getErrorMsg(ERROR_MSG_JAVA_IDENTITY, curNode.getName(),
273 curNode.getLineNumber(), curNode
274 .getCharPosition(), curNode
275 .getFileName());
Bharat saraswald14cbe82016-07-14 13:26:18 +0530276 if (!(curNode instanceof YangIdentity)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 throw new TranslatorException(error);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530278 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530279 YangIdentity identity = (YangIdentity) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530280 String mod = getSpecificModifier(PUBLIC, ABSTRACT);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530281 if (identity.getBaseNode() != null) {
282 YangIdentity baseIdentity = identity.getBaseNode().getReferredIdentity();
Bharat saraswal8beac342016-08-04 02:00:03 +0530283 if (baseIdentity == null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530284 throw new TranslatorException(error);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530285 }
286
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530287 JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) baseIdentity)
288 .getJavaFileInfo();
289 return getDefaultDefinitionWithExtends(
290 CLASS, yangName, mod, getCapitalCase(fileInfo.getJavaName()));
Shankara-Huawei234cd092016-07-14 11:35:34 +0530291 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530292 return getDefaultDefinition(CLASS, yangName, mod);
Shankara-Huawei234cd092016-07-14 11:35:34 +0530293 }
294
295 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530296 * Returns type file class definition.
Bharat saraswal022dae92016-03-04 20:08:09 +0530297 *
298 * @param yangName file name
299 * @return definition
300 */
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530301 private static String getTypeClassDefinition(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530302 return getDefaultDefinition(CLASS, yangName,
303 getSpecificModifier(PUBLIC, FINAL));
Bharat saraswal022dae92016-03-04 20:08:09 +0530304 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530305
306 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530307 * Returns RPC file interface definition.
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530308 *
309 * @param yangName file name
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530310 * @param curNode current YANG node
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530311 * @return definition
312 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530313 private static String getRpcInterfaceDefinition(String yangName, YangNode curNode) {
314 JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530315 .getTempJavaCodeFragmentFiles().getServiceTempFiles()
316 .getJavaExtendsListHolder();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530317 if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
318 curNode = curNode.getChild();
319 while (curNode != null) {
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530320 if (curNode instanceof YangNotification) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530321 return getRpcInterfaceDefinitionWhenItExtends(yangName);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530322 }
323 curNode = curNode.getNextSibling();
324 }
325 }
janani b3e357f62016-05-19 17:39:50 +0530326 if (yangName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530327 return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
Bharat saraswal250a7472016-05-12 13:16:57 +0530328 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530329 String name = getSuffixedName(
330 yangName.substring(0, yangName.length() - 7), SERVICE);
331 return getDefaultDefinitionWithImpl(CLASS, yangName, PUBLIC, name);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530332 }
333
334 /* Provides class definition when RPC interface needs to extends any event.*/
Bharat saraswalaf413b82016-07-14 15:18:20 +0530335 private static String getRpcInterfaceDefinitionWhenItExtends(String yangName) {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530336
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530337 StringBuilder newString = new StringBuilder(yangName);
338 newString.replace(yangName.lastIndexOf(SERVICE), yangName
339 .lastIndexOf(SERVICE) + 7, EMPTY_STRING);
340 return getDefaultDefinitionWithExtends(
341 INTERFACE, yangName, PUBLIC, getEventExtendsString(
342 getSuffixedName(newString.toString(), EVENT_STRING),
343 LISTENER_SERVICE, getSuffixedName(newString.toString(),
344 EVENT_LISTENER_STRING)));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530345 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530346
347 /**
348 * Returns event class definition.
349 *
350 * @param javaName file name
351 * @return definition
352 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530353 private static String getEventDefinition(String javaName, String eventName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 return getDefaultDefinitionWithExtends(
355 CLASS, javaName, PUBLIC, getEventExtendsString(
356 getSuffixedName(javaName, EVENT_TYPE), ABSTRACT_EVENT,
357 eventName));
358
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530359 }
360
361 /**
362 * Returns event listener interface definition.
363 *
364 * @param javaName file name
365 * @return definition
366 */
367 private static String getEventListenerDefinition(String javaName) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530368
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530369 String name = javaName.substring(0, javaName.length() - 8);
370 return getDefaultDefinitionWithExtends(
371 INTERFACE, javaName, PUBLIC, EVENT_LISTENER_STRING +
372 brackets(OPEN_CLOSE_DIAMOND_WITH_VALUE, name, null));
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530373 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530374
375 /**
376 * Returns class definition when class is extending another class.
377 *
378 * @param curNode current node
379 * @param yangName name
380 * @param genFileTypes gen file type
381 * @return class definition
382 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530383 private static String getClassDefinitionForWhenExtended(
384 YangNode curNode, String yangName, int genFileTypes) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530385 JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530386 .getTempJavaCodeFragmentFiles().getBeanTempFiles()
387 .getJavaExtendsListHolder();
388 StringBuilder def = new StringBuilder();
Bharat saraswald14cbe82016-07-14 13:26:18 +0530389 if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530390 def.append(PUBLIC).append(SPACE);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530391 switch (genFileTypes) {
392 case INTERFACE_MASK:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530393 def.append(INTERFACE).append(SPACE).append(yangName)
394 .append(SPACE).append(EXTEND).append(SPACE);
395 def = new StringBuilder(getDefinitionString(def.toString(),
396 holder));
397 break;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530398 case BUILDER_INTERFACE_MASK:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530399 def.append(INTERFACE)
400 .append(SPACE).append(yangName).append(BUILDER)
401 .append(SPACE).append(EXTEND).append(SPACE);
402 def = new StringBuilder(getDefinitionString(
403 def.toString(), holder));
404 break;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530405 case BUILDER_CLASS_MASK:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530406 def.append(STATIC).append(SPACE).append(CLASS)
407 .append(SPACE).append(yangName).append(BUILDER)
408 .append(SPACE).append(EXTEND).append(SPACE);
409 def = new StringBuilder(getDefinitionString(def.toString(),
410 holder));
411 if (!(curNode instanceof RpcNotificationContainer)) {
412 def.append(SPACE).append(IMPLEMENTS).append(SPACE)
413 .append(yangName).append(PERIOD)
414 .append(yangName).append(BUILDER);
Bharat saraswal8beac342016-08-04 02:00:03 +0530415 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530416 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530417 case DEFAULT_CLASS_MASK:
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530418 if (curNode instanceof RpcNotificationContainer) {
419 def.append(CLASS).append(SPACE).append(yangName)
420 .append(OP_PARAM).append(SPACE).append(EXTEND)
421 .append(SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530422 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530423 def.append(CLASS).append(SPACE).append(DEFAULT_CAPS)
424 .append(yangName).append(SPACE).append(EXTEND)
425 .append(SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530426 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530427 def = new StringBuilder(getDefinitionString(def.toString(),
428 holder));
429 def.append(SPACE).append(IMPLEMENTS).append(SPACE)
430 .append(yangName);
431 break;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530432 default:
433 return null;
434 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530435 return def.append(SPACE).append(OPEN_CURLY_BRACKET)
436 .append(NEW_LINE).toString();
Bharat saraswald14cbe82016-07-14 13:26:18 +0530437 }
438 return null;
439 }
440
441 /**
442 * Returns updated class definition.
443 *
444 * @param def current definition
Bharat saraswald14cbe82016-07-14 13:26:18 +0530445 * @param holder extend list holder
446 * @return updated class definition
447 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530448 private static String getDefinitionString(String def,
449 JavaExtendsListHolder holder) {
450 StringBuilder builder = new StringBuilder(def);
451 String str;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530452 for (JavaQualifiedTypeInfoTranslator info : holder.getExtendsList()) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530453 if (!holder.getExtendedClassStore().get(info)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530454 str = info.getClassInfo() + COMMA + SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530455 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530456 str = info.getPkgInfo() + PERIOD + info.getClassInfo() +
457 COMMA + SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530458 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530459 builder.append(str);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530460 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530461 def = builder.toString();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530462 return trimAtLast(def, COMMA);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530463 }
Bharat saraswal97459962016-02-20 21:57:16 +0530464}