blob: 08b30721a34af98dd9d415cdd45cf23a32e1368d [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;
23
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.onosproject.yangutils.datamodel.YangNode;
25import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
26import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
27import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053028
29import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
32import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
33import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
34import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
35import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
36import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
37import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
38import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
39import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053043import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
45import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053046import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053047import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
48import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053049import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Vinod Kumar S38046502016-03-23 15:30:27 +053050import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
51import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
52import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
53import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053054import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053055import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
56import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053057import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053058import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
59import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
60import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
61import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
62import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
63import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
64import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
65import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
66import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053067import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053068
Vinod Kumar Sc4216002016-03-03 19:55:30 +053069/**
Bharat saraswald9822e92016-04-05 15:13:44 +053070 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +053071 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053072public final class JavaFileGenerator {
73
Bharat saraswal4bf8b152016-02-25 02:26:43 +053074 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053075 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053076 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053077 private static boolean isExtendsList = false;
78
79 /**
80 * List of classes to be extended by generated interface file.
81 */
82 private static List<String> extendsList = new ArrayList<>();
83
84 /**
85 * Creates an instance of java file generator.
86 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053087 private JavaFileGenerator() {
88 }
89
90 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053091 * Returns true if extends list is not empty.
92 *
93 * @return true or false
94 */
95 public static boolean isExtendsList() {
96 return isExtendsList;
97 }
98
99 /**
100 * Sets the value of is extends list.
101 *
102 * @param isExtends true or false
103 */
104 public static void setIsExtendsList(boolean isExtends) {
105 isExtendsList = isExtends;
106 }
107
108 /**
109 * Returns list of extended classes.
110 *
111 * @return list of extended classes
112 */
113 public static List<String> getExtendsList() {
114 return extendsList;
115 }
116
117 /**
118 * Sets the list of extended classes.
119 *
120 * @param extendList list of extended classes
121 */
122 public static void setExtendsList(List<String> extendList) {
123 extendsList = extendList;
124 }
125
126 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530127 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530128 *
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530129 * @param file file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530130 * @param imports imports for the file
Vinod Kumar S38046502016-03-23 15:30:27 +0530131 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530132 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530133 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530134 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530135 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530136 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode, boolean isAttrPresent)
137 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530138
Vinod Kumar S38046502016-03-23 15:30:27 +0530139 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530140
Vinod Kumar S38046502016-03-23 15:30:27 +0530141 String className = getCaptialCase(javaFileInfo.getJavaName());
142 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
143
Bharat saraswale2d51d62016-03-23 19:40:35 +0530144 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530145
Bharat saraswal2f11f652016-03-25 18:19:46 +0530146 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530147 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530148 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530149 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530150 try {
151 /**
152 * Getter methods.
153 */
154 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
155 } catch (IOException e) {
156 throw new IOException("No data found in temporary java code fragment files for " + className
157 + " while interface file generation");
158 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530159 }
160 return file;
161 }
162
163 /**
164 * Return generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530165 *
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530166 * @param file file
Vinod Kumar S38046502016-03-23 15:30:27 +0530167 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530168 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530169 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530170 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530171 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530172 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
173 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530174
175 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
176
177 String className = getCaptialCase(javaFileInfo.getJavaName());
178 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
179
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530181 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530182 if (isAttrPresent) {
183 try {
184 /**
185 * Getter methods.
186 */
187 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
188 /**
189 * Setter methods.
190 */
191 methods.add(NEW_LINE);
192 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
193 } catch (IOException e) {
194 throw new IOException("No data found in temporary java code fragment files for " + className
195 + " while builder interface file generation");
196 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530197 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530198 /**
199 * Add build method to builder interface file.
200 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530201 methods.add(
202 ((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530203
204 /**
205 * Add getters and setters in builder interface.
206 */
207 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530208 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530209 }
210
Bharat saraswale2d51d62016-03-23 19:40:35 +0530211 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530212 return file;
213 }
214
215 /**
216 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530217 *
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530218 * @param file file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530219 * @param imports imports for the file
Vinod Kumar S38046502016-03-23 15:30:27 +0530220 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530221 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530222 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530223 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530224 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530225 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
226 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530227
228 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
229
230 String className = getCaptialCase(javaFileInfo.getJavaName());
231 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
232
Bharat saraswale2d51d62016-03-23 19:40:35 +0530233 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530234
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530235 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530236
Bharat saraswal2f11f652016-03-25 18:19:46 +0530237 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530238 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530239 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530240 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530241 try {
242 insertDataIntoJavaFile(file,
243 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
244 } catch (IOException e) {
245 throw new IOException("No data found in temporary java code fragment files for " + className
246 + " while builder class file generation");
247 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530248
Bharat saraswal2f11f652016-03-25 18:19:46 +0530249 try {
250 /**
251 * Getter methods.
252 */
253 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
254 /**
255 * Setter methods.
256 */
257 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + NEW_LINE);
258 } catch (IOException e) {
259 throw new IOException("No data found in temporary java code fragment files for " + className
260 + " while builder class file generation");
261 }
262 } else {
263 insertDataIntoJavaFile(file, NEW_LINE);
264 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530265 /**
266 * Add default constructor and build method impl.
267 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530268 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
269 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
270 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530271
272 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530273 * Add methods in builder class.
274 */
275 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530276 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530277 }
278 return file;
279 }
280
281 /**
282 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530283 *
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530284 * @param file file
Vinod Kumar S38046502016-03-23 15:30:27 +0530285 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530286 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530287 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530288 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530289 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530290 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530291 throws IOException {
292
293 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
294
295 String className = getCaptialCase(javaFileInfo.getJavaName());
296 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
297
Bharat saraswale2d51d62016-03-23 19:40:35 +0530298 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530299
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530300 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530301 if (isAttrPresent) {
302 /**
303 * Add attribute strings.
304 */
305 try {
306 insertDataIntoJavaFile(file,
307 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
308 } catch (IOException e) {
309 throw new IOException("No data found in temporary java code fragment files for " + className
310 + " while impl class file generation");
311 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530312
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530313 /**
314 * Add attribute for augmented info's list.
315 */
316 if (isHasAugmentationExtended(getExtendsList())) {
317 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
318 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530319 insertDataIntoJavaFile(file, NEW_LINE);
320 try {
321 /**
322 * Getter methods.
323 */
324 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
325
326 /**
327 * Hash code method.
328 */
329 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
330 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
331 /**
332 * Equals method.
333 */
334 methods.add(getEqualsMethodClose(
335 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
336 /**
337 * To string method.
338 */
339 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
340 + getToStringMethodClose());
341
342 } catch (IOException e) {
343 throw new IOException("No data found in temporary java code fragment files for " + className
344 + " while impl class file generation");
345 }
346 } else {
347 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530348 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530349 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530350 /**
351 * Constructor.
352 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530353 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK, curNode)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530354 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530355 } catch (IOException e) {
356 throw new IOException("No data found in temporary java code fragment files for " + className
357 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530358 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530359
360 /**
361 * Add method for augment info's list.
362 */
363 if (isHasAugmentationExtended(getExtendsList())) {
364 methods.add(getAddAugmentInfoMethodImpl());
365 methods.add(getAugmentInfoListImpl());
366 methods.add(getRemoveAugmentationImpl());
367 }
368
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530369 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530370 * Add methods in impl class.
371 */
372 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530373 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530374 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530375 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530376
377 return file;
378 }
379
380 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530381 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530382 *
Bharat saraswale2d51d62016-03-23 19:40:35 +0530383 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530384 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530385 * @param imports imports for file
386 * @return type def class file
387 * @throws IOException when fails to generate class file
388 */
389 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530390
Bharat saraswale2d51d62016-03-23 19:40:35 +0530391 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530392
Bharat saraswale2d51d62016-03-23 19:40:35 +0530393 String className = getCaptialCase(javaFileInfo.getJavaName());
394 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530395
Bharat saraswale2d51d62016-03-23 19:40:35 +0530396 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530397
Bharat saraswale2d51d62016-03-23 19:40:35 +0530398 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530399
Bharat saraswale2d51d62016-03-23 19:40:35 +0530400 /**
401 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530402 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530403 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530404 insertDataIntoJavaFile(file,
405 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530406 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530407 throw new IOException("No data found in temporary java code fragment files for " + className
408 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530409 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530410
Bharat saraswale2d51d62016-03-23 19:40:35 +0530411 /**
412 * Default constructor.
413 */
414 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
415 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530416
Bharat saraswale2d51d62016-03-23 19:40:35 +0530417 /**
418 * Constructor.
419 */
420 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
421 .addTypeDefConstructor());
422
423 /**
424 * Of method.
425 */
426 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addOfMethod());
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530427 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530428
429 /**
430 * Getter method.
431 */
432 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
433
434 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530435 * Hash code method.
436 */
437 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
438 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
439
440 /**
441 * Equals method.
442 */
443 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
444 + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
445
446 /**
447 * To string method.
448 */
449 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
450 + getToStringMethodClose());
451
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530452 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530453 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530454 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530455 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530456
Bharat saraswale2d51d62016-03-23 19:40:35 +0530457 for (String method : methods) {
458 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530459 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530460 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530461
Bharat saraswale2d51d62016-03-23 19:40:35 +0530462 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530463 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530464}