blob: 1582616abe8a80da07f194447290c30b25b9eb2f [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;
28import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053029
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
Gaurav Agrawal56527662016-04-20 15:49:17 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_RPC_INTERFACE;
Vinod Kumar S38046502016-03-23 15:30:27 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053035import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
38import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
45import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053052import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053053import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053054import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053055import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053056import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswald72411a2016-04-19 01:00:16 +053057import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053058import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
59import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053060import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053061import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Vinod Kumar S38046502016-03-23 15:30:27 +053062import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
63import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053064import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
65import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053066import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053067import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
68import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053069import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053070import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053071import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
72import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053073import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
74 .isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053075import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
76import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053077import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
79import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
80import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053081import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053082import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
83import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
84import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +053085import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +053086import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswald72411a2016-04-19 01:00:16 +053087import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
88import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Gaurav Agrawal56527662016-04-20 15:49:17 +053089import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053091import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswald72411a2016-04-19 01:00:16 +053092import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053093
Vinod Kumar Sc4216002016-03-03 19:55:30 +053094/**
Bharat saraswald9822e92016-04-05 15:13:44 +053095 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +053096 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053097public final class JavaFileGenerator {
98
Bharat saraswal4bf8b152016-02-25 02:26:43 +053099 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530100 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530101 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530102 private static boolean isExtendsList = false;
103
104 /**
105 * List of classes to be extended by generated interface file.
106 */
107 private static List<String> extendsList = new ArrayList<>();
108
109 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530110 * Creates an instance of java file generator.
111 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530112 private JavaFileGenerator() {
113 }
114
115 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530116 * Returns true if extends list is not empty.
117 *
118 * @return true or false
119 */
120 public static boolean isExtendsList() {
121 return isExtendsList;
122 }
123
124 /**
125 * Sets the value of is extends list.
126 *
127 * @param isExtends true or false
128 */
129 public static void setIsExtendsList(boolean isExtends) {
130 isExtendsList = isExtends;
131 }
132
133 /**
134 * Returns list of extended classes.
135 *
136 * @return list of extended classes
137 */
138 public static List<String> getExtendsList() {
139 return extendsList;
140 }
141
142 /**
143 * Sets the list of extended classes.
144 *
145 * @param extendList list of extended classes
146 */
147 public static void setExtendsList(List<String> extendList) {
148 extendsList = extendList;
149 }
150
151 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530152 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530153 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530154 * @param file file
155 * @param imports imports for the file
156 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530157 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530158 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530159 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530160 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530161 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode, boolean isAttrPresent)
162 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530163
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530165
Vinod Kumar S38046502016-03-23 15:30:27 +0530166 String className = getCaptialCase(javaFileInfo.getJavaName());
167 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
168
Bharat saraswale2d51d62016-03-23 19:40:35 +0530169 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530170
Bharat saraswal2f11f652016-03-25 18:19:46 +0530171 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530172 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530173 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530174 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530175 try {
176 /**
177 * Getter methods.
178 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530179 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
180 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
181 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530182 } catch (IOException e) {
183 throw new IOException("No data found in temporary java code fragment files for " + className
184 + " while interface file generation");
185 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530186 }
187 return file;
188 }
189
190 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530191 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530192 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530193 * @param file file
194 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530195 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530196 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530197 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530198 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530199 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
200 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530201
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530202 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530203
204 String className = getCaptialCase(javaFileInfo.getJavaName());
205 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
206
Bharat saraswale2d51d62016-03-23 19:40:35 +0530207 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530208 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530209 if (isAttrPresent) {
210 try {
211 /**
212 * Getter methods.
213 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530214 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
215 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
216 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530217 /**
218 * Setter methods.
219 */
220 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530221 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
222 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
223 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530224 } catch (IOException e) {
225 throw new IOException("No data found in temporary java code fragment files for " + className
226 + " while builder interface file generation");
227 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530228 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530229 /**
230 * Add build method to builder interface file.
231 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530232 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530233 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
234 .addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530235
236 /**
237 * Add getters and setters in builder interface.
238 */
239 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530240 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530241 }
242
Bharat saraswale2d51d62016-03-23 19:40:35 +0530243 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530244 return file;
245 }
246
247 /**
248 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530249 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530250 * @param file file
251 * @param imports imports for the file
252 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530253 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530254 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530255 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530256 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530257 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530258 boolean isAttrPresent)
259 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530260
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530261 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530262
263 String className = getCaptialCase(javaFileInfo.getJavaName());
264 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
265
Bharat saraswale2d51d62016-03-23 19:40:35 +0530266 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530267
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530268 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530269
Bharat saraswal2f11f652016-03-25 18:19:46 +0530270 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530271 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530272 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530273 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530274 try {
275 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530276 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
277 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
278 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530279 } catch (IOException e) {
280 throw new IOException("No data found in temporary java code fragment files for " + className
281 + " while builder class file generation");
282 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530283
Bharat saraswal2f11f652016-03-25 18:19:46 +0530284 try {
285 /**
286 * Getter methods.
287 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530288 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
289 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
290 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530291 /**
292 * Setter methods.
293 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530294 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
295 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
296 .getBeanTempFiles()) +
297 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530298 } catch (IOException e) {
299 throw new IOException("No data found in temporary java code fragment files for " + className
300 + " while builder class file generation");
301 }
302 } else {
303 insertDataIntoJavaFile(file, NEW_LINE);
304 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530305 /**
306 * Add default constructor and build method impl.
307 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530308 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
309 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530310 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530311
312 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530313 * Add methods in builder class.
314 */
315 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530316 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530317 }
318 return file;
319 }
320
321 /**
322 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530323 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530324 * @param file file
325 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530326 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530327 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530328 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530329 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530330 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530331 throws IOException {
332
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530333 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530334
335 String className = getCaptialCase(javaFileInfo.getJavaName());
336 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
337
Bharat saraswale2d51d62016-03-23 19:40:35 +0530338 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530339
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530340 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530341 if (isAttrPresent) {
342 /**
343 * Add attribute strings.
344 */
345 try {
346 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530347 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
348 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
349 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530350 } catch (IOException e) {
351 throw new IOException("No data found in temporary java code fragment files for " + className
352 + " while impl class file generation");
353 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530354
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530355 /**
356 * Add attribute for augmented info's list.
357 */
358 if (isHasAugmentationExtended(getExtendsList())) {
359 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
360 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530361 insertDataIntoJavaFile(file, NEW_LINE);
362 try {
363 /**
364 * Getter methods.
365 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530366 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
367 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
368 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530369
370 /**
371 * Hash code method.
372 */
373 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530374 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
375 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
376 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530377 /**
378 * Equals method.
379 */
380 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530381 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
382 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
383 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530384 /**
385 * To string method.
386 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530387 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
388 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
389 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530390 + getToStringMethodClose());
391
392 } catch (IOException e) {
393 throw new IOException("No data found in temporary java code fragment files for " + className
394 + " while impl class file generation");
395 }
396 } else {
397 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530398 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530399 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530400 /**
401 * Constructor.
402 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530403 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
404 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530405 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530406 } catch (IOException e) {
407 throw new IOException("No data found in temporary java code fragment files for " + className
408 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530409 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530410
411 /**
412 * Add method for augment info's list.
413 */
414 if (isHasAugmentationExtended(getExtendsList())) {
415 methods.add(getAddAugmentInfoMethodImpl());
416 methods.add(getAugmentInfoListImpl());
417 methods.add(getRemoveAugmentationImpl());
418 }
419
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530420 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530421 * Add methods in impl class.
422 */
423 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530424 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530425 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530426 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530427
428 return file;
429 }
430
431 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530432 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530433 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530434 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530435 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436 * @param imports imports for file
437 * @return type def class file
438 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530439 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530440 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
441 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530442
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530443 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530444
Bharat saraswale2d51d62016-03-23 19:40:35 +0530445 String className = getCaptialCase(javaFileInfo.getJavaName());
446 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530447
Bharat saraswale2d51d62016-03-23 19:40:35 +0530448 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530449
Bharat saraswale2d51d62016-03-23 19:40:35 +0530450 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530451
Bharat saraswale2d51d62016-03-23 19:40:35 +0530452 /**
453 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530454 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530455 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530456 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530457 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
458 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
459 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530460 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530461 throw new IOException("No data found in temporary java code fragment files for " + className
462 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530463 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530464
Bharat saraswale2d51d62016-03-23 19:40:35 +0530465 /**
466 * Default constructor.
467 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530468 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530469 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530470
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530471 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530472
473 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530474 * Type constructor.
475 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530476 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
477 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530478
479 /**
480 * Of method.
481 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530482 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
483 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530484
485 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530486 * Getter method.
487 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530488 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
489 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530490
491 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530492 * Hash code method.
493 */
494 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530495 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
496 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
497 .getTypeTempFiles())
498 .replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530499
500 /**
501 * Equals method.
502 */
503 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530504 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
505 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530506
507 /**
508 * To string method.
509 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530510 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
511 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530512 + getToStringMethodClose());
513
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530514 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530515 /**
516 * From string method.
517 */
518 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530519 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
520 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530521
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530522 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530523 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530524 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530525 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530526
Bharat saraswale2d51d62016-03-23 19:40:35 +0530527 for (String method : methods) {
528 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530529 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530530 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530531
Bharat saraswale2d51d62016-03-23 19:40:35 +0530532 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530533 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530534
535 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530536 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530537 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530538 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530539 * @param curNode current YANG node
540 * @param imports imports for file
541 * @return type def class file
542 * @throws IOException when fails to generate class file
543 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530544 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
545 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530546
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530547 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530548
549 String className = getCaptialCase(javaFileInfo.getJavaName());
550 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
551
552 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
553
554 List<String> methods = new ArrayList<>();
555
556 /**
557 * Add attribute strings.
558 */
559 try {
560 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530561 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
562 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
563 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530564 } catch (IOException e) {
565 throw new IOException("No data found in temporary java code fragment files for " + className
566 + " while union class file generation");
567 }
568
569 /**
570 * Default constructor.
571 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530572 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530573 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
574
575 try {
576
577 /**
578 * Type constructor.
579 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530580 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
581 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530582
583 /**
584 * Of string method.
585 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530586 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
587 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530588
589 /**
590 * Getter method.
591 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530592 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
593 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530594
595 /**
596 * Hash code method.
597 */
598 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530599 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
600 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
601 .getTypeTempFiles())
602 .replace(NEW_LINE, EMPTY_STRING))));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530603
604 /**
605 * Equals method.
606 */
607 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530608 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
609 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530610
611 /**
612 * To string method.
613 */
614 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530615 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
616 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
617 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530618
619 /**
620 * From string method.
621 */
622 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530623 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
624 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530625 + getFromStringMethodClose());
626
627 } catch (IOException e) {
628 throw new IOException("No data found in temporary java code fragment files for " + className
629 + " while union class file generation");
630 }
631
632 for (String method : methods) {
633 insertDataIntoJavaFile(file, method);
634 }
635 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
636
637 return file;
638 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530639
640 /**
641 * Generates class file for type enum.
642 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530643 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530644 * @param curNode current YANG node
645 * @return class file for type enum
646 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530647 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530648 public static File generateEnumClassFile(File file, YangNode curNode)
649 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530650
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530651 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald72411a2016-04-19 01:00:16 +0530652
653 String className = getCaptialCase(javaFileInfo.getJavaName());
654 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
655
656 initiateJavaFileGeneration(file, className, GENERATE_ENUM_CLASS, null, path);
657 /**
658 * Add attribute strings.
659 */
660 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530661 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530662 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530663 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
664 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530665 + SEMI_COLAN + NEW_LINE);
666 } catch (IOException e) {
667 throw new IOException("No data found in temporary java code fragment files for " + className
668 + " while enum class file generation");
669 }
670
671 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530672 * Add an
673 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530674 */
675 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
676
677 /**
678 * Add a constructor for enum.
679 */
680 insertDataIntoJavaFile(file,
681 getJavaDoc(TYPE_CONSTRUCTOR, getSmallCase(className), false) + getEnumsConstrcutor(className)
682 + NEW_LINE);
683
684 /**
685 * Add a getter method for enum.
686 */
687 insertDataIntoJavaFile(file,
688 getJavaDoc(GETTER_METHOD, getSmallCase(className), false) + getGetter(INT, getSmallCase(className))
689 + NEW_LINE);
690
691 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
692
693 return file;
694 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530695
696 /**
697 * Generates interface file for rpc.
698 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530699 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530700 * @param curNode current YANG node
701 * @param imports imports for file
702 * @return type def class file
703 * @throws IOException when fails to generate class file
704 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530705 public static File generateRpcInterfaceFile(File file, YangNode curNode, List<String> imports)
706 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530707
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530708 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530709
710 String className = getCaptialCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
711 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
712
713 initiateJavaFileGeneration(file, className, GENERATE_RPC_INTERFACE, imports, path);
714
715 List<String> methods = new ArrayList<>();
716
717 try {
718
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530719 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530720 /**
721 * Rpc methods
722 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530723 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
724 .getServiceTempFiles()));
Gaurav Agrawal56527662016-04-20 15:49:17 +0530725
726 } catch (IOException e) {
727 throw new IOException("No data found in temporary java code fragment files for " + className
728 + " while rpc class file generation");
729 }
730
731 for (String method : methods) {
732 insertDataIntoJavaFile(file, method);
733 }
734 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
735
736 return file;
737 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530738}