blob: 46c9dd180065384bf916f8a27e02237c84e90bba [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;
Bharat saraswalb551aae2016-07-14 15:18:20 +053025import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Vinod Kumar S38046502016-03-23 15:30:27 +053026import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053027import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053028import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053029import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
31import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053032import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053033import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053034import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053035
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalb551aae2016-07-14 15:18:20 +053068import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
69import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053070import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalb551aae2016-07-14 15:18:20 +053071import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
72import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswale2d51d62016-03-23 19:40:35 +053073import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
75import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb551aae2016-07-14 15:18:20 +053076import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
77import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoImpl;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053078import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentedNodesConstructorStart;
Bharat saraswalb551aae2016-07-14 15:18:20 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForManager;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Vinod Kumar S38046502016-03-23 15:30:27 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053083import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
85import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053086import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
87import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053088import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalb551aae2016-07-14 15:18:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
96import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
98import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswale2d51d62016-03-23 19:40:35 +053099import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
100import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530101import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +0530102import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530103import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
104import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530106import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
107import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530108import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530109import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswald72411a2016-04-19 01:00:16 +0530110import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530111import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530112import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530113import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530114import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
115import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530116import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
117import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530118import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530119import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530120import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Bharat saraswald72411a2016-04-19 01:00:16 +0530121import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
122import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530123import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
124import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
125import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530126import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530127import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530128import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530129
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530130/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530131 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530132 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530133public final class JavaFileGenerator {
134
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530135 private JavaFileGenerator() {
136 }
137
138 /**
139 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530140 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530141 * @param file file
142 * @param imports imports for the file
143 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530144 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530145 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530146 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530147 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530148 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530149 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530150 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530151
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530152 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530153 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530154
janani b4a6711a2016-05-17 13:12:22 +0530155 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530156
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530157 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530158
Bharat saraswal2f11f652016-03-25 18:19:46 +0530159 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530160 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530161 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530162 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530163 try {
164 /**
165 * Getter methods.
166 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530167 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
168 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530169 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530170 } catch (IOException e) {
171 throw new IOException("No data found in temporary java code fragment files for " + className
172 + " while interface file generation");
173 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530174 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530175 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530176 }
177
178 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530179 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530180 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530181 * @param file file
182 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530183 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530184 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530185 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530186 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530187 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
188 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530189
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530190 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530191 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530192
janani b4a6711a2016-05-17 13:12:22 +0530193 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530194 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
195
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530196 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530197 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530198 if (isAttrPresent) {
199 try {
200 /**
201 * Getter methods.
202 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530203 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
204 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530205 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530206 /**
207 * Setter methods.
208 */
209 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530210 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
211 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530212 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530213 } catch (IOException e) {
214 throw new IOException("No data found in temporary java code fragment files for " + className
215 + " while builder interface file generation");
216 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530217 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530218 /**
219 * Add build method to builder interface file.
220 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530221 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530222 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530223 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530224
225 /**
226 * Add getters and setters in builder interface.
227 */
228 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530229 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530230 }
231
Bharat saraswale2d51d62016-03-23 19:40:35 +0530232 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530233 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530234 }
235
236 /**
237 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530238 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530239 * @param file file
240 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530241 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530242 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530243 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530244 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530245 public static File generateBuilderClassFile(File file, YangNode curNode,
246 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530247
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530248 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530249 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530250
janani b4a6711a2016-05-17 13:12:22 +0530251 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530252 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
253
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530254 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530255 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530256 boolean isAugmentNode = false;
257 if (curNode instanceof YangAugment) {
258 isAugmentNode = true;
259 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530260
Bharat saraswal2f11f652016-03-25 18:19:46 +0530261 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530262 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530263 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530264 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530265 try {
266 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
268 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530269 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530270 } catch (IOException e) {
271 throw new IOException("No data found in temporary java code fragment files for " + className
272 + " while builder class file generation");
273 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530274
Bharat saraswal2f11f652016-03-25 18:19:46 +0530275 try {
276 /**
277 * Getter methods.
278 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530279 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
280 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530281 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530282 /**
283 * Setter methods.
284 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530285 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
286 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530287 .getBeanTempFiles(), path));
288
289 if (isAugmentNode) {
290 YangAugment augment = (YangAugment) curNode;
291 String augmentNode = getCapitalCase(
292 getCamelCase(augment.getAugmentedNode().getName(), pluginConfig.getConflictResolver()));
293 /**
294 * Constructor.
295 */
296 String constructor = getAugmentedNodesConstructorStart(className, augmentNode)
297 + getDataFromTempFileHandle(AUGMENTE_CLASS_CONSTRUCTOR_MASK,
298 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
299 .getBeanTempFiles(), path);
300
301 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
302 NEW_LINE + NEW_LINE);
303 }
304 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530305 } catch (IOException e) {
306 throw new IOException("No data found in temporary java code fragment files for " + className
307 + " while builder class file generation");
308 }
309 } else {
310 insertDataIntoJavaFile(file, NEW_LINE);
311 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530312 /**
313 * Add default constructor and build method impl.
314 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530315 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
316 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530317 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530318 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530319
320 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530321 * Add methods in builder class.
322 */
323 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530324 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530325 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530326 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530327 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530328 }
329
330 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530331 * Returns generated manager class file for current node.
332 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530333 * @param file file
334 * @param imports imports for the file
335 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530336 * @return builder class file
337 * @throws IOException when fails to write in file
338 */
Bharat saraswalb551aae2016-07-14 15:18:20 +0530339 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530340 throws IOException {
341
342 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
343
janani bdd1314f2016-05-19 17:39:50 +0530344 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530345 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530346
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530347 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530348
349 List<String> methods = new ArrayList<>();
350
Bharat saraswal33dfa012016-05-17 19:59:16 +0530351 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
352 methods.add(addActivateMethod());
353 methods.add(addDeActivateMethod());
354
Bharat saraswalb551aae2016-07-14 15:18:20 +0530355 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
356 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530357
Bharat saraswalb551aae2016-07-14 15:18:20 +0530358 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
359 tempJavaServiceFragmentFiles);
360 try {
361 /**
362 * Getter methods.
363 */
364 methods.add(getOverRideString() +
365 getGetterForClass(rootAttribute, GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
366 /**
367 * Setter methods.
368 */
369 methods.add(getOverRideString() +
370 getSetterForClass(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER)
371 + NEW_LINE);
372
373 methods.add(getAugmentsDataMethodForManager(curNode) + NEW_LINE);
374
Bharat saraswalc0e04842016-05-12 13:16:57 +0530375 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530376 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
377 /**
378 * Rpc methods
379 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530380 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530381 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530382 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530383 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530384
385 } catch (IOException e) {
386 throw new IOException("No data found in temporary java code fragment files for " + className
387 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530388 }
389
390 /**
391 * Add methods in builder class.
392 */
393 for (String method : methods) {
394 insertDataIntoJavaFile(file, method);
395 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530396 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530397 }
398
399 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530400 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530401 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530402 * @param file file
403 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530404 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530405 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530406 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530407 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530408 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530409 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530410 throws IOException {
411
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530412 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530413 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530414
janani b4a6711a2016-05-17 13:12:22 +0530415 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530416 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
417
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530418 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530419
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530420 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530421 boolean isAugmentNode = false;
422 if (curNode instanceof YangAugment) {
423 isAugmentNode = true;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530424 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530425 if (curNode instanceof YangAugmentableNode) {
426 insertDataIntoJavaFile(file, addAugmentationAttribute());
427 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530428 if (isAttrPresent) {
429 /**
430 * Add attribute strings.
431 */
432 try {
433 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530434 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
435 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530436 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530437 } catch (IOException e) {
438 throw new IOException("No data found in temporary java code fragment files for " + className
439 + " while impl class file generation");
440 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530441
Bharat saraswal2f11f652016-03-25 18:19:46 +0530442 try {
443 /**
444 * Getter methods.
445 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530446 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
447 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530448 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530449
450 /**
451 * Hash code method.
452 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530453 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530454 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
455 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530456 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530457 /**
458 * Equals method.
459 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530460 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
461 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
462 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
463 .getBeanTempFiles(), path)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530464 /**
465 * To string method.
466 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530467 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
468 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530469 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530470 + getToStringMethodClose());
471
472 } catch (IOException e) {
473 throw new IOException("No data found in temporary java code fragment files for " + className
474 + " while impl class file generation");
475 }
476 } else {
477 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530478 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530479 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530480
Bharat saraswale2d51d62016-03-23 19:40:35 +0530481 /**
482 * Constructor.
483 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530484 String constructor = getConstructorStart(className, pluginConfig);
485 if (isAugmentNode) {
486 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
487 + BUILDER.toLowerCase() + OBJECT
488 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
489 }
490 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
491 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
492 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530493
494 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530495 } catch (IOException e) {
496 throw new IOException("No data found in temporary java code fragment files for " + className
497 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530498 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530499
Bharat saraswalb551aae2016-07-14 15:18:20 +0530500 if (curNode instanceof YangAugmentableNode) {
501 methods.add(getAddAugmentInfoMethodImpl());
502 methods.add(getAugmentInfoImpl());
503 }
504
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530505 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530506 * Add methods in impl class.
507 */
508 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530509 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530510 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530511
Bharat saraswal33dfa012016-05-17 19:59:16 +0530512 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530513 }
514
515 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530516 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530517 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530518 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530519 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530520 * @param imports imports for file
521 * @return type def class file
522 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530523 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530524 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
525 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530526
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530527 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530528 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530529
janani b4a6711a2016-05-17 13:12:22 +0530530 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530531 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530532
Bharat saraswal33dfa012016-05-17 19:59:16 +0530533 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530534
Bharat saraswale2d51d62016-03-23 19:40:35 +0530535 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530536
Bharat saraswale2d51d62016-03-23 19:40:35 +0530537 /**
538 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530539 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530540 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530541 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530542 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
543 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530544 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530545 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530546 throw new IOException("No data found in temporary java code fragment files for " + className
547 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530548 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530549
Bharat saraswale2d51d62016-03-23 19:40:35 +0530550 /**
551 * Default constructor.
552 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530553 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530554 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530555
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530556 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530557
558 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530559 * Type constructor.
560 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530561 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530562 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
563 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530564
565 /**
566 * Of method.
567 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530568 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530569 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
570 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530571
572 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530573 * Getter method.
574 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530575 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530576 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
577 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530578
579 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530580 * Hash code method.
581 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530582 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530583 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
584 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530585 .getTypeTempFiles(), path)
586 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530587
588 /**
589 * Equals method.
590 */
591 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530592 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530593 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
594 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530595
596 /**
597 * To string method.
598 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530599 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530600 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
601 path) + getToStringMethodClose());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530602
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530603 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530604 /**
605 * From string method.
606 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530607 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530608 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530609 .getTypeTempFiles(), path)
610 + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530611
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530612 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530613 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530614 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530615 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530616
Bharat saraswale2d51d62016-03-23 19:40:35 +0530617 for (String method : methods) {
618 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530619 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530620 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530621
Bharat saraswal33dfa012016-05-17 19:59:16 +0530622 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530623 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530624
625 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530626 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530627 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530628 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530629 * @param curNode current YANG node
630 * @param imports imports for file
631 * @return type def class file
632 * @throws IOException when fails to generate class file
633 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530634 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
635 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530636
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530637 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530638 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530639
janani b4a6711a2016-05-17 13:12:22 +0530640 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530641 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
642
Bharat saraswal33dfa012016-05-17 19:59:16 +0530643 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530644
645 List<String> methods = new ArrayList<>();
646
647 /**
648 * Add attribute strings.
649 */
650 try {
651 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530652 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
653 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530654 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530655 } catch (IOException e) {
656 throw new IOException("No data found in temporary java code fragment files for " + className
657 + " while union class file generation");
658 }
659
660 /**
661 * Default constructor.
662 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530663 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530664 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530665
666 try {
667
668 /**
669 * Type constructor.
670 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530671 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530672 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
673 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530674
675 /**
676 * Of string method.
677 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530678 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530679 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
680 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530681
682 /**
683 * Getter method.
684 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530685 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530686 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
687 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530688
689 /**
690 * Hash code method.
691 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530692 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530693 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
694 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530695 .getTypeTempFiles(), path)
696 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530697
698 /**
699 * Equals method.
700 */
701 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530702 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530703 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
704 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530705
706 /**
707 * To string method.
708 */
709 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530710 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
711 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530712 .getTypeTempFiles(), path)
713 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530714
715 /**
716 * From string method.
717 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530718 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530719 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530720 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
721 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530722 + getFromStringMethodClose());
723
724 } catch (IOException e) {
725 throw new IOException("No data found in temporary java code fragment files for " + className
726 + " while union class file generation");
727 }
728
729 for (String method : methods) {
730 insertDataIntoJavaFile(file, method);
731 }
732 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
733
Bharat saraswal33dfa012016-05-17 19:59:16 +0530734 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530735 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530736
737 /**
738 * Generates class file for type enum.
739 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530740 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530741 * @param curNode current YANG node
742 * @return class file for type enum
743 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530744 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530745 public static File generateEnumClassFile(File file, YangNode curNode)
746 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530747
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530748 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530749 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +0530750
janani b4a6711a2016-05-17 13:12:22 +0530751 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530752 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
753
Bharat saraswal33dfa012016-05-17 19:59:16 +0530754 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +0530755 /**
756 * Add attribute strings.
757 */
758 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530759 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530760 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530761 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530762 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530763 + SEMI_COLAN + NEW_LINE);
764 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530765 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530766 + " while enum class file generation");
767 }
768
769 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530770 * Add an
771 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530772 */
janani b4a6711a2016-05-17 13:12:22 +0530773 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530774
775 /**
776 * Add a constructor for enum.
777 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530778 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530779 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530780
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530781 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
782 .getTempJavaCodeFragmentFiles()
783 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530784 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530785 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +0530786 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530787 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530788 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530789
790 /**
791 * Add a getter method for enum.
792 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530793 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530794 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530795
796 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530797 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530798 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530799 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
800 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530801 + getFromStringMethodClose());
802 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530803 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530804 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530805 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530806
807 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
808
Bharat saraswal33dfa012016-05-17 19:59:16 +0530809 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +0530810 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530811
812 /**
813 * Generates interface file for rpc.
814 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530815 * @param file generated file
816 * @param curNode current YANG node
817 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530818 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530819 * @throws IOException when fails to generate class file
820 */
Bharat saraswalb551aae2016-07-14 15:18:20 +0530821 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530822 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530823
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530824 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530825
Bharat saraswalb551aae2016-07-14 15:18:20 +0530826 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
827 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b4a6711a2016-05-17 13:12:22 +0530828 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530829 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530830 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530831
832 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530833 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
834 tempJavaServiceFragmentFiles);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530835
836 try {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530837 /**
838 * Getter methods.
839 */
840 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
841 javaFileInfo.getPluginConfig()) + NEW_LINE);
842 /**
843 * Setter methods.
844 */
845 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
846 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530847
Bharat saraswalb551aae2016-07-14 15:18:20 +0530848 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
849
Bharat saraswalc0e04842016-05-12 13:16:57 +0530850 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
851 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
852 /**
853 * Rpc methods
854 */
855 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530856 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530857 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530858 } catch (IOException e) {
859 throw new IOException("No data found in temporary java code fragment files for " + className
860 + " while rpc class file generation");
861 }
862
863 for (String method : methods) {
864 insertDataIntoJavaFile(file, method);
865 }
866 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
867
Bharat saraswal33dfa012016-05-17 19:59:16 +0530868 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530869 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530870
871 /**
872 * Generates event file.
873 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530874 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530875 * @param curNode current YANG node
876 * @param imports imports for file
877 * @throws IOException when fails to generate class file
878 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530879 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530880
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530881 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
882 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530883
Bharat saraswal33dfa012016-05-17 19:59:16 +0530884 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
885 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530886
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530887 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
888 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530889 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
890 try {
891 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530892 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +0530893 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
894
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530895 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530896
897 } catch (IOException e) {
898 throw new IOException("No data found in temporary java code fragment files for " + className
899 + " while event class file generation");
900 }
901
902 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
903 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530904 }
905
906 /**
907 * Generates event listener file.
908 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530909 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530910 * @param curNode current YANG node
911 * @param imports imports for file
912 * @throws IOException when fails to generate class file
913 */
914 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
915 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530916
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530917 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
918 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530919
Bharat saraswal33dfa012016-05-17 19:59:16 +0530920 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530921 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530922 validateLineLength(file);
923 }
924
925 /**
926 * Generates event subject's file.
927 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530928 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +0530929 * @param curNode current YANG node
930 * @throws IOException when fails to do IO exceptions
931 */
932 public static void generateEventSubjectFile(File file, YangNode curNode)
933 throws IOException {
934
935 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
936 + EVENT_SUBJECT_NAME_SUFFIX;
937
938 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
939
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530940 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
941 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530942 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
943 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
944
945 insertDataIntoJavaFile(file, NEW_LINE);
946 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530947 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530948
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530949 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530950
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530951 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530952
953 } catch (IOException e) {
954 throw new IOException("No data found in temporary java code fragment files for " + className
955 + " while event class file generation");
956 }
957
958 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
959 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530960 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530961}