blob: 49315f3978bb988e8d45bb056e5aa9a75c36af75 [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
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Bharat saraswalb1170bd2016-07-14 13:26:18 +053024import org.onosproject.yangutils.datamodel.YangAugment;
Vinod Kumar S38046502016-03-23 15:30:27 +053025import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053026import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053027import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
29import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053030import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053031import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053032import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053033
34import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
38import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
44import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
45import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053066import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053067import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053068import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053069import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
70import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053071import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentedNodesConstructorStart;
Vinod Kumar S38046502016-03-23 15:30:27 +053072import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053073import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
76import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053077import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
78import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053080import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
81import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Vinod Kumar S38046502016-03-23 15:30:27 +053083import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
84import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053085import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
87import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053088import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +053089import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053090import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
91import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +053092import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053093import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
94import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +053095import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswale2d51d62016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswald72411a2016-04-19 01:00:16 +053097import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal33dfa012016-05-17 19:59:16 +053098import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +053099import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530101import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
102import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530103import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
104import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530105import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530106import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530107import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Bharat saraswald72411a2016-04-19 01:00:16 +0530108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530110import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530116
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530117/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530118 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530119 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530120public final class JavaFileGenerator {
121
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530122 private JavaFileGenerator() {
123 }
124
125 /**
126 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530127 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530128 * @param file file
129 * @param imports imports for the file
130 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530131 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530132 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530133 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530134 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530135 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530136 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530137 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530138
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530139 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530140 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530141
janani b4a6711a2016-05-17 13:12:22 +0530142 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530143
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530144 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530145
Bharat saraswal2f11f652016-03-25 18:19:46 +0530146 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530147 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530148 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530149 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530150 try {
151 /**
152 * Getter methods.
153 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530154 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
155 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530156 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530157 } catch (IOException e) {
158 throw new IOException("No data found in temporary java code fragment files for " + className
159 + " while interface file generation");
160 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530161 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530162 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530163 }
164
165 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530166 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530167 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530168 * @param file file
169 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530170 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530171 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530172 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530173 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530174 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
175 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530176
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530177 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530178 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530179
janani b4a6711a2016-05-17 13:12:22 +0530180 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530181 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
182
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530183 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530184 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530185 if (isAttrPresent) {
186 try {
187 /**
188 * Getter methods.
189 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530190 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
191 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530192 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530193 /**
194 * Setter methods.
195 */
196 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530197 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
198 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530199 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530200 } catch (IOException e) {
201 throw new IOException("No data found in temporary java code fragment files for " + className
202 + " while builder interface file generation");
203 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530204 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530205 /**
206 * Add build method to builder interface file.
207 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530208 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530209 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530210 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530211
212 /**
213 * Add getters and setters in builder interface.
214 */
215 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530216 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530217 }
218
Bharat saraswale2d51d62016-03-23 19:40:35 +0530219 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530220 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530221 }
222
223 /**
224 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530225 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530226 * @param file file
227 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530228 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530229 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530230 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530231 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530232 public static File generateBuilderClassFile(File file, YangNode curNode,
233 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530234
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530235 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530236 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530237
janani b4a6711a2016-05-17 13:12:22 +0530238 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530239 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
240
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530241 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530242 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530243 boolean isAugmentNode = false;
244 if (curNode instanceof YangAugment) {
245 isAugmentNode = true;
246 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530247
Bharat saraswal2f11f652016-03-25 18:19:46 +0530248 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530249 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530250 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530251 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530252 try {
253 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530254 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
255 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530256 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530257 } catch (IOException e) {
258 throw new IOException("No data found in temporary java code fragment files for " + className
259 + " while builder class file generation");
260 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530261
Bharat saraswal2f11f652016-03-25 18:19:46 +0530262 try {
263 /**
264 * Getter methods.
265 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530266 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
267 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530268 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530269 /**
270 * Setter methods.
271 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530272 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
273 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530274 .getBeanTempFiles(), path));
275
276 if (isAugmentNode) {
277 YangAugment augment = (YangAugment) curNode;
278 String augmentNode = getCapitalCase(
279 getCamelCase(augment.getAugmentedNode().getName(), pluginConfig.getConflictResolver()));
280 /**
281 * Constructor.
282 */
283 String constructor = getAugmentedNodesConstructorStart(className, augmentNode)
284 + getDataFromTempFileHandle(AUGMENTE_CLASS_CONSTRUCTOR_MASK,
285 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
286 .getBeanTempFiles(), path);
287
288 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
289 NEW_LINE + NEW_LINE);
290 }
291 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530292 } catch (IOException e) {
293 throw new IOException("No data found in temporary java code fragment files for " + className
294 + " while builder class file generation");
295 }
296 } else {
297 insertDataIntoJavaFile(file, NEW_LINE);
298 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530299 /**
300 * Add default constructor and build method impl.
301 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530302 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
303 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530304 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530305 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530306
307 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530308 * Add methods in builder class.
309 */
310 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530311 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530312 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530313 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530314 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530315 }
316
317 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530318 * Returns generated manager class file for current node.
319 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530320 * @param file file
321 * @param imports imports for the file
322 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530323 * @param isAttrPresent if any attribute is present or not
324 * @return builder class file
325 * @throws IOException when fails to write in file
326 */
327 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530328 boolean isAttrPresent)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530329 throws IOException {
330
331 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
332
janani bdd1314f2016-05-19 17:39:50 +0530333 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530334 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530335
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530336 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530337
338 List<String> methods = new ArrayList<>();
339
Bharat saraswal33dfa012016-05-17 19:59:16 +0530340 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
341 methods.add(addActivateMethod());
342 methods.add(addDeActivateMethod());
343
Bharat saraswalc0e04842016-05-12 13:16:57 +0530344 try {
345 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530346 /**
347 * Getter methods.
348 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530349 methods.add(
350 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
351 ((TempJavaCodeFragmentFilesContainer) curNode)
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530352 .getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530353 /**
354 * Setter methods.
355 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530356 methods.add(
357 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
358 ((TempJavaCodeFragmentFilesContainer) curNode)
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530359 .getTempJavaCodeFragmentFiles().getServiceTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530360 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530361
Bharat saraswalc0e04842016-05-12 13:16:57 +0530362 }
363 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530364 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
365 /**
366 * Rpc methods
367 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530368 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530369 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530370 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530371 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530372
373 } catch (IOException e) {
374 throw new IOException("No data found in temporary java code fragment files for " + className
375 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530376 }
377
378 /**
379 * Add methods in builder class.
380 */
381 for (String method : methods) {
382 insertDataIntoJavaFile(file, method);
383 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530384 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530385 }
386
387 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530388 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530389 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530390 * @param file file
391 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530392 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530393 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530394 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530395 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530396 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530397 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530398 throws IOException {
399
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530400 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530401 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530402
janani b4a6711a2016-05-17 13:12:22 +0530403 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530404 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
405
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530406 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530407
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530408 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530409 boolean isAugmentNode = false;
410 if (curNode instanceof YangAugment) {
411 isAugmentNode = true;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530412 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530413
Bharat saraswal2f11f652016-03-25 18:19:46 +0530414 if (isAttrPresent) {
415 /**
416 * Add attribute strings.
417 */
418 try {
419 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530420 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
421 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530422 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530423 } catch (IOException e) {
424 throw new IOException("No data found in temporary java code fragment files for " + className
425 + " while impl class file generation");
426 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530427
Bharat saraswal2f11f652016-03-25 18:19:46 +0530428 try {
429 /**
430 * Getter methods.
431 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530432 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
433 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530434 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530435
436 /**
437 * Hash code method.
438 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530439 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530440 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
441 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530442 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530443 /**
444 * Equals method.
445 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530446 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
447 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
448 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
449 .getBeanTempFiles(), path)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530450 /**
451 * To string method.
452 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530453 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
454 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530455 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530456 + getToStringMethodClose());
457
458 } catch (IOException e) {
459 throw new IOException("No data found in temporary java code fragment files for " + className
460 + " while impl class file generation");
461 }
462 } else {
463 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530464 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530465 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530466
Bharat saraswale2d51d62016-03-23 19:40:35 +0530467 /**
468 * Constructor.
469 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530470 String constructor = getConstructorStart(className, pluginConfig);
471 if (isAugmentNode) {
472 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
473 + BUILDER.toLowerCase() + OBJECT
474 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
475 }
476 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
477 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
478 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530479
480 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530481 } catch (IOException e) {
482 throw new IOException("No data found in temporary java code fragment files for " + className
483 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530484 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530485
486 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530487 * Add methods in impl class.
488 */
489 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530490 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530491 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530492
Bharat saraswal33dfa012016-05-17 19:59:16 +0530493 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530494 }
495
496 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530497 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530498 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530499 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530500 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530501 * @param imports imports for file
502 * @return type def class file
503 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530504 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530505 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
506 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530507
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530508 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530509 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530510
janani b4a6711a2016-05-17 13:12:22 +0530511 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530512 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530513
Bharat saraswal33dfa012016-05-17 19:59:16 +0530514 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530515
Bharat saraswale2d51d62016-03-23 19:40:35 +0530516 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530517
Bharat saraswale2d51d62016-03-23 19:40:35 +0530518 /**
519 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530520 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530521 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530522 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530523 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
524 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530525 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530526 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530527 throw new IOException("No data found in temporary java code fragment files for " + className
528 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530529 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530530
Bharat saraswale2d51d62016-03-23 19:40:35 +0530531 /**
532 * Default constructor.
533 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530534 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530535 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530536
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530537 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530538
539 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530540 * Type constructor.
541 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530542 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530543 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
544 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530545
546 /**
547 * Of method.
548 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530549 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530550 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
551 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530552
553 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530554 * Getter method.
555 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530556 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530557 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
558 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530559
560 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530561 * Hash code method.
562 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530563 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530564 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
565 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530566 .getTypeTempFiles(), path)
567 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530568
569 /**
570 * Equals method.
571 */
572 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530573 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530574 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
575 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530576
577 /**
578 * To string method.
579 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530580 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530581 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
582 path) + getToStringMethodClose());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530583
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530584 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530585 /**
586 * From string method.
587 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530588 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530589 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530590 .getTypeTempFiles(), path)
591 + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530592
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530593 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530594 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530595 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530596 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530597
Bharat saraswale2d51d62016-03-23 19:40:35 +0530598 for (String method : methods) {
599 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530600 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530601 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530602
Bharat saraswal33dfa012016-05-17 19:59:16 +0530603 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530604 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530605
606 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530607 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530608 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530609 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530610 * @param curNode current YANG node
611 * @param imports imports for file
612 * @return type def class file
613 * @throws IOException when fails to generate class file
614 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530615 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
616 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530617
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530618 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530619 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530620
janani b4a6711a2016-05-17 13:12:22 +0530621 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530622 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
623
Bharat saraswal33dfa012016-05-17 19:59:16 +0530624 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530625
626 List<String> methods = new ArrayList<>();
627
628 /**
629 * Add attribute strings.
630 */
631 try {
632 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530633 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
634 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530635 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530636 } catch (IOException e) {
637 throw new IOException("No data found in temporary java code fragment files for " + className
638 + " while union class file generation");
639 }
640
641 /**
642 * Default constructor.
643 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530644 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530645 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530646
647 try {
648
649 /**
650 * Type constructor.
651 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530652 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530653 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
654 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530655
656 /**
657 * Of string method.
658 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530659 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530660 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
661 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530662
663 /**
664 * Getter method.
665 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530666 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530667 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
668 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530669
670 /**
671 * Hash code method.
672 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530673 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530674 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
675 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530676 .getTypeTempFiles(), path)
677 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530678
679 /**
680 * Equals method.
681 */
682 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530683 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530684 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
685 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530686
687 /**
688 * To string method.
689 */
690 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530691 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
692 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530693 .getTypeTempFiles(), path)
694 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530695
696 /**
697 * From string method.
698 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530699 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530700 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530701 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
702 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530703 + getFromStringMethodClose());
704
705 } catch (IOException e) {
706 throw new IOException("No data found in temporary java code fragment files for " + className
707 + " while union class file generation");
708 }
709
710 for (String method : methods) {
711 insertDataIntoJavaFile(file, method);
712 }
713 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
714
Bharat saraswal33dfa012016-05-17 19:59:16 +0530715 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530716 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530717
718 /**
719 * Generates class file for type enum.
720 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530721 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530722 * @param curNode current YANG node
723 * @return class file for type enum
724 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530725 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530726 public static File generateEnumClassFile(File file, YangNode curNode)
727 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530728
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530729 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530730 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +0530731
janani b4a6711a2016-05-17 13:12:22 +0530732 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530733 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
734
Bharat saraswal33dfa012016-05-17 19:59:16 +0530735 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +0530736 /**
737 * Add attribute strings.
738 */
739 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530740 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530741 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530742 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530743 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530744 + SEMI_COLAN + NEW_LINE);
745 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530746 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530747 + " while enum class file generation");
748 }
749
750 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530751 * Add an
752 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530753 */
janani b4a6711a2016-05-17 13:12:22 +0530754 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530755
756 /**
757 * Add a constructor for enum.
758 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530759 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530760 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530761
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530762 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
763 .getTempJavaCodeFragmentFiles()
764 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530765 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530766 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +0530767 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530768 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530769 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530770
771 /**
772 * Add a getter method for enum.
773 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530774 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530775 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530776
777 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530778 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530779 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530780 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
781 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530782 + getFromStringMethodClose());
783 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530784 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530785 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530786 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530787
788 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
789
Bharat saraswal33dfa012016-05-17 19:59:16 +0530790 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +0530791 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530792
793 /**
794 * Generates interface file for rpc.
795 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530796 * @param file generated file
797 * @param curNode current YANG node
798 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530799 * @param isAttributePresent is attribute present
800 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530801 * @throws IOException when fails to generate class file
802 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530803 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530804 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530805 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530806
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530807 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530808
janani b4a6711a2016-05-17 13:12:22 +0530809 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530810 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530811 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530812
813 List<String> methods = new ArrayList<>();
814
815 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530816 if (isAttributePresent) {
817
818 /**
819 * Getter methods.
820 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530821 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530822 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530823 .getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530824 /**
825 * Setter methods.
826 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530827 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530828 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530829 .getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530830 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530831 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
832 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
833 /**
834 * Rpc methods
835 */
836 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530837 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530838 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530839 } catch (IOException e) {
840 throw new IOException("No data found in temporary java code fragment files for " + className
841 + " while rpc class file generation");
842 }
843
844 for (String method : methods) {
845 insertDataIntoJavaFile(file, method);
846 }
847 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
848
Bharat saraswal33dfa012016-05-17 19:59:16 +0530849 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530850 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530851
852 /**
853 * Generates event file.
854 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530855 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530856 * @param curNode current YANG node
857 * @param imports imports for file
858 * @throws IOException when fails to generate class file
859 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530860 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530861
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530862 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
863 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530864
Bharat saraswal33dfa012016-05-17 19:59:16 +0530865 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
866 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530867
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530868 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
869 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530870 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
871 try {
872 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530873 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +0530874 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
875
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530876 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530877
878 } catch (IOException e) {
879 throw new IOException("No data found in temporary java code fragment files for " + className
880 + " while event class file generation");
881 }
882
883 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
884 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530885 }
886
887 /**
888 * Generates event listener file.
889 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530890 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530891 * @param curNode current YANG node
892 * @param imports imports for file
893 * @throws IOException when fails to generate class file
894 */
895 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
896 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530897
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530898 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
899 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530900
Bharat saraswal33dfa012016-05-17 19:59:16 +0530901 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530902 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530903 validateLineLength(file);
904 }
905
906 /**
907 * Generates event subject's file.
908 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530909 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +0530910 * @param curNode current YANG node
911 * @throws IOException when fails to do IO exceptions
912 */
913 public static void generateEventSubjectFile(File file, YangNode curNode)
914 throws IOException {
915
916 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
917 + EVENT_SUBJECT_NAME_SUFFIX;
918
919 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
920
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530921 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
922 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530923 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
924 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
925
926 insertDataIntoJavaFile(file, NEW_LINE);
927 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530928 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530929
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530930 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530931
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530932 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530933
934 } catch (IOException e) {
935 throw new IOException("No data found in temporary java code fragment files for " + className
936 + " while event class file generation");
937 }
938
939 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
940 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530941 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530942}