blob: ee7ad23790e05e793d7a049ba624a4f43774485e [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
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.onosproject.yangutils.datamodel.YangNode;
Vinod Kumar S38046502016-03-23 15:30:27 +053025import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053027import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053028import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053029import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053030import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053031import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053032
33import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
34import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053035import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
43import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
44import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053064import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053065import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053066import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053067import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
janani b4a6711a2016-05-17 13:12:22 +053068import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
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 saraswalcc1cdab2016-04-16 02:28:25 +053071import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
72import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053073import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053076import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
77import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053078import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
79import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053080import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
82import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053083import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
86import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal33dfa012016-05-17 19:59:16 +053087import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getEventEnumTypeStart;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053088import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentationHolderExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053089import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
90import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053091import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
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;
97import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053098import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal33dfa012016-05-17 19:59:16 +053099import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
101import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
102import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530103import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530104import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald72411a2016-04-19 01:00:16 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530108import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530111
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530112/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530113 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530114 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530115public final class JavaFileGenerator {
116
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530117 private JavaFileGenerator() {
118 }
119
120 /**
121 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530122 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530123 * @param file file
124 * @param imports imports for the file
125 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530126 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530127 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530128 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530129 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530130 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
131 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530132 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530133
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530134 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530135
janani b4a6711a2016-05-17 13:12:22 +0530136 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530137
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530138 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530139
Bharat saraswal2f11f652016-03-25 18:19:46 +0530140 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530141 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530142 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530143 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530144 try {
145 /**
146 * Getter methods.
147 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530148 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
149 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
150 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530151 } catch (IOException e) {
152 throw new IOException("No data found in temporary java code fragment files for " + className
153 + " while interface file generation");
154 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530155 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530156 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530157 }
158
159 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530160 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530161 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530162 * @param file file
163 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530164 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530165 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530166 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530167 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530168 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
169 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530170
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530171 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530172 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530173
janani b4a6711a2016-05-17 13:12:22 +0530174 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530175 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
176
Bharat saraswal33dfa012016-05-17 19:59:16 +0530177 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path, pluginConfig);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530178 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530179 if (isAttrPresent) {
180 try {
181 /**
182 * Getter methods.
183 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530184 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
185 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
186 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530187 /**
188 * Setter methods.
189 */
190 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530191 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
192 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
193 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530194 } catch (IOException e) {
195 throw new IOException("No data found in temporary java code fragment files for " + className
196 + " while builder interface file generation");
197 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530198 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530199 /**
200 * Add build method to builder interface file.
201 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530202 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530203 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530204 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530205
206 /**
207 * Add getters and setters in builder interface.
208 */
209 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530210 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530211 }
212
Bharat saraswale2d51d62016-03-23 19:40:35 +0530213 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530214 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530215 }
216
217 /**
218 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530219 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530220 * @param file file
221 * @param imports imports for the file
222 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530223 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530224 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530225 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530226 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530227 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530228 boolean isAttrPresent)
229 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530230
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530231 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530232 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530233
janani b4a6711a2016-05-17 13:12:22 +0530234 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530235 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
236
Bharat saraswal33dfa012016-05-17 19:59:16 +0530237 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path, pluginConfig);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530238
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530239 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530240
Bharat saraswal2f11f652016-03-25 18:19:46 +0530241 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530242 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530243 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530244 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530245 try {
246 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530247 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
248 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
249 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530250 } catch (IOException e) {
251 throw new IOException("No data found in temporary java code fragment files for " + className
252 + " while builder class file generation");
253 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530254
Bharat saraswal2f11f652016-03-25 18:19:46 +0530255 try {
256 /**
257 * Getter methods.
258 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530259 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
260 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
261 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530262 /**
263 * Setter methods.
264 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530265 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
266 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
267 .getBeanTempFiles()) +
268 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530269 } catch (IOException e) {
270 throw new IOException("No data found in temporary java code fragment files for " + className
271 + " while builder class file generation");
272 }
273 } else {
274 insertDataIntoJavaFile(file, NEW_LINE);
275 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530276 /**
277 * Add default constructor and build method impl.
278 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530279 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
280 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530281 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530282 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530283
284 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530285 * Add methods in builder class.
286 */
287 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530288 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530289 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530290 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530291 }
292
293 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530294 * Returns generated manager class file for current node.
295 *
296 * @param file file
297 * @param imports imports for the file
298 * @param curNode current YANG node
299 * @param isAttrPresent if any attribute is present or not
300 * @return builder class file
301 * @throws IOException when fails to write in file
302 */
303 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
304 boolean isAttrPresent)
305 throws IOException {
306
307 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
308
janani b4a6711a2016-05-17 13:12:22 +0530309 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530310
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530311 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530312
313 List<String> methods = new ArrayList<>();
314
Bharat saraswal33dfa012016-05-17 19:59:16 +0530315 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
316 methods.add(addActivateMethod());
317 methods.add(addDeActivateMethod());
318
Bharat saraswalc0e04842016-05-12 13:16:57 +0530319 try {
320 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530321 /**
322 * Getter methods.
323 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530324 methods.add(
325 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
326 ((TempJavaCodeFragmentFilesContainer) curNode)
327 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530328 /**
329 * Setter methods.
330 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530331 methods.add(
332 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
333 ((TempJavaCodeFragmentFilesContainer) curNode)
334 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
335 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530336
Bharat saraswalc0e04842016-05-12 13:16:57 +0530337 }
338 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530339 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
340 /**
341 * Rpc methods
342 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530343 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
344 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530345 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530346 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530347
348 } catch (IOException e) {
349 throw new IOException("No data found in temporary java code fragment files for " + className
350 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530351 }
352
353 /**
354 * Add methods in builder class.
355 */
356 for (String method : methods) {
357 insertDataIntoJavaFile(file, method);
358 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530359 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530360 }
361
362 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530363 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530364 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530365 * @param file file
366 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530367 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530368 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530369 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530370 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530371 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530372 throws IOException {
373
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530374 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530375 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530376
janani b4a6711a2016-05-17 13:12:22 +0530377 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530378 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
379
Bharat saraswal33dfa012016-05-17 19:59:16 +0530380 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path, pluginConfig);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530381
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530382 List<String> methods = new ArrayList<>();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530383
384 TempJavaCodeFragmentFiles javaCodeFragmentFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
385 .getTempJavaCodeFragmentFiles();
386 boolean isAugmentationHolderExtended = isAugmentationHolderExtended(
387 javaCodeFragmentFiles.getBeanTempFiles().getJavaExtendsListHolder().getExtendsList());
388 /**
389 * Add attribute for augmented info's list.
390 */
391 if (isAugmentationHolderExtended) {
392 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
393 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530394 if (isAttrPresent) {
395 /**
396 * Add attribute strings.
397 */
398 try {
399 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530400 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
401 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
402 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530403 } catch (IOException e) {
404 throw new IOException("No data found in temporary java code fragment files for " + className
405 + " while impl class file generation");
406 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530407
Bharat saraswal2f11f652016-03-25 18:19:46 +0530408 insertDataIntoJavaFile(file, NEW_LINE);
409 try {
410 /**
411 * Getter methods.
412 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530413 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
414 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
415 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530416
417 /**
418 * Hash code method.
419 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530420 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530421 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
422 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530423 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530424 /**
425 * Equals method.
426 */
427 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530428 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
429 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
430 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530431 /**
432 * To string method.
433 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530434 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
435 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
436 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530437 + getToStringMethodClose());
438
439 } catch (IOException e) {
440 throw new IOException("No data found in temporary java code fragment files for " + className
441 + " while impl class file generation");
442 }
443 } else {
444 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530445 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530446 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530447
Bharat saraswale2d51d62016-03-23 19:40:35 +0530448 /**
449 * Constructor.
450 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530451 String constructor =
452 getConstructorStart(className, pluginConfig) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
453 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
454 .getBeanTempFiles());
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530455
456 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530457 } catch (IOException e) {
458 throw new IOException("No data found in temporary java code fragment files for " + className
459 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530460 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530461
462 /**
463 * Add method for augment info's list.
464 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530465 if (isAugmentationHolderExtended) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530466 methods.add(getAddAugmentInfoMethodImpl());
467 methods.add(getAugmentInfoListImpl());
468 methods.add(getRemoveAugmentationImpl());
469 }
470
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530471 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530472 * Add methods in impl class.
473 */
474 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530475 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530476 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530477 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530478
Bharat saraswal33dfa012016-05-17 19:59:16 +0530479 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530480 }
481
482 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530483 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530484 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530485 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530486 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530487 * @param imports imports for file
488 * @return type def class file
489 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530490 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530491 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
492 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530493
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530494 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530495 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530496
janani b4a6711a2016-05-17 13:12:22 +0530497 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530498 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530499
Bharat saraswal33dfa012016-05-17 19:59:16 +0530500 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530501
Bharat saraswale2d51d62016-03-23 19:40:35 +0530502 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530503
Bharat saraswale2d51d62016-03-23 19:40:35 +0530504 /**
505 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530506 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530507 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530508 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530509 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
510 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
511 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530512 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530513 throw new IOException("No data found in temporary java code fragment files for " + className
514 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530515 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530516
Bharat saraswale2d51d62016-03-23 19:40:35 +0530517 /**
518 * Default constructor.
519 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530520 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530521 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530522
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530523 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530524
525 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530526 * Type constructor.
527 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530528 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
529 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530530
531 /**
532 * Of method.
533 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530534 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
535 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530536
537 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530538 * Getter method.
539 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530540 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
541 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530542
543 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530544 * Hash code method.
545 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530546 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530547 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
548 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
549 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530550 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530551
552 /**
553 * Equals method.
554 */
555 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530556 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
557 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530558
559 /**
560 * To string method.
561 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530562 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
563 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530564 + getToStringMethodClose());
565
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530566 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530567 /**
568 * From string method.
569 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530570 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530571 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
572 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530573
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530574 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530575 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530576 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530577 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530578
Bharat saraswale2d51d62016-03-23 19:40:35 +0530579 for (String method : methods) {
580 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530581 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530582 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530583
Bharat saraswal33dfa012016-05-17 19:59:16 +0530584 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530585 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530586
587 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530588 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530589 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530590 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530591 * @param curNode current YANG node
592 * @param imports imports for file
593 * @return type def class file
594 * @throws IOException when fails to generate class file
595 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530596 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
597 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530598
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530599 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530600 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530601
janani b4a6711a2016-05-17 13:12:22 +0530602 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530603 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
604
Bharat saraswal33dfa012016-05-17 19:59:16 +0530605 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530606
607 List<String> methods = new ArrayList<>();
608
609 /**
610 * Add attribute strings.
611 */
612 try {
613 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530614 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
615 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
616 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530617 } catch (IOException e) {
618 throw new IOException("No data found in temporary java code fragment files for " + className
619 + " while union class file generation");
620 }
621
622 /**
623 * Default constructor.
624 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530625 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530626 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530627
628 try {
629
630 /**
631 * Type constructor.
632 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530633 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
634 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530635
636 /**
637 * Of string method.
638 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530639 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
640 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530641
642 /**
643 * Getter method.
644 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530645 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
646 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530647
648 /**
649 * Hash code method.
650 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530651 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530652 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
653 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
654 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530655 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530656
657 /**
658 * Equals method.
659 */
660 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530661 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
662 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530663
664 /**
665 * To string method.
666 */
667 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530668 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
669 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
670 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530671
672 /**
673 * From string method.
674 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530675 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530676 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
677 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530678 + getFromStringMethodClose());
679
680 } catch (IOException e) {
681 throw new IOException("No data found in temporary java code fragment files for " + className
682 + " while union class file generation");
683 }
684
685 for (String method : methods) {
686 insertDataIntoJavaFile(file, method);
687 }
688 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
689
Bharat saraswal33dfa012016-05-17 19:59:16 +0530690 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530691 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530692
693 /**
694 * Generates class file for type enum.
695 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530696 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530697 * @param curNode current YANG node
698 * @return class file for type enum
699 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530700 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530701 public static File generateEnumClassFile(File file, YangNode curNode)
702 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530703
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530704 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530705 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +0530706
janani b4a6711a2016-05-17 13:12:22 +0530707 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530708 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
709
Bharat saraswal33dfa012016-05-17 19:59:16 +0530710 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +0530711 /**
712 * Add attribute strings.
713 */
714 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530715 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530716 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530717 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
718 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530719 + SEMI_COLAN + NEW_LINE);
720 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530721 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530722 + " while enum class file generation");
723 }
724
725 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530726 * Add an
727 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530728 */
janani b4a6711a2016-05-17 13:12:22 +0530729 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530730
731 /**
732 * Add a constructor for enum.
733 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530734 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530735 + getEnumsConstrcutor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530736
737 TempJavaEnumerationFragmentFiles enumFragFiles =
738 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
739 .getEnumerationTempFiles();
740 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530741 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +0530742 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530743 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530744 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530745
746 /**
747 * Add a getter method for enum.
748 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530749 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530750 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530751
752 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530753 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530754 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
755 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
756 .getEnumerationTempFiles())
757 + getFromStringMethodClose());
758 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530759 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530760 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530761 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530762
763 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
764
Bharat saraswal33dfa012016-05-17 19:59:16 +0530765 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +0530766 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530767
768 /**
769 * Generates interface file for rpc.
770 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530771 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530772 * @param curNode current YANG node
773 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530774 * @param isAttributePresent is attribute present
775 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530776 * @throws IOException when fails to generate class file
777 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530778 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
779 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530780 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530781
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530782 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530783
janani b4a6711a2016-05-17 13:12:22 +0530784 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530785 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530786
787 List<String> methods = new ArrayList<>();
788
789 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530790 if (isAttributePresent) {
791
792 /**
793 * Getter methods.
794 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530795 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530796 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
797 .getServiceTempFiles()));
798 /**
799 * Setter methods.
800 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530801 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530802 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
803 .getServiceTempFiles()));
804 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530805 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
806 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
807 /**
808 * Rpc methods
809 */
810 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
811 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
812 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530813 } catch (IOException e) {
814 throw new IOException("No data found in temporary java code fragment files for " + className
815 + " while rpc class file generation");
816 }
817
818 for (String method : methods) {
819 insertDataIntoJavaFile(file, method);
820 }
821 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
822
Bharat saraswal33dfa012016-05-17 19:59:16 +0530823 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530824 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530825
826 /**
827 * Generates event file.
828 *
829 * @param file generated file
830 * @param curNode current YANG node
831 * @param imports imports for file
832 * @throws IOException when fails to generate class file
833 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530834 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530835
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530836 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530837 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530838 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530839
Bharat saraswal33dfa012016-05-17 19:59:16 +0530840 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
841 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530842
Bharat saraswal33dfa012016-05-17 19:59:16 +0530843 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
844 try {
845 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
846 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles), COMMA)
847 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
848
849 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles));
850
851 } catch (IOException e) {
852 throw new IOException("No data found in temporary java code fragment files for " + className
853 + " while event class file generation");
854 }
855
856 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
857 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530858 }
859
860 /**
861 * Generates event listener file.
862 *
863 * @param file generated file
864 * @param curNode current YANG node
865 * @param imports imports for file
866 * @throws IOException when fails to generate class file
867 */
868 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
869 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530870
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530871 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530872 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530873 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530874
Bharat saraswal33dfa012016-05-17 19:59:16 +0530875 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530876 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530877 validateLineLength(file);
878 }
879
880 /**
881 * Generates event subject's file.
882 *
883 * @param file file handle
884 * @param curNode current YANG node
885 * @throws IOException when fails to do IO exceptions
886 */
887 public static void generateEventSubjectFile(File file, YangNode curNode)
888 throws IOException {
889
890 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
891 + EVENT_SUBJECT_NAME_SUFFIX;
892
893 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
894
895 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
896 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
897
898 insertDataIntoJavaFile(file, NEW_LINE);
899 try {
900 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles));
901
902 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles));
903
904 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles));
905
906 } catch (IOException e) {
907 throw new IOException("No data found in temporary java code fragment files for " + className
908 + " while event class file generation");
909 }
910
911 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
912 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530913 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530914}