blob: 25b9c8548ff1cab2d0d212092c64172536b92163 [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;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053031import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
32import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053033
34import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
38import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
44import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
45import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053065import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053066import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053067import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053068import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053069import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswal33dfa012016-05-17 19:59:16 +053070import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
71import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053072import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
73import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053076import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053077import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
78import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
83import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053086import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
87import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal33dfa012016-05-17 19:59:16 +053088import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.getEventEnumTypeStart;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053089import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentationHolderExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
91import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053092import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053093import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053094import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
95import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +053096import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
98import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053099import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530100import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530101import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530102import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
103import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
104import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530105import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530106import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald72411a2016-04-19 01:00:16 +0530108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530113
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530114/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530115 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530116 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530117public final class JavaFileGenerator {
118
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530119 private JavaFileGenerator() {
120 }
121
122 /**
123 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530124 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530125 * @param file file
126 * @param imports imports for the file
127 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530128 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530129 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530130 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530131 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530132 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
133 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530134 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530135
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530136 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530137
janani b4a6711a2016-05-17 13:12:22 +0530138 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530139
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530140 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530141
Bharat saraswal2f11f652016-03-25 18:19:46 +0530142 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530143 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530144 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530145 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530146 try {
147 /**
148 * Getter methods.
149 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530150 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
151 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
152 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530153 } catch (IOException e) {
154 throw new IOException("No data found in temporary java code fragment files for " + className
155 + " while interface file generation");
156 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530157 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530158 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530159 }
160
161 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530162 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530163 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 * @param file file
165 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530166 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530167 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530168 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530169 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530170 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
171 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530172
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530173 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530174 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530175
janani b4a6711a2016-05-17 13:12:22 +0530176 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530177 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
178
Bharat saraswal33dfa012016-05-17 19:59:16 +0530179 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path, pluginConfig);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530180 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530181 if (isAttrPresent) {
182 try {
183 /**
184 * Getter methods.
185 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530186 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
187 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
188 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530189 /**
190 * Setter methods.
191 */
192 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530193 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
194 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
195 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530196 } catch (IOException e) {
197 throw new IOException("No data found in temporary java code fragment files for " + className
198 + " while builder interface file generation");
199 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530200 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530201 /**
202 * Add build method to builder interface file.
203 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530204 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530205 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530206 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530207
208 /**
209 * Add getters and setters in builder interface.
210 */
211 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530212 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530213 }
214
Bharat saraswale2d51d62016-03-23 19:40:35 +0530215 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530216 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530217 }
218
219 /**
220 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530221 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530222 * @param file file
223 * @param imports imports for the file
224 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530225 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530226 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530227 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530228 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530229 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530230 boolean isAttrPresent)
231 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530232
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530233 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530234 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530235
janani b4a6711a2016-05-17 13:12:22 +0530236 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530237 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
238
Bharat saraswal33dfa012016-05-17 19:59:16 +0530239 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path, pluginConfig);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530240
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530241 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530242
Bharat saraswal2f11f652016-03-25 18:19:46 +0530243 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530244 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530245 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530246 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530247 try {
248 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530249 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
250 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
251 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530252 } catch (IOException e) {
253 throw new IOException("No data found in temporary java code fragment files for " + className
254 + " while builder class file generation");
255 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530256
Bharat saraswal2f11f652016-03-25 18:19:46 +0530257 try {
258 /**
259 * Getter methods.
260 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530261 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
262 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
263 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530264 /**
265 * Setter methods.
266 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
268 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
269 .getBeanTempFiles()) +
270 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530271 } catch (IOException e) {
272 throw new IOException("No data found in temporary java code fragment files for " + className
273 + " while builder class file generation");
274 }
275 } else {
276 insertDataIntoJavaFile(file, NEW_LINE);
277 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530278 /**
279 * Add default constructor and build method impl.
280 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530281 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
282 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530283 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530284 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530285
286 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530287 * Add methods in builder class.
288 */
289 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530290 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530291 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530292 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530293 }
294
295 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530296 * Returns generated manager class file for current node.
297 *
298 * @param file file
299 * @param imports imports for the file
300 * @param curNode current YANG node
301 * @param isAttrPresent if any attribute is present or not
302 * @return builder class file
303 * @throws IOException when fails to write in file
304 */
305 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
306 boolean isAttrPresent)
307 throws IOException {
308
309 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
310
janani bdd1314f2016-05-19 17:39:50 +0530311 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530312
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530313 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530314
315 List<String> methods = new ArrayList<>();
316
Bharat saraswal33dfa012016-05-17 19:59:16 +0530317 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
318 methods.add(addActivateMethod());
319 methods.add(addDeActivateMethod());
320
Bharat saraswalc0e04842016-05-12 13:16:57 +0530321 try {
322 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530323 /**
324 * Getter methods.
325 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530326 methods.add(
327 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
328 ((TempJavaCodeFragmentFilesContainer) curNode)
329 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530330 /**
331 * Setter methods.
332 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530333 methods.add(
334 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
335 ((TempJavaCodeFragmentFilesContainer) curNode)
336 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
337 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530338
Bharat saraswalc0e04842016-05-12 13:16:57 +0530339 }
340 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530341 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
342 /**
343 * Rpc methods
344 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530345 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
346 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530347 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530348 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530349
350 } catch (IOException e) {
351 throw new IOException("No data found in temporary java code fragment files for " + className
352 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530353 }
354
355 /**
356 * Add methods in builder class.
357 */
358 for (String method : methods) {
359 insertDataIntoJavaFile(file, method);
360 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530361 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530362 }
363
364 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530365 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530366 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530367 * @param file file
368 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530369 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530370 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530371 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530372 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530373 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530374 throws IOException {
375
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530376 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530377 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530378
janani b4a6711a2016-05-17 13:12:22 +0530379 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530380 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
381
Bharat saraswal33dfa012016-05-17 19:59:16 +0530382 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path, pluginConfig);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530383
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530384 List<String> methods = new ArrayList<>();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530385
386 TempJavaCodeFragmentFiles javaCodeFragmentFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
387 .getTempJavaCodeFragmentFiles();
388 boolean isAugmentationHolderExtended = isAugmentationHolderExtended(
389 javaCodeFragmentFiles.getBeanTempFiles().getJavaExtendsListHolder().getExtendsList());
390 /**
391 * Add attribute for augmented info's list.
392 */
393 if (isAugmentationHolderExtended) {
394 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
395 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530396 if (isAttrPresent) {
397 /**
398 * Add attribute strings.
399 */
400 try {
401 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530402 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
403 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
404 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530405 } catch (IOException e) {
406 throw new IOException("No data found in temporary java code fragment files for " + className
407 + " while impl class file generation");
408 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530409
Bharat saraswal2f11f652016-03-25 18:19:46 +0530410 insertDataIntoJavaFile(file, NEW_LINE);
411 try {
412 /**
413 * Getter methods.
414 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530415 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
416 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
417 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530418
419 /**
420 * Hash code method.
421 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530422 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530423 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
424 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530425 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530426 /**
427 * Equals method.
428 */
429 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530430 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
431 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
432 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530433 /**
434 * To string method.
435 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530436 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
437 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
438 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530439 + getToStringMethodClose());
440
441 } catch (IOException e) {
442 throw new IOException("No data found in temporary java code fragment files for " + className
443 + " while impl class file generation");
444 }
445 } else {
446 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530447 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530448 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530449
Bharat saraswale2d51d62016-03-23 19:40:35 +0530450 /**
451 * Constructor.
452 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530453 String constructor =
454 getConstructorStart(className, pluginConfig) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
455 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
456 .getBeanTempFiles());
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530457
458 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530459 } catch (IOException e) {
460 throw new IOException("No data found in temporary java code fragment files for " + className
461 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530462 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530463
464 /**
465 * Add method for augment info's list.
466 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530467 if (isAugmentationHolderExtended) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530468 methods.add(getAddAugmentInfoMethodImpl());
469 methods.add(getAugmentInfoListImpl());
470 methods.add(getRemoveAugmentationImpl());
471 }
472
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530473 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530474 * Add methods in impl class.
475 */
476 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530477 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530478 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530479 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530480
Bharat saraswal33dfa012016-05-17 19:59:16 +0530481 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530482 }
483
484 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530485 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530486 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530487 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530488 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530489 * @param imports imports for file
490 * @return type def class file
491 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530492 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530493 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
494 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530495
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530496 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530497 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530498
janani b4a6711a2016-05-17 13:12:22 +0530499 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530500 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530501
Bharat saraswal33dfa012016-05-17 19:59:16 +0530502 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530503
Bharat saraswale2d51d62016-03-23 19:40:35 +0530504 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530505
Bharat saraswale2d51d62016-03-23 19:40:35 +0530506 /**
507 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530508 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530509 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530510 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530511 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
512 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
513 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530514 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530515 throw new IOException("No data found in temporary java code fragment files for " + className
516 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530517 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530518
Bharat saraswale2d51d62016-03-23 19:40:35 +0530519 /**
520 * Default constructor.
521 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530522 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530523 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530524
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530525 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530526
527 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530528 * Type constructor.
529 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530530 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
531 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530532
533 /**
534 * Of method.
535 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530536 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
537 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530538
539 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530540 * Getter method.
541 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530542 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
543 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530544
545 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530546 * Hash code method.
547 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530548 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530549 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
550 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
551 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530552 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530553
554 /**
555 * Equals method.
556 */
557 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530558 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
559 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530560
561 /**
562 * To string method.
563 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530564 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
565 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530566 + getToStringMethodClose());
567
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530568 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530569 /**
570 * From string method.
571 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530572 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530573 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
574 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530575
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530576 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530577 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530578 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530579 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530580
Bharat saraswale2d51d62016-03-23 19:40:35 +0530581 for (String method : methods) {
582 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530583 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530584 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530585
Bharat saraswal33dfa012016-05-17 19:59:16 +0530586 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530587 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530588
589 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530590 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530591 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530592 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530593 * @param curNode current YANG node
594 * @param imports imports for file
595 * @return type def class file
596 * @throws IOException when fails to generate class file
597 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530598 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
599 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530600
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530601 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530602 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530603
janani b4a6711a2016-05-17 13:12:22 +0530604 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530605 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
606
Bharat saraswal33dfa012016-05-17 19:59:16 +0530607 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530608
609 List<String> methods = new ArrayList<>();
610
611 /**
612 * Add attribute strings.
613 */
614 try {
615 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530616 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
617 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
618 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530619 } catch (IOException e) {
620 throw new IOException("No data found in temporary java code fragment files for " + className
621 + " while union class file generation");
622 }
623
624 /**
625 * Default constructor.
626 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530627 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530628 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530629
630 try {
631
632 /**
633 * Type constructor.
634 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530635 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
636 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530637
638 /**
639 * Of string method.
640 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530641 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
642 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530643
644 /**
645 * Getter method.
646 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530647 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
648 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530649
650 /**
651 * Hash code method.
652 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530653 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530654 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
655 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
656 .getTypeTempFiles())
Bharat saraswal33dfa012016-05-17 19:59:16 +0530657 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530658
659 /**
660 * Equals method.
661 */
662 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530663 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
664 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530665
666 /**
667 * To string method.
668 */
669 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530670 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
671 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
672 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530673
674 /**
675 * From string method.
676 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530677 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530678 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
679 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530680 + getFromStringMethodClose());
681
682 } catch (IOException e) {
683 throw new IOException("No data found in temporary java code fragment files for " + className
684 + " while union class file generation");
685 }
686
687 for (String method : methods) {
688 insertDataIntoJavaFile(file, method);
689 }
690 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
691
Bharat saraswal33dfa012016-05-17 19:59:16 +0530692 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530693 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530694
695 /**
696 * Generates class file for type enum.
697 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530698 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530699 * @param curNode current YANG node
700 * @return class file for type enum
701 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530702 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530703 public static File generateEnumClassFile(File file, YangNode curNode)
704 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530705
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530706 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530707 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +0530708
janani b4a6711a2016-05-17 13:12:22 +0530709 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530710 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
711
Bharat saraswal33dfa012016-05-17 19:59:16 +0530712 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +0530713 /**
714 * Add attribute strings.
715 */
716 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530717 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530718 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530719 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
720 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530721 + SEMI_COLAN + NEW_LINE);
722 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530723 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530724 + " while enum class file generation");
725 }
726
727 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530728 * Add an
729 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530730 */
janani b4a6711a2016-05-17 13:12:22 +0530731 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530732
733 /**
734 * Add a constructor for enum.
735 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530736 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530737 + getEnumsConstrcutor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530738
739 TempJavaEnumerationFragmentFiles enumFragFiles =
740 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
741 .getEnumerationTempFiles();
742 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530743 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +0530744 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +0530745 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530746 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530747
748 /**
749 * Add a getter method for enum.
750 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530751 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +0530752 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530753
754 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530755 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +0530756 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
757 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
758 .getEnumerationTempFiles())
759 + getFromStringMethodClose());
760 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530761 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530762 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530763 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530764
765 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
766
Bharat saraswal33dfa012016-05-17 19:59:16 +0530767 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +0530768 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530769
770 /**
771 * Generates interface file for rpc.
772 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530773 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530774 * @param curNode current YANG node
775 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530776 * @param isAttributePresent is attribute present
777 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530778 * @throws IOException when fails to generate class file
779 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530780 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
781 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530782 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530783
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530784 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530785
janani b4a6711a2016-05-17 13:12:22 +0530786 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530787 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530788
789 List<String> methods = new ArrayList<>();
790
791 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530792 if (isAttributePresent) {
793
794 /**
795 * Getter methods.
796 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530797 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530798 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
799 .getServiceTempFiles()));
800 /**
801 * Setter methods.
802 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530803 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530804 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
805 .getServiceTempFiles()));
806 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530807 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
808 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
809 /**
810 * Rpc methods
811 */
812 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
813 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
814 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530815 } catch (IOException e) {
816 throw new IOException("No data found in temporary java code fragment files for " + className
817 + " while rpc class file generation");
818 }
819
820 for (String method : methods) {
821 insertDataIntoJavaFile(file, method);
822 }
823 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
824
Bharat saraswal33dfa012016-05-17 19:59:16 +0530825 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530826 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530827
828 /**
829 * Generates event file.
830 *
831 * @param file generated file
832 * @param curNode current YANG node
833 * @param imports imports for file
834 * @throws IOException when fails to generate class file
835 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530836 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530837
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530838 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530839 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530840 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530841
Bharat saraswal33dfa012016-05-17 19:59:16 +0530842 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
843 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530844
Bharat saraswal33dfa012016-05-17 19:59:16 +0530845 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
846 try {
847 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
848 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles), COMMA)
849 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
850
851 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles));
852
853 } catch (IOException e) {
854 throw new IOException("No data found in temporary java code fragment files for " + className
855 + " while event class file generation");
856 }
857
858 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
859 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530860 }
861
862 /**
863 * Generates event listener file.
864 *
865 * @param file generated file
866 * @param curNode current YANG node
867 * @param imports imports for file
868 * @throws IOException when fails to generate class file
869 */
870 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
871 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530872
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530873 String className =
Bharat saraswal33dfa012016-05-17 19:59:16 +0530874 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530875 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530876
Bharat saraswal33dfa012016-05-17 19:59:16 +0530877 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530878 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530879 validateLineLength(file);
880 }
881
882 /**
883 * Generates event subject's file.
884 *
885 * @param file file handle
886 * @param curNode current YANG node
887 * @throws IOException when fails to do IO exceptions
888 */
889 public static void generateEventSubjectFile(File file, YangNode curNode)
890 throws IOException {
891
892 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
893 + EVENT_SUBJECT_NAME_SUFFIX;
894
895 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
896
897 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
898 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
899
900 insertDataIntoJavaFile(file, NEW_LINE);
901 try {
902 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles));
903
904 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles));
905
906 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles));
907
908 } catch (IOException e) {
909 throw new IOException("No data found in temporary java code fragment files for " + className
910 + " while event class file generation");
911 }
912
913 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
914 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530915 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530916}