blob: c082d26c0d8035e7cb170eed645d597b59ef68eb [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;
janani bdd1314f2016-05-19 17:39:50 +0530100import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530101import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
102import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
103import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530104import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530105import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald72411a2016-04-19 01:00:16 +0530107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530112
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530113/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530114 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530115 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530116public final class JavaFileGenerator {
117
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530118 private JavaFileGenerator() {
119 }
120
121 /**
122 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530123 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530124 * @param file file
125 * @param imports imports for the file
126 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530127 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530128 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530129 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530130 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530131 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
132 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530133 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530134
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530135 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530136
janani b4a6711a2016-05-17 13:12:22 +0530137 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530138
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530139 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530140
Bharat saraswal2f11f652016-03-25 18:19:46 +0530141 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530142 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530143 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530144 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530145 try {
146 /**
147 * Getter methods.
148 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530149 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
150 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
151 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530152 } catch (IOException e) {
153 throw new IOException("No data found in temporary java code fragment files for " + className
154 + " while interface file generation");
155 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530156 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530157 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530158 }
159
160 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530161 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530162 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530163 * @param file file
164 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530165 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530166 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530167 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530168 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530169 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
170 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530171
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530172 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530173 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530174
janani b4a6711a2016-05-17 13:12:22 +0530175 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530176 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
177
Bharat saraswal33dfa012016-05-17 19:59:16 +0530178 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path, pluginConfig);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530179 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530180 if (isAttrPresent) {
181 try {
182 /**
183 * Getter methods.
184 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
186 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
187 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530188 /**
189 * Setter methods.
190 */
191 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530192 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
193 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
194 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530195 } catch (IOException e) {
196 throw new IOException("No data found in temporary java code fragment files for " + className
197 + " while builder interface file generation");
198 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530199 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530200 /**
201 * Add build method to builder interface file.
202 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530203 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530204 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530205 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530206
207 /**
208 * Add getters and setters in builder interface.
209 */
210 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530211 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530212 }
213
Bharat saraswale2d51d62016-03-23 19:40:35 +0530214 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530215 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530216 }
217
218 /**
219 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530220 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530221 * @param file file
222 * @param imports imports for the file
223 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530224 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530225 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530226 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530227 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530228 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530229 boolean isAttrPresent)
230 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530231
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530232 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530233 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530234
janani b4a6711a2016-05-17 13:12:22 +0530235 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530236 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
237
Bharat saraswal33dfa012016-05-17 19:59:16 +0530238 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path, pluginConfig);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530239
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530240 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530241
Bharat saraswal2f11f652016-03-25 18:19:46 +0530242 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530243 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530244 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530245 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530246 try {
247 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530248 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
249 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
250 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530251 } catch (IOException e) {
252 throw new IOException("No data found in temporary java code fragment files for " + className
253 + " while builder class file generation");
254 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530255
Bharat saraswal2f11f652016-03-25 18:19:46 +0530256 try {
257 /**
258 * Getter methods.
259 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530260 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
261 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
262 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530263 /**
264 * Setter methods.
265 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530266 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
267 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
268 .getBeanTempFiles()) +
269 NEW_LINE);
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 }
274 } else {
275 insertDataIntoJavaFile(file, NEW_LINE);
276 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530277 /**
278 * Add default constructor and build method impl.
279 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530280 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
281 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530282 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530283 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530284
285 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530286 * Add methods in builder class.
287 */
288 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530289 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530290 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530291 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530292 }
293
294 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530295 * Returns generated manager class file for current node.
296 *
297 * @param file file
298 * @param imports imports for the file
299 * @param curNode current YANG node
300 * @param isAttrPresent if any attribute is present or not
301 * @return builder class file
302 * @throws IOException when fails to write in file
303 */
304 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
305 boolean isAttrPresent)
306 throws IOException {
307
308 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
309
janani bdd1314f2016-05-19 17:39:50 +0530310 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530311
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530312 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530313
314 List<String> methods = new ArrayList<>();
315
Bharat saraswal33dfa012016-05-17 19:59:16 +0530316 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
317 methods.add(addActivateMethod());
318 methods.add(addDeActivateMethod());
319
Bharat saraswalc0e04842016-05-12 13:16:57 +0530320 try {
321 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530322 /**
323 * Getter methods.
324 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530325 methods.add(
326 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
327 ((TempJavaCodeFragmentFilesContainer) curNode)
328 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530329 /**
330 * Setter methods.
331 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530332 methods.add(
333 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
334 ((TempJavaCodeFragmentFilesContainer) curNode)
335 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
336 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530337
Bharat saraswalc0e04842016-05-12 13:16:57 +0530338 }
339 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530340 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
341 /**
342 * Rpc methods
343 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530344 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
345 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530346 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530347 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530348
349 } catch (IOException e) {
350 throw new IOException("No data found in temporary java code fragment files for " + className
351 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530352 }
353
354 /**
355 * Add methods in builder class.
356 */
357 for (String method : methods) {
358 insertDataIntoJavaFile(file, method);
359 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530360 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530361 }
362
363 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530364 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530365 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530366 * @param file file
367 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530368 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530369 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530370 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530371 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530372 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530373 throws IOException {
374
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530375 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530376 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530377
janani b4a6711a2016-05-17 13:12:22 +0530378 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530379 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
380
Bharat saraswal33dfa012016-05-17 19:59:16 +0530381 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path, pluginConfig);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530382
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530383 List<String> methods = new ArrayList<>();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530384
385 TempJavaCodeFragmentFiles javaCodeFragmentFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
386 .getTempJavaCodeFragmentFiles();
387 boolean isAugmentationHolderExtended = isAugmentationHolderExtended(
388 javaCodeFragmentFiles.getBeanTempFiles().getJavaExtendsListHolder().getExtendsList());
389 /**
390 * Add attribute for augmented info's list.
391 */
392 if (isAugmentationHolderExtended) {
393 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
394 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530395 if (isAttrPresent) {
396 /**
397 * Add attribute strings.
398 */
399 try {
400 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530401 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
402 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
403 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530404 } catch (IOException e) {
405 throw new IOException("No data found in temporary java code fragment files for " + className
406 + " while impl class file generation");
407 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530408
Bharat saraswal2f11f652016-03-25 18:19:46 +0530409 insertDataIntoJavaFile(file, NEW_LINE);
410 try {
411 /**
412 * Getter methods.
413 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530414 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
415 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
416 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530417
418 /**
419 * Hash code method.
420 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530421 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530422 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
423 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530424 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530425 /**
426 * Equals method.
427 */
428 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530429 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
430 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
431 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530432 /**
433 * To string method.
434 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530435 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
436 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
437 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530438 + getToStringMethodClose());
439
440 } catch (IOException e) {
441 throw new IOException("No data found in temporary java code fragment files for " + className
442 + " while impl class file generation");
443 }
444 } else {
445 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530446 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530447 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530448
Bharat saraswale2d51d62016-03-23 19:40:35 +0530449 /**
450 * Constructor.
451 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530452 String constructor =
453 getConstructorStart(className, pluginConfig) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
454 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
455 .getBeanTempFiles());
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530456
457 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530458 } catch (IOException e) {
459 throw new IOException("No data found in temporary java code fragment files for " + className
460 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530461 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530462
463 /**
464 * Add method for augment info's list.
465 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530466 if (isAugmentationHolderExtended) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530467 methods.add(getAddAugmentInfoMethodImpl());
468 methods.add(getAugmentInfoListImpl());
469 methods.add(getRemoveAugmentationImpl());
470 }
471
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530472 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530473 * Add methods in impl class.
474 */
475 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530476 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530477 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530478 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530479
Bharat saraswal33dfa012016-05-17 19:59:16 +0530480 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530481 }
482
483 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530484 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530485 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530486 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530487 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530488 * @param imports imports for file
489 * @return type def class file
490 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530491 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530492 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
493 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530494
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530495 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530496 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530497
janani b4a6711a2016-05-17 13:12:22 +0530498 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530499 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530500
Bharat saraswal33dfa012016-05-17 19:59:16 +0530501 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530502
Bharat saraswale2d51d62016-03-23 19:40:35 +0530503 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530504
Bharat saraswale2d51d62016-03-23 19:40:35 +0530505 /**
506 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530507 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530508 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530509 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530510 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
511 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
512 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530513 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530514 throw new IOException("No data found in temporary java code fragment files for " + className
515 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530516 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530517
Bharat saraswale2d51d62016-03-23 19:40:35 +0530518 /**
519 * Default constructor.
520 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530521 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530522 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530523
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530524 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530525
526 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530527 * Type constructor.
528 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530529 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
530 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530531
532 /**
533 * Of method.
534 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530535 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
536 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530537
538 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530539 * Getter method.
540 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530541 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
542 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530543
544 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530545 * Hash code method.
546 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530547 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530548 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
549 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
550 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530551 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530552
553 /**
554 * Equals method.
555 */
556 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530557 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
558 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530559
560 /**
561 * To string method.
562 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530563 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
564 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530565 + getToStringMethodClose());
566
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530567 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530568 /**
569 * From string method.
570 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530571 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530572 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
573 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530574
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530575 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530576 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530577 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530578 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530579
Bharat saraswale2d51d62016-03-23 19:40:35 +0530580 for (String method : methods) {
581 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530582 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530583 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530584
Bharat saraswal33dfa012016-05-17 19:59:16 +0530585 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530586 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530587
588 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530589 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530590 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530591 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530592 * @param curNode current YANG node
593 * @param imports imports for file
594 * @return type def class file
595 * @throws IOException when fails to generate class file
596 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530597 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
598 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530599
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530600 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530601 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530602
janani b4a6711a2016-05-17 13:12:22 +0530603 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530604 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
605
Bharat saraswal33dfa012016-05-17 19:59:16 +0530606 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530607
608 List<String> methods = new ArrayList<>();
609
610 /**
611 * Add attribute strings.
612 */
613 try {
614 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530615 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
616 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
617 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530618 } catch (IOException e) {
619 throw new IOException("No data found in temporary java code fragment files for " + className
620 + " while union class file generation");
621 }
622
623 /**
624 * Default constructor.
625 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530626 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530627 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530628
629 try {
630
631 /**
632 * Type constructor.
633 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530634 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
635 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530636
637 /**
638 * Of string method.
639 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530640 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
641 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530642
643 /**
644 * Getter method.
645 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530646 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
647 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530648
649 /**
650 * Hash code method.
651 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530652 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530653 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
654 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
655 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530656 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530657
658 /**
659 * Equals method.
660 */
661 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530662 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
663 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530664
665 /**
666 * To string method.
667 */
668 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530669 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
670 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
671 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530672
673 /**
674 * From string method.
675 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530676 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530677 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
678 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530679 + getFromStringMethodClose());
680
681 } catch (IOException e) {
682 throw new IOException("No data found in temporary java code fragment files for " + className
683 + " while union class file generation");
684 }
685
686 for (String method : methods) {
687 insertDataIntoJavaFile(file, method);
688 }
689 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
690
Bharat saraswal33dfa012016-05-17 19:59:16 +0530691 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530692 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530693
694 /**
695 * Generates class file for type enum.
696 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530697 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530698 * @param curNode current YANG node
699 * @return class file for type enum
700 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530701 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530702 public static File generateEnumClassFile(File file, YangNode curNode)
703 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530704
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530705 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530706 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +0530707
janani b4a6711a2016-05-17 13:12:22 +0530708 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530709 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
710
Bharat saraswal33dfa012016-05-17 19:59:16 +0530711 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +0530712 /**
713 * Add attribute strings.
714 */
715 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530716 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530717 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530718 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
719 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530720 + SEMI_COLAN + NEW_LINE);
721 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530722 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530723 + " while enum class file generation");
724 }
725
726 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530727 * Add an
728 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530729 */
janani b4a6711a2016-05-17 13:12:22 +0530730 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530731
732 /**
733 * Add a constructor for enum.
734 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530735 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530736 + getEnumsConstrcutor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530737
738 TempJavaEnumerationFragmentFiles enumFragFiles =
739 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
740 .getEnumerationTempFiles();
741 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530742 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +0530743 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530744 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530745 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530746
747 /**
748 * Add a getter method for enum.
749 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530750 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530751 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530752
753 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530754 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530755 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
756 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
757 .getEnumerationTempFiles())
758 + getFromStringMethodClose());
759 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530760 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530761 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530762 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530763
764 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
765
Bharat saraswal33dfa012016-05-17 19:59:16 +0530766 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +0530767 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530768
769 /**
770 * Generates interface file for rpc.
771 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530772 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530773 * @param curNode current YANG node
774 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530775 * @param isAttributePresent is attribute present
776 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530777 * @throws IOException when fails to generate class file
778 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530779 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
780 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530781 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530782
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530783 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530784
janani b4a6711a2016-05-17 13:12:22 +0530785 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530786 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530787
788 List<String> methods = new ArrayList<>();
789
790 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530791 if (isAttributePresent) {
792
793 /**
794 * Getter methods.
795 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530796 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530797 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
798 .getServiceTempFiles()));
799 /**
800 * Setter methods.
801 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530802 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530803 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
804 .getServiceTempFiles()));
805 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530806 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
807 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
808 /**
809 * Rpc methods
810 */
811 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
812 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
813 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530814 } catch (IOException e) {
815 throw new IOException("No data found in temporary java code fragment files for " + className
816 + " while rpc class file generation");
817 }
818
819 for (String method : methods) {
820 insertDataIntoJavaFile(file, method);
821 }
822 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
823
Bharat saraswal33dfa012016-05-17 19:59:16 +0530824 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530825 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530826
827 /**
828 * Generates event file.
829 *
830 * @param file generated file
831 * @param curNode current YANG node
832 * @param imports imports for file
833 * @throws IOException when fails to generate class file
834 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530835 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530836
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530837 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530838 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530839 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530840
Bharat saraswal33dfa012016-05-17 19:59:16 +0530841 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
842 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530843
Bharat saraswal33dfa012016-05-17 19:59:16 +0530844 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
845 try {
846 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
847 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles), COMMA)
848 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
849
850 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles));
851
852 } catch (IOException e) {
853 throw new IOException("No data found in temporary java code fragment files for " + className
854 + " while event class file generation");
855 }
856
857 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
858 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530859 }
860
861 /**
862 * Generates event listener file.
863 *
864 * @param file generated file
865 * @param curNode current YANG node
866 * @param imports imports for file
867 * @throws IOException when fails to generate class file
868 */
869 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
870 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530871
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530872 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530873 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530874 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530875
Bharat saraswal33dfa012016-05-17 19:59:16 +0530876 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530877 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530878 validateLineLength(file);
879 }
880
881 /**
882 * Generates event subject's file.
883 *
884 * @param file file handle
885 * @param curNode current YANG node
886 * @throws IOException when fails to do IO exceptions
887 */
888 public static void generateEventSubjectFile(File file, YangNode curNode)
889 throws IOException {
890
891 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
892 + EVENT_SUBJECT_NAME_SUFFIX;
893
894 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
895
896 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
897 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
898
899 insertDataIntoJavaFile(file, NEW_LINE);
900 try {
901 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles));
902
903 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles));
904
905 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles));
906
907 } catch (IOException e) {
908 throw new IOException("No data found in temporary java code fragment files for " + className
909 + " while event class file generation");
910 }
911
912 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
913 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530914 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530915}