blob: 6fc37a56cba2c549156cac4be27aa2044ef41fd5 [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 S38046502016-03-23 15:30:27 +053023import org.onosproject.yangutils.datamodel.YangNode;
24import org.onosproject.yangutils.translator.tojava.HasJavaFileInfo;
25import org.onosproject.yangutils.translator.tojava.HasTempJavaCodeFragmentFiles;
26import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053027
28import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
29import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053031import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053032import 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;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053035import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
37import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
38import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
39import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
43import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
44import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.UNION_FROM_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053046import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
48import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053049import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053050import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
51import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053052import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Vinod Kumar S38046502016-03-23 15:30:27 +053053import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
54import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053055import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
56import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Vinod Kumar S38046502016-03-23 15:30:27 +053057import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
58import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053059import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053060import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053061import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
62import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053063import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053064import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
65import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
66import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
67import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
68import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
69import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
70import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
71import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
72import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053073import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053074
Vinod Kumar Sc4216002016-03-03 19:55:30 +053075/**
Bharat saraswald9822e92016-04-05 15:13:44 +053076 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +053077 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053078public final class JavaFileGenerator {
79
Bharat saraswal4bf8b152016-02-25 02:26:43 +053080 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053081 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053082 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053083 private static boolean isExtendsList = false;
84
85 /**
86 * List of classes to be extended by generated interface file.
87 */
88 private static List<String> extendsList = new ArrayList<>();
89
90 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +053091 * Creates an instance of java file generator.
92 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053093 private JavaFileGenerator() {
94 }
95
96 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053097 * Returns true if extends list is not empty.
98 *
99 * @return true or false
100 */
101 public static boolean isExtendsList() {
102 return isExtendsList;
103 }
104
105 /**
106 * Sets the value of is extends list.
107 *
108 * @param isExtends true or false
109 */
110 public static void setIsExtendsList(boolean isExtends) {
111 isExtendsList = isExtends;
112 }
113
114 /**
115 * Returns list of extended classes.
116 *
117 * @return list of extended classes
118 */
119 public static List<String> getExtendsList() {
120 return extendsList;
121 }
122
123 /**
124 * Sets the list of extended classes.
125 *
126 * @param extendList list of extended classes
127 */
128 public static void setExtendsList(List<String> extendList) {
129 extendsList = extendList;
130 }
131
132 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530133 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530134 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530135 * @param file file
136 * @param imports imports for the file
137 * @param curNode current YANG node
138 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530139 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530140 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530141 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530142 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode, boolean isAttrPresent)
143 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530144
Vinod Kumar S38046502016-03-23 15:30:27 +0530145 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530146
Vinod Kumar S38046502016-03-23 15:30:27 +0530147 String className = getCaptialCase(javaFileInfo.getJavaName());
148 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
149
Bharat saraswale2d51d62016-03-23 19:40:35 +0530150 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530151
Bharat saraswal2f11f652016-03-25 18:19:46 +0530152 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530153 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530154 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530155 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530156 try {
157 /**
158 * Getter methods.
159 */
160 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
161 } catch (IOException e) {
162 throw new IOException("No data found in temporary java code fragment files for " + className
163 + " while interface file generation");
164 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530165 }
166 return file;
167 }
168
169 /**
170 * Return generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530171 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530172 * @param file file
173 * @param curNode current YANG node
174 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530175 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530176 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530177 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530178 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
179 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530180
181 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
182
183 String className = getCaptialCase(javaFileInfo.getJavaName());
184 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
185
Bharat saraswale2d51d62016-03-23 19:40:35 +0530186 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530187 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530188 if (isAttrPresent) {
189 try {
190 /**
191 * Getter methods.
192 */
193 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
194 /**
195 * Setter methods.
196 */
197 methods.add(NEW_LINE);
198 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
199 } catch (IOException e) {
200 throw new IOException("No data found in temporary java code fragment files for " + className
201 + " while builder interface file generation");
202 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530203 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530204 /**
205 * Add build method to builder interface file.
206 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530207 methods.add(
208 ((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530209
210 /**
211 * Add getters and setters in builder interface.
212 */
213 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530214 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530215 }
216
Bharat saraswale2d51d62016-03-23 19:40:35 +0530217 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530218 return file;
219 }
220
221 /**
222 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530223 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530224 * @param file file
225 * @param imports imports for the file
226 * @param curNode current YANG node
227 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530228 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530229 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530230 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530231 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530232 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530233
234 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
235
236 String className = getCaptialCase(javaFileInfo.getJavaName());
237 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
238
Bharat saraswale2d51d62016-03-23 19:40:35 +0530239 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530240
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530241 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530242
Bharat saraswal2f11f652016-03-25 18:19:46 +0530243 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530244 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530245 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530246 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530247 try {
248 insertDataIntoJavaFile(file,
249 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
250 } catch (IOException e) {
251 throw new IOException("No data found in temporary java code fragment files for " + className
252 + " while builder class file generation");
253 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530254
Bharat saraswal2f11f652016-03-25 18:19:46 +0530255 try {
256 /**
257 * Getter methods.
258 */
259 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
260 /**
261 * Setter methods.
262 */
263 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + NEW_LINE);
264 } catch (IOException e) {
265 throw new IOException("No data found in temporary java code fragment files for " + className
266 + " while builder class file generation");
267 }
268 } else {
269 insertDataIntoJavaFile(file, NEW_LINE);
270 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530271 /**
272 * Add default constructor and build method impl.
273 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530274 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
275 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
276 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530277
278 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530279 * Add methods in builder class.
280 */
281 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530282 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530283 }
284 return file;
285 }
286
287 /**
288 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530289 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530290 * @param file file
291 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530292 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530293 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530294 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530295 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530296 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530297 throws IOException {
298
299 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
300
301 String className = getCaptialCase(javaFileInfo.getJavaName());
302 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
303
Bharat saraswale2d51d62016-03-23 19:40:35 +0530304 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530305
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530306 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530307 if (isAttrPresent) {
308 /**
309 * Add attribute strings.
310 */
311 try {
312 insertDataIntoJavaFile(file,
313 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
314 } catch (IOException e) {
315 throw new IOException("No data found in temporary java code fragment files for " + className
316 + " while impl class file generation");
317 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530318
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530319 /**
320 * Add attribute for augmented info's list.
321 */
322 if (isHasAugmentationExtended(getExtendsList())) {
323 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
324 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530325 insertDataIntoJavaFile(file, NEW_LINE);
326 try {
327 /**
328 * Getter methods.
329 */
330 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
331
332 /**
333 * Hash code method.
334 */
335 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
336 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
337 /**
338 * Equals method.
339 */
340 methods.add(getEqualsMethodClose(
341 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
342 /**
343 * To string method.
344 */
345 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
346 + getToStringMethodClose());
347
348 } catch (IOException e) {
349 throw new IOException("No data found in temporary java code fragment files for " + className
350 + " while impl class file generation");
351 }
352 } else {
353 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530354 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530355 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530356 /**
357 * Constructor.
358 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530359 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK, curNode)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530360 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530361 } catch (IOException e) {
362 throw new IOException("No data found in temporary java code fragment files for " + className
363 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530364 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530365
366 /**
367 * Add method for augment info's list.
368 */
369 if (isHasAugmentationExtended(getExtendsList())) {
370 methods.add(getAddAugmentInfoMethodImpl());
371 methods.add(getAugmentInfoListImpl());
372 methods.add(getRemoveAugmentationImpl());
373 }
374
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530375 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530376 * Add methods in impl class.
377 */
378 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530379 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530380 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530381 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530382
383 return file;
384 }
385
386 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530387 * Generate class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530388 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530389 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530390 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530391 * @param imports imports for file
392 * @return type def class file
393 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530394 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530395 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530396
Bharat saraswale2d51d62016-03-23 19:40:35 +0530397 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530398
Bharat saraswale2d51d62016-03-23 19:40:35 +0530399 String className = getCaptialCase(javaFileInfo.getJavaName());
400 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530401
Bharat saraswale2d51d62016-03-23 19:40:35 +0530402 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530403
Bharat saraswale2d51d62016-03-23 19:40:35 +0530404 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530405
Bharat saraswale2d51d62016-03-23 19:40:35 +0530406 /**
407 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530408 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530409 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530410 insertDataIntoJavaFile(file,
411 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530412 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530413 throw new IOException("No data found in temporary java code fragment files for " + className
414 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530415 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530416
Bharat saraswale2d51d62016-03-23 19:40:35 +0530417 /**
418 * Default constructor.
419 */
420 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
421 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530422
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530423 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530424
425 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530426 * Type constructor.
427 */
428 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK, curNode));
429
430 /**
431 * Of method.
432 */
433 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK, curNode));
434
435 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436 * Getter method.
437 */
438 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
439
440 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530441 * Hash code method.
442 */
443 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
444 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
445
446 /**
447 * Equals method.
448 */
449 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
450 + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
451
452 /**
453 * To string method.
454 */
455 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
456 + getToStringMethodClose());
457
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530458 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530459 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530460 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530461 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530462
Bharat saraswale2d51d62016-03-23 19:40:35 +0530463 for (String method : methods) {
464 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530465 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530466 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530467
Bharat saraswale2d51d62016-03-23 19:40:35 +0530468 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530469 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530470
471 /**
472 * Generate class file for union type.
473 *
474 * @param file generated file
475 * @param curNode current YANG node
476 * @param imports imports for file
477 * @return type def class file
478 * @throws IOException when fails to generate class file
479 */
480 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
481
482 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
483
484 String className = getCaptialCase(javaFileInfo.getJavaName());
485 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
486
487 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
488
489 List<String> methods = new ArrayList<>();
490
491 /**
492 * Add attribute strings.
493 */
494 try {
495 insertDataIntoJavaFile(file,
496 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
497 } catch (IOException e) {
498 throw new IOException("No data found in temporary java code fragment files for " + className
499 + " while union class file generation");
500 }
501
502 /**
503 * Default constructor.
504 */
505 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
506 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
507
508 try {
509
510 /**
511 * Type constructor.
512 */
513 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK, curNode));
514
515 /**
516 * Of string method.
517 */
518 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK, curNode));
519
520 /**
521 * Getter method.
522 */
523 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
524
525 /**
526 * Hash code method.
527 */
528 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
529 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
530
531 /**
532 * Equals method.
533 */
534 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
535 + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
536
537 /**
538 * To string method.
539 */
540 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
541 getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode) + getToStringMethodClose());
542
543 /**
544 * From string method.
545 */
546 methods.add(getFromStringMethodSignature(className)
547 + getDataFromTempFileHandle(UNION_FROM_STRING_IMPL_MASK, curNode)
548 + getFromStringMethodClose());
549
550 } catch (IOException e) {
551 throw new IOException("No data found in temporary java code fragment files for " + className
552 + " while union class file generation");
553 }
554
555 for (String method : methods) {
556 insertDataIntoJavaFile(file, method);
557 }
558 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
559
560 return file;
561 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530562}