blob: ba06942ab618a3f0413946d2fdfa55274790dd18 [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;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053030import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053031
32import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
33import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053035import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053057import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053058import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053059import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053060import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
janani b4a6711a2016-05-17 13:12:22 +053061import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053062import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
63import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053064import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053065import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053066import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053067import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
68import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053069import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
70import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053071import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053072import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
73import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053076import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
77import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053078import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isAugmentationHolderExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053079import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
80import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053081import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053082import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053083import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
84import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswale2d51d62016-03-23 19:40:35 +053085import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
86import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053087import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053088import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
89import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
90import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +053091import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +053092import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswald72411a2016-04-19 01:00:16 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
94import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Gaurav Agrawal56527662016-04-20 15:49:17 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053097import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswald72411a2016-04-19 01:00:16 +053098import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053099
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530100/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530101 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530102 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530103public final class JavaFileGenerator {
104
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530105 private JavaFileGenerator() {
106 }
107
108 /**
109 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530110 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530111 * @param file file
112 * @param imports imports for the file
113 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530114 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530115 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530116 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530117 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530118 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
119 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530120 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530121
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530122 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530123
janani b4a6711a2016-05-17 13:12:22 +0530124 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530125
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530126 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530127
Bharat saraswal2f11f652016-03-25 18:19:46 +0530128 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530130 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530131 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530132 try {
133 /**
134 * Getter methods.
135 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530136 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
137 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
138 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530139 } catch (IOException e) {
140 throw new IOException("No data found in temporary java code fragment files for " + className
141 + " while interface file generation");
142 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530143 }
144 return file;
145 }
146
147 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530148 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530149 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530150 * @param file file
151 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530152 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530153 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530154 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530155 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530156 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
157 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530158
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530159 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530160
janani b4a6711a2016-05-17 13:12:22 +0530161 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530162 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
163
Bharat saraswale2d51d62016-03-23 19:40:35 +0530164 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530165 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530166 if (isAttrPresent) {
167 try {
168 /**
169 * Getter methods.
170 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530171 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
172 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
173 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530174 /**
175 * Setter methods.
176 */
177 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530178 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
179 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
180 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530181 } catch (IOException e) {
182 throw new IOException("No data found in temporary java code fragment files for " + className
183 + " while builder interface file generation");
184 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530185 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530186 /**
187 * Add build method to builder interface file.
188 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530189 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530190 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
191 .addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530192
193 /**
194 * Add getters and setters in builder interface.
195 */
196 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530197 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530198 }
199
Bharat saraswale2d51d62016-03-23 19:40:35 +0530200 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530201 return file;
202 }
203
204 /**
205 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530206 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530207 * @param file file
208 * @param imports imports for the file
209 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530210 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530211 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530212 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530213 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530214 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530215 boolean isAttrPresent)
216 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530217
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530218 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530219
janani b4a6711a2016-05-17 13:12:22 +0530220 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530221 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
222
Bharat saraswale2d51d62016-03-23 19:40:35 +0530223 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530224
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530225 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530226
Bharat saraswal2f11f652016-03-25 18:19:46 +0530227 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530228 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530229 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530230 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530231 try {
232 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530233 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
234 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
235 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530236 } catch (IOException e) {
237 throw new IOException("No data found in temporary java code fragment files for " + className
238 + " while builder class file generation");
239 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530240
Bharat saraswal2f11f652016-03-25 18:19:46 +0530241 try {
242 /**
243 * Getter methods.
244 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530245 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
246 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
247 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530248 /**
249 * Setter methods.
250 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530251 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
252 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
253 .getBeanTempFiles()) +
254 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530255 } catch (IOException e) {
256 throw new IOException("No data found in temporary java code fragment files for " + className
257 + " while builder class file generation");
258 }
259 } else {
260 insertDataIntoJavaFile(file, NEW_LINE);
261 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530262 /**
263 * Add default constructor and build method impl.
264 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530265 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
266 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530268 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530269
270 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530271 * Add methods in builder class.
272 */
273 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530274 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530275 }
276 return file;
277 }
278
279 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530280 * Returns generated manager class file for current node.
281 *
282 * @param file file
283 * @param imports imports for the file
284 * @param curNode current YANG node
285 * @param isAttrPresent if any attribute is present or not
286 * @return builder class file
287 * @throws IOException when fails to write in file
288 */
289 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
290 boolean isAttrPresent)
291 throws IOException {
292
293 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
294
janani b4a6711a2016-05-17 13:12:22 +0530295 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530296
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530297 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530298
299 List<String> methods = new ArrayList<>();
300
Bharat saraswalc0e04842016-05-12 13:16:57 +0530301 try {
302 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530303 /**
304 * Getter methods.
305 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530306 methods.add(
307 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
308 ((TempJavaCodeFragmentFilesContainer) curNode)
309 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530310 /**
311 * Setter methods.
312 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530313 methods.add(
314 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
315 ((TempJavaCodeFragmentFilesContainer) curNode)
316 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
317 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530318
Bharat saraswalc0e04842016-05-12 13:16:57 +0530319 }
320 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530321 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
322 /**
323 * Rpc methods
324 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530325 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
326 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530327 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530328 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530329
330 } catch (IOException e) {
331 throw new IOException("No data found in temporary java code fragment files for " + className
332 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530333 }
334
335 /**
336 * Add methods in builder class.
337 */
338 for (String method : methods) {
339 insertDataIntoJavaFile(file, method);
340 }
341 return file;
342 }
343
344 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530345 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530346 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530347 * @param file file
348 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530349 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530350 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530351 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530352 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530353 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530354 throws IOException {
355
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530356 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530357
janani b4a6711a2016-05-17 13:12:22 +0530358 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530359 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
360
Bharat saraswale2d51d62016-03-23 19:40:35 +0530361 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530362
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530363 List<String> methods = new ArrayList<>();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530364
365 TempJavaCodeFragmentFiles javaCodeFragmentFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
366 .getTempJavaCodeFragmentFiles();
367 boolean isAugmentationHolderExtended = isAugmentationHolderExtended(
368 javaCodeFragmentFiles.getBeanTempFiles().getJavaExtendsListHolder().getExtendsList());
369 /**
370 * Add attribute for augmented info's list.
371 */
372 if (isAugmentationHolderExtended) {
373 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
374 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530375 if (isAttrPresent) {
376 /**
377 * Add attribute strings.
378 */
379 try {
380 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530381 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
382 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
383 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530384 } catch (IOException e) {
385 throw new IOException("No data found in temporary java code fragment files for " + className
386 + " while impl class file generation");
387 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530388
Bharat saraswal2f11f652016-03-25 18:19:46 +0530389 insertDataIntoJavaFile(file, NEW_LINE);
390 try {
391 /**
392 * Getter methods.
393 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530394 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
395 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
396 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530397
398 /**
399 * Hash code method.
400 */
401 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530402 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
403 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
404 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530405 /**
406 * Equals method.
407 */
408 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530409 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
410 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
411 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530412 /**
413 * To string method.
414 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530415 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
416 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
417 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530418 + getToStringMethodClose());
419
420 } catch (IOException e) {
421 throw new IOException("No data found in temporary java code fragment files for " + className
422 + " while impl class file generation");
423 }
424 } else {
425 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530426 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530427 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530428
Bharat saraswale2d51d62016-03-23 19:40:35 +0530429 /**
430 * Constructor.
431 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530432 String constructor = getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
433 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
434 .getBeanTempFiles());
435
436 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530437 } catch (IOException e) {
438 throw new IOException("No data found in temporary java code fragment files for " + className
439 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530440 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530441
442 /**
443 * Add method for augment info's list.
444 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530445 if (isAugmentationHolderExtended) {
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530446 methods.add(getAddAugmentInfoMethodImpl());
447 methods.add(getAugmentInfoListImpl());
448 methods.add(getRemoveAugmentationImpl());
449 }
450
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530451 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530452 * Add methods in impl class.
453 */
454 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530455 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530456 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530457 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530458
459 return file;
460 }
461
462 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530463 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530464 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530465 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530466 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530467 * @param imports imports for file
468 * @return type def class file
469 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530470 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530471 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
472 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530473
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530474 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530475
janani b4a6711a2016-05-17 13:12:22 +0530476 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530477 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530478
Bharat saraswale2d51d62016-03-23 19:40:35 +0530479 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530480
Bharat saraswale2d51d62016-03-23 19:40:35 +0530481 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530482
Bharat saraswale2d51d62016-03-23 19:40:35 +0530483 /**
484 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530485 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530486 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530487 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530488 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
489 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
490 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530491 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530492 throw new IOException("No data found in temporary java code fragment files for " + className
493 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530494 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530495
Bharat saraswale2d51d62016-03-23 19:40:35 +0530496 /**
497 * Default constructor.
498 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530499 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530500 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530501
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530502 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530503
504 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530505 * Type constructor.
506 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530507 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
508 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530509
510 /**
511 * Of method.
512 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530513 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
514 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530515
516 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530517 * Getter method.
518 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530519 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
520 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530521
522 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530523 * Hash code method.
524 */
525 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530526 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
527 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
528 .getTypeTempFiles())
529 .replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530530
531 /**
532 * Equals method.
533 */
534 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530535 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
536 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530537
538 /**
539 * To string method.
540 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530541 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
542 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530543 + getToStringMethodClose());
544
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530545 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530546 /**
547 * From string method.
548 */
549 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530550 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
551 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530552
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530553 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530554 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530555 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530556 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530557
Bharat saraswale2d51d62016-03-23 19:40:35 +0530558 for (String method : methods) {
559 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530560 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530561 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530562
Bharat saraswale2d51d62016-03-23 19:40:35 +0530563 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530564 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530565
566 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530567 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530568 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530569 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530570 * @param curNode current YANG node
571 * @param imports imports for file
572 * @return type def class file
573 * @throws IOException when fails to generate class file
574 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530575 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
576 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530577
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530578 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530579
janani b4a6711a2016-05-17 13:12:22 +0530580 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530581 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
582
583 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
584
585 List<String> methods = new ArrayList<>();
586
587 /**
588 * Add attribute strings.
589 */
590 try {
591 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530592 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
593 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
594 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530595 } catch (IOException e) {
596 throw new IOException("No data found in temporary java code fragment files for " + className
597 + " while union class file generation");
598 }
599
600 /**
601 * Default constructor.
602 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530603 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530604 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
605
606 try {
607
608 /**
609 * Type constructor.
610 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530611 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
612 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530613
614 /**
615 * Of string method.
616 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530617 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
618 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530619
620 /**
621 * Getter method.
622 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530623 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
624 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530625
626 /**
627 * Hash code method.
628 */
629 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530630 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
631 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
632 .getTypeTempFiles())
633 .replace(NEW_LINE, EMPTY_STRING))));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530634
635 /**
636 * Equals method.
637 */
638 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530639 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
640 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530641
642 /**
643 * To string method.
644 */
645 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530646 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
647 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
648 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530649
650 /**
651 * From string method.
652 */
653 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530654 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
655 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530656 + getFromStringMethodClose());
657
658 } catch (IOException e) {
659 throw new IOException("No data found in temporary java code fragment files for " + className
660 + " while union class file generation");
661 }
662
663 for (String method : methods) {
664 insertDataIntoJavaFile(file, method);
665 }
666 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
667
668 return file;
669 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530670
671 /**
672 * Generates class file for type enum.
673 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530674 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530675 * @param curNode current YANG node
676 * @return class file for type enum
677 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530678 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530679 public static File generateEnumClassFile(File file, YangNode curNode)
680 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530681
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530682 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald72411a2016-04-19 01:00:16 +0530683
janani b4a6711a2016-05-17 13:12:22 +0530684 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530685 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
686
janani b4a6711a2016-05-17 13:12:22 +0530687 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path);
Bharat saraswald72411a2016-04-19 01:00:16 +0530688 /**
689 * Add attribute strings.
690 */
691 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530692 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530693 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530694 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
695 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530696 + SEMI_COLAN + NEW_LINE);
697 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530698 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530699 + " while enum class file generation");
700 }
701
702 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530703 * Add an
704 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530705 */
janani b4a6711a2016-05-17 13:12:22 +0530706 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530707
708 /**
709 * Add a constructor for enum.
710 */
janani b4a6711a2016-05-17 13:12:22 +0530711 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false)
712 + getEnumsConstrcutor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530713
714 TempJavaEnumerationFragmentFiles enumFragFiles =
715 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
716 .getEnumerationTempFiles();
717 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
718 enumFragFiles.getJavaAttributeForEnum(),
719 enumFragFiles.getEnumSetJavaMap(),
720 enumFragFiles.getEnumStringList())
721 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530722
723 /**
724 * Add a getter method for enum.
725 */
janani b4a6711a2016-05-17 13:12:22 +0530726 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false)
727 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530728
729 try {
janani b4a6711a2016-05-17 13:12:22 +0530730 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className))
Bharat saraswalc0e04842016-05-12 13:16:57 +0530731 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
732 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
733 .getEnumerationTempFiles())
734 + getFromStringMethodClose());
735 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530736 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530737 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530738 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530739
740 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
741
742 return file;
743 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530744
745 /**
746 * Generates interface file for rpc.
747 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530748 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530749 * @param curNode current YANG node
750 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530751 * @param isAttributePresent is attribute present
752 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530753 * @throws IOException when fails to generate class file
754 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530755 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
756 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530757 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530758
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530759 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530760
janani b4a6711a2016-05-17 13:12:22 +0530761 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530762 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530763
764 List<String> methods = new ArrayList<>();
765
766 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530767 if (isAttributePresent) {
768
769 /**
770 * Getter methods.
771 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530772 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530773 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
774 .getServiceTempFiles()));
775 /**
776 * Setter methods.
777 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530778 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530779 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
780 .getServiceTempFiles()));
781 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530782 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
783 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
784 /**
785 * Rpc methods
786 */
787 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
788 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
789 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530790 } catch (IOException e) {
791 throw new IOException("No data found in temporary java code fragment files for " + className
792 + " while rpc class file generation");
793 }
794
795 for (String method : methods) {
796 insertDataIntoJavaFile(file, method);
797 }
798 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
799
800 return file;
801 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530802
803 /**
804 * Generates event file.
805 *
806 * @param file generated file
807 * @param curNode current YANG node
808 * @param imports imports for file
809 * @throws IOException when fails to generate class file
810 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530811 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530812
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530813 YangNode parent = curNode.getParent();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530814 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
815
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530816 String className =
817 getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName())
818 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530819
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530820 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530821 insertDataIntoJavaFile(file, getEventFileContents(className, javaFileInfo.getJavaName()));
822 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
823 }
824
825 private static String getEventFileContents(String eventClassname, String classname) {
826 return "\n" +
827 " public enum Type {\n" +
828 " /**\n" +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530829 " * " + getCapitalCase(classname) + " notification.\n" +
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530830 " */\n" +
831 " " + classname.toUpperCase() + "_EVENT\n" +
832 " }\n" +
833 "\n" +
834 " /**\n" +
835 " * Creates " + classname + " event with type and subject.\n" +
836 " *\n" +
837 " * @param type event type\n" +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530838 " * @param subject subject " + classname + "\n" +
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530839 " */\n" +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530840 " public " + eventClassname + "(Type type, " + getCapitalCase(classname) + " subject) {\n" +
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530841 " super(type, subject);\n" +
842 " }\n" +
843 "\n" +
844 " /**\n" +
845 " * Creates " + classname + " event with type, subject and time.\n" +
846 " *\n" +
847 " * @param type event type\n" +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530848 " * @param subject subject " + classname + "\n" +
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530849 " * @param time time of event\n" +
850 " */\n" +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530851 " public " + eventClassname + "(Type type, " + getCapitalCase(classname)
852 + " subject, long time) {\n" +
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530853 " super(type, subject, time);\n" +
854 " }\n" +
855 "\n";
856 }
857
858 /**
859 * Generates event listener file.
860 *
861 * @param file generated file
862 * @param curNode current YANG node
863 * @param imports imports for file
864 * @throws IOException when fails to generate class file
865 */
866 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
867 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530868 YangNode parent = curNode.getParent();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530869 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
870
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530871 String className =
872 getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName())
873 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530874 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
875
876 initiateJavaFileGeneration(file, className, GENERATE_EVENT_LISTENER_INTERFACE, imports, path);
877 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
878 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530879}