blob: 3edf5c0d216bab9a41c204aea0666197cc381df0 [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;
27import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053028import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053029import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053030
31import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
32import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053056import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053058import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053060import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswald72411a2016-04-19 01:00:16 +053061import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
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;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053078import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
79 .isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053080import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
81import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053082import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053083import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053084import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
85import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
87import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053088import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053089import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
90import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
91import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +053092import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +053093import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswald72411a2016-04-19 01:00:16 +053094import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
95import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Gaurav Agrawal56527662016-04-20 15:49:17 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053098import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswald72411a2016-04-19 01:00:16 +053099import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530100
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530101/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530102 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530103 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530104public final class JavaFileGenerator {
105
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530106 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530107 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530108 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530109 private static boolean isExtendsList = false;
110
111 /**
112 * List of classes to be extended by generated interface file.
113 */
114 private static List<String> extendsList = new ArrayList<>();
115
116 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530117 * Creates an instance of java file generator.
118 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530119 private JavaFileGenerator() {
120 }
121
122 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530123 * Returns true if extends list is not empty.
124 *
125 * @return true or false
126 */
127 public static boolean isExtendsList() {
128 return isExtendsList;
129 }
130
131 /**
132 * Sets the value of is extends list.
133 *
134 * @param isExtends true or false
135 */
136 public static void setIsExtendsList(boolean isExtends) {
137 isExtendsList = isExtends;
138 }
139
140 /**
141 * Returns list of extended classes.
142 *
143 * @return list of extended classes
144 */
145 public static List<String> getExtendsList() {
146 return extendsList;
147 }
148
149 /**
150 * Sets the list of extended classes.
151 *
152 * @param extendList list of extended classes
153 */
154 public static void setExtendsList(List<String> extendList) {
155 extendsList = extendList;
156 }
157
158 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530159 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530160 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530161 * @param file file
162 * @param imports imports for the file
163 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530164 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530165 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530166 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530167 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530168 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
169 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530170 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530171
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530172 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530173
Vinod Kumar S38046502016-03-23 15:30:27 +0530174 String className = getCaptialCase(javaFileInfo.getJavaName());
175 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
176
Bharat saraswale2d51d62016-03-23 19:40:35 +0530177 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530178
Bharat saraswal2f11f652016-03-25 18:19:46 +0530179 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530181 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530182 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530183 try {
184 /**
185 * Getter methods.
186 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530187 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
188 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
189 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530190 } catch (IOException e) {
191 throw new IOException("No data found in temporary java code fragment files for " + className
192 + " while interface file generation");
193 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530194 }
195 return file;
196 }
197
198 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530199 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530200 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530201 * @param file file
202 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530203 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530204 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530205 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530206 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530207 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
208 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530209
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530210 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530211
212 String className = getCaptialCase(javaFileInfo.getJavaName());
213 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
214
Bharat saraswale2d51d62016-03-23 19:40:35 +0530215 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530216 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530217 if (isAttrPresent) {
218 try {
219 /**
220 * Getter methods.
221 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530222 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
223 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
224 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530225 /**
226 * Setter methods.
227 */
228 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530229 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
230 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
231 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530232 } catch (IOException e) {
233 throw new IOException("No data found in temporary java code fragment files for " + className
234 + " while builder interface file generation");
235 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530236 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530237 /**
238 * Add build method to builder interface file.
239 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530240 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530241 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
242 .addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530243
244 /**
245 * Add getters and setters in builder interface.
246 */
247 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530248 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530249 }
250
Bharat saraswale2d51d62016-03-23 19:40:35 +0530251 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530252 return file;
253 }
254
255 /**
256 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530257 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530258 * @param file file
259 * @param imports imports for the file
260 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530261 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530262 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530263 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530264 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530265 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530266 boolean isAttrPresent)
267 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530268
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530269 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530270
271 String className = getCaptialCase(javaFileInfo.getJavaName());
272 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
273
Bharat saraswale2d51d62016-03-23 19:40:35 +0530274 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530275
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530276 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530277
Bharat saraswal2f11f652016-03-25 18:19:46 +0530278 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530279 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530280 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530281 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530282 try {
283 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530284 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
285 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
286 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530287 } catch (IOException e) {
288 throw new IOException("No data found in temporary java code fragment files for " + className
289 + " while builder class file generation");
290 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530291
Bharat saraswal2f11f652016-03-25 18:19:46 +0530292 try {
293 /**
294 * Getter methods.
295 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530296 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
297 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
298 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530299 /**
300 * Setter methods.
301 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530302 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
303 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
304 .getBeanTempFiles()) +
305 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530306 } catch (IOException e) {
307 throw new IOException("No data found in temporary java code fragment files for " + className
308 + " while builder class file generation");
309 }
310 } else {
311 insertDataIntoJavaFile(file, NEW_LINE);
312 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530313 /**
314 * Add default constructor and build method impl.
315 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530316 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
317 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530318 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530319 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530320
321 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530322 * Add methods in builder class.
323 */
324 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530325 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530326 }
327 return file;
328 }
329
330 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530331 * Returns generated manager class file for current node.
332 *
333 * @param file file
334 * @param imports imports for the file
335 * @param curNode current YANG node
336 * @param isAttrPresent if any attribute is present or not
337 * @return builder class file
338 * @throws IOException when fails to write in file
339 */
340 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
341 boolean isAttrPresent)
342 throws IOException {
343
344 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
345
Bharat saraswalc0e04842016-05-12 13:16:57 +0530346 String className = getCaptialCase(javaFileInfo.getJavaName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530347 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
348
349 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
350
351 List<String> methods = new ArrayList<>();
352
Bharat saraswalc0e04842016-05-12 13:16:57 +0530353 try {
354 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530355 /**
356 * Getter methods.
357 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530358 methods.add(
359 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
360 ((TempJavaCodeFragmentFilesContainer) curNode)
361 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530362 /**
363 * Setter methods.
364 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530365 methods.add(
366 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
367 ((TempJavaCodeFragmentFilesContainer) curNode)
368 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
369 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530370
Bharat saraswalc0e04842016-05-12 13:16:57 +0530371 }
372 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530373 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
374 /**
375 * Rpc methods
376 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530377 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
378 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530379 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530380 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530381
382 } catch (IOException e) {
383 throw new IOException("No data found in temporary java code fragment files for " + className
384 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530385 }
386
387 /**
388 * Add methods in builder class.
389 */
390 for (String method : methods) {
391 insertDataIntoJavaFile(file, method);
392 }
393 return file;
394 }
395
396 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530397 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530398 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530399 * @param file file
400 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530401 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530402 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530403 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530404 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530405 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530406 throws IOException {
407
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530408 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530409
410 String className = getCaptialCase(javaFileInfo.getJavaName());
411 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
412
Bharat saraswale2d51d62016-03-23 19:40:35 +0530413 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530414
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530415 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530416 if (isAttrPresent) {
417 /**
418 * Add attribute strings.
419 */
420 try {
421 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530422 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
423 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
424 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530425 } catch (IOException e) {
426 throw new IOException("No data found in temporary java code fragment files for " + className
427 + " while impl class file generation");
428 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530429
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530430 /**
431 * Add attribute for augmented info's list.
432 */
433 if (isHasAugmentationExtended(getExtendsList())) {
434 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
435 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530436 insertDataIntoJavaFile(file, NEW_LINE);
437 try {
438 /**
439 * Getter methods.
440 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530441 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
442 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
443 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530444
445 /**
446 * Hash code method.
447 */
448 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530449 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
450 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
451 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530452 /**
453 * Equals method.
454 */
455 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530456 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
457 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
458 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530459 /**
460 * To string method.
461 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530462 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
463 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
464 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530465 + getToStringMethodClose());
466
467 } catch (IOException e) {
468 throw new IOException("No data found in temporary java code fragment files for " + className
469 + " while impl class file generation");
470 }
471 } else {
472 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530473 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530474 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530475 /**
476 * Constructor.
477 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530478 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
479 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530480 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530481 } catch (IOException e) {
482 throw new IOException("No data found in temporary java code fragment files for " + className
483 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530484 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530485
486 /**
487 * Add method for augment info's list.
488 */
489 if (isHasAugmentationExtended(getExtendsList())) {
490 methods.add(getAddAugmentInfoMethodImpl());
491 methods.add(getAugmentInfoListImpl());
492 methods.add(getRemoveAugmentationImpl());
493 }
494
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530495 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530496 * Add methods in impl class.
497 */
498 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530499 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530500 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530501 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530502
503 return file;
504 }
505
506 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530507 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530508 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530509 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530510 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530511 * @param imports imports for file
512 * @return type def class file
513 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530514 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530515 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
516 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530517
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530518 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530519
Bharat saraswale2d51d62016-03-23 19:40:35 +0530520 String className = getCaptialCase(javaFileInfo.getJavaName());
521 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530522
Bharat saraswale2d51d62016-03-23 19:40:35 +0530523 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530524
Bharat saraswale2d51d62016-03-23 19:40:35 +0530525 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530526
Bharat saraswale2d51d62016-03-23 19:40:35 +0530527 /**
528 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530529 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530530 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530531 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530532 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
533 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
534 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530535 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530536 throw new IOException("No data found in temporary java code fragment files for " + className
537 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530538 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530539
Bharat saraswale2d51d62016-03-23 19:40:35 +0530540 /**
541 * Default constructor.
542 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530543 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530544 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530545
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530546 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530547
548 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530549 * Type constructor.
550 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530551 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
552 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530553
554 /**
555 * Of method.
556 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530557 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
558 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530559
560 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530561 * Getter method.
562 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530563 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
564 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530565
566 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530567 * Hash code method.
568 */
569 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530570 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
571 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
572 .getTypeTempFiles())
573 .replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530574
575 /**
576 * Equals method.
577 */
578 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530579 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
580 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530581
582 /**
583 * To string method.
584 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530585 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
586 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530587 + getToStringMethodClose());
588
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530589 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530590 /**
591 * From string method.
592 */
593 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530594 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
595 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530596
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530597 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530598 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530599 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530600 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530601
Bharat saraswale2d51d62016-03-23 19:40:35 +0530602 for (String method : methods) {
603 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530604 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530605 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530606
Bharat saraswale2d51d62016-03-23 19:40:35 +0530607 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530608 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530609
610 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530611 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530612 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530613 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530614 * @param curNode current YANG node
615 * @param imports imports for file
616 * @return type def class file
617 * @throws IOException when fails to generate class file
618 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530619 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
620 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530621
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530622 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530623
624 String className = getCaptialCase(javaFileInfo.getJavaName());
625 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
626
627 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
628
629 List<String> methods = new ArrayList<>();
630
631 /**
632 * Add attribute strings.
633 */
634 try {
635 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530636 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
637 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
638 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530639 } catch (IOException e) {
640 throw new IOException("No data found in temporary java code fragment files for " + className
641 + " while union class file generation");
642 }
643
644 /**
645 * Default constructor.
646 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530647 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530648 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
649
650 try {
651
652 /**
653 * Type constructor.
654 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530655 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
656 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530657
658 /**
659 * Of string method.
660 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530661 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
662 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530663
664 /**
665 * Getter method.
666 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530667 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
668 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530669
670 /**
671 * Hash code method.
672 */
673 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530674 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
675 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
676 .getTypeTempFiles())
677 .replace(NEW_LINE, EMPTY_STRING))));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530678
679 /**
680 * Equals method.
681 */
682 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530683 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
684 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530685
686 /**
687 * To string method.
688 */
689 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530690 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
691 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
692 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530693
694 /**
695 * From string method.
696 */
697 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530698 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
699 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530700 + getFromStringMethodClose());
701
702 } catch (IOException e) {
703 throw new IOException("No data found in temporary java code fragment files for " + className
704 + " while union class file generation");
705 }
706
707 for (String method : methods) {
708 insertDataIntoJavaFile(file, method);
709 }
710 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
711
712 return file;
713 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530714
715 /**
716 * Generates class file for type enum.
717 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530718 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530719 * @param curNode current YANG node
720 * @return class file for type enum
721 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530722 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530723 public static File generateEnumClassFile(File file, YangNode curNode)
724 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530725
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530726 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald72411a2016-04-19 01:00:16 +0530727
728 String className = getCaptialCase(javaFileInfo.getJavaName());
729 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
730
731 initiateJavaFileGeneration(file, className, GENERATE_ENUM_CLASS, null, path);
732 /**
733 * Add attribute strings.
734 */
735 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530736 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530737 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530738 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
739 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530740 + SEMI_COLAN + NEW_LINE);
741 } catch (IOException e) {
742 throw new IOException("No data found in temporary java code fragment files for " + className
743 + " while enum class file generation");
744 }
745
746 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530747 * Add an
748 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530749 */
750 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
751
752 /**
753 * Add a constructor for enum.
754 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530755 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, getSmallCase(className), false)
756 + getEnumsConstrcutor(className) + NEW_LINE);
757
758 TempJavaEnumerationFragmentFiles enumFragFiles =
759 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
760 .getEnumerationTempFiles();
761 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
762 enumFragFiles.getJavaAttributeForEnum(),
763 enumFragFiles.getEnumSetJavaMap(),
764 enumFragFiles.getEnumStringList())
765 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530766
767 /**
768 * Add a getter method for enum.
769 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530770 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, getSmallCase(className), false)
771 + getGetter(INT, getSmallCase(className), GENERATE_ENUM_CLASS) + NEW_LINE);
772
773 try {
774 insertDataIntoJavaFile(file, getFromStringMethodSignature(className)
775 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
776 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
777 .getEnumerationTempFiles())
778 + getFromStringMethodClose());
779 } catch (IOException e) {
780 throw new IOException("No data found in temporary java code fragment files for " + className
781 + " while enum class file generation");
782 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530783
784 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
785
786 return file;
787 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530788
789 /**
790 * Generates interface file for rpc.
791 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530792 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530793 * @param curNode current YANG node
794 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530795 * @param isAttributePresent is attribute present
796 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530797 * @throws IOException when fails to generate class file
798 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530799 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
800 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530801 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530802
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530803 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530804
805 String className = getCaptialCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
806 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
807
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530808 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530809
810 List<String> methods = new ArrayList<>();
811
812 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530813 if (isAttributePresent) {
814
815 /**
816 * Getter methods.
817 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530818 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530819 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
820 .getServiceTempFiles()));
821 /**
822 * Setter methods.
823 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530824 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530825 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
826 .getServiceTempFiles()));
827 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530828 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
829 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
830 /**
831 * Rpc methods
832 */
833 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
834 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
835 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530836 } catch (IOException e) {
837 throw new IOException("No data found in temporary java code fragment files for " + className
838 + " while rpc class file generation");
839 }
840
841 for (String method : methods) {
842 insertDataIntoJavaFile(file, method);
843 }
844 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
845
846 return file;
847 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530848
849 /**
850 * Generates event file.
851 *
852 * @param file generated file
853 * @param curNode current YANG node
854 * @param imports imports for file
855 * @throws IOException when fails to generate class file
856 */
857 public static void generateEventFile(File file, YangNode curNode, List<String> imports)
858 throws IOException {
859
860 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
861
862 String className = getCaptialCase(javaFileInfo.getJavaName()) + EVENT_STRING;
863 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
864
865 initiateJavaFileGeneration(file, className, GENERATE_EVENT_CLASS, imports, path);
866
867 insertDataIntoJavaFile(file, getEventFileContents(className, javaFileInfo.getJavaName()));
868 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
869 }
870
871 private static String getEventFileContents(String eventClassname, String classname) {
872 return "\n" +
873 " public enum Type {\n" +
874 " /**\n" +
875 " * " + eventClassname + "notification.\n" +
876 " */\n" +
877 " " + classname.toUpperCase() + "_EVENT\n" +
878 " }\n" +
879 "\n" +
880 " /**\n" +
881 " * Creates " + classname + " event with type and subject.\n" +
882 " *\n" +
883 " * @param type event type\n" +
884 " * @param subject subject interface\n" +
885 " */\n" +
886 " public " + eventClassname + "(Type type, Interface subject) {\n" +
887 " super(type, subject);\n" +
888 " }\n" +
889 "\n" +
890 " /**\n" +
891 " * Creates " + classname + " event with type, subject and time.\n" +
892 " *\n" +
893 " * @param type event type\n" +
894 " * @param subject subject interface\n" +
895 " * @param time time of event\n" +
896 " */\n" +
897 " public " + eventClassname + "(Type type, Interface subject, long time) {\n" +
898 " super(type, subject, time);\n" +
899 " }\n" +
900 "\n";
901 }
902
903 /**
904 * Generates event listener file.
905 *
906 * @param file generated file
907 * @param curNode current YANG node
908 * @param imports imports for file
909 * @throws IOException when fails to generate class file
910 */
911 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
912 throws IOException {
913
914 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
915
916 String className = getCaptialCase(javaFileInfo.getJavaName()) + EVENT_LISTENER_STRING;
917 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
918
919 initiateJavaFileGeneration(file, className, GENERATE_EVENT_LISTENER_INTERFACE, imports, path);
920 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
921 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530922}