blob: aa208e521cd71caf4c798060e361618d16a0adcd [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;
Bharat saraswald72411a2016-04-19 01:00:16 +053030import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053031import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
34import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
35import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
45import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.UNION_FROM_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053048import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053049import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053050import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053051import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053052import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswald72411a2016-04-19 01:00:16 +053053import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053054import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
55import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053056import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053057import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Vinod Kumar S38046502016-03-23 15:30:27 +053058import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
59import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
61import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053062import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
64import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053065import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053066import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053067import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
68import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053069import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils.isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053070import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
71import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053072import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053073import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
74import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
75import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053076import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053077import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
78import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
79import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +053080import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
81import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
82import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
83import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053085import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswald72411a2016-04-19 01:00:16 +053086import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053087
Vinod Kumar Sc4216002016-03-03 19:55:30 +053088/**
Bharat saraswald9822e92016-04-05 15:13:44 +053089 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +053090 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +053091public final class JavaFileGenerator {
92
Bharat saraswal4bf8b152016-02-25 02:26:43 +053093 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053094 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +053095 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053096 private static boolean isExtendsList = false;
97
98 /**
99 * List of classes to be extended by generated interface file.
100 */
101 private static List<String> extendsList = new ArrayList<>();
102
103 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530104 * Creates an instance of java file generator.
105 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530106 private JavaFileGenerator() {
107 }
108
109 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530110 * Returns true if extends list is not empty.
111 *
112 * @return true or false
113 */
114 public static boolean isExtendsList() {
115 return isExtendsList;
116 }
117
118 /**
119 * Sets the value of is extends list.
120 *
121 * @param isExtends true or false
122 */
123 public static void setIsExtendsList(boolean isExtends) {
124 isExtendsList = isExtends;
125 }
126
127 /**
128 * Returns list of extended classes.
129 *
130 * @return list of extended classes
131 */
132 public static List<String> getExtendsList() {
133 return extendsList;
134 }
135
136 /**
137 * Sets the list of extended classes.
138 *
139 * @param extendList list of extended classes
140 */
141 public static void setExtendsList(List<String> extendList) {
142 extendsList = extendList;
143 }
144
145 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530146 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530147 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530148 * @param file file
149 * @param imports imports for the file
150 * @param curNode current YANG node
151 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530152 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530153 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530154 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530155 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode, boolean isAttrPresent)
156 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530157
Vinod Kumar S38046502016-03-23 15:30:27 +0530158 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530159
Vinod Kumar S38046502016-03-23 15:30:27 +0530160 String className = getCaptialCase(javaFileInfo.getJavaName());
161 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
162
Bharat saraswale2d51d62016-03-23 19:40:35 +0530163 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530164
Bharat saraswal2f11f652016-03-25 18:19:46 +0530165 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530166 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530167 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530168 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530169 try {
170 /**
171 * Getter methods.
172 */
173 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
174 } catch (IOException e) {
175 throw new IOException("No data found in temporary java code fragment files for " + className
176 + " while interface file generation");
177 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530178 }
179 return file;
180 }
181
182 /**
183 * Return generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530184 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530185 * @param file file
186 * @param curNode current YANG node
187 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530188 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530189 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530190 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530191 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
192 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530193
194 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
195
196 String className = getCaptialCase(javaFileInfo.getJavaName());
197 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
198
Bharat saraswale2d51d62016-03-23 19:40:35 +0530199 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530200 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530201 if (isAttrPresent) {
202 try {
203 /**
204 * Getter methods.
205 */
206 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK, curNode));
207 /**
208 * Setter methods.
209 */
210 methods.add(NEW_LINE);
211 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK, curNode));
212 } catch (IOException e) {
213 throw new IOException("No data found in temporary java code fragment files for " + className
214 + " while builder interface file generation");
215 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530216 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530217 /**
218 * Add build method to builder interface file.
219 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530220 methods.add(
221 ((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530222
223 /**
224 * Add getters and setters in builder interface.
225 */
226 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530227 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530228 }
229
Bharat saraswale2d51d62016-03-23 19:40:35 +0530230 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530231 return file;
232 }
233
234 /**
235 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530236 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530237 * @param file file
238 * @param imports imports for the file
239 * @param curNode current YANG node
240 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530241 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530242 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530243 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530244 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530245 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530246
247 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
248
249 String className = getCaptialCase(javaFileInfo.getJavaName());
250 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
251
Bharat saraswale2d51d62016-03-23 19:40:35 +0530252 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530253
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530254 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530255
Bharat saraswal2f11f652016-03-25 18:19:46 +0530256 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530257 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530258 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530259 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530260 try {
261 insertDataIntoJavaFile(file,
262 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
263 } catch (IOException e) {
264 throw new IOException("No data found in temporary java code fragment files for " + className
265 + " while builder class file generation");
266 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530267
Bharat saraswal2f11f652016-03-25 18:19:46 +0530268 try {
269 /**
270 * Getter methods.
271 */
272 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
273 /**
274 * Setter methods.
275 */
276 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK, curNode) + NEW_LINE);
277 } catch (IOException e) {
278 throw new IOException("No data found in temporary java code fragment files for " + className
279 + " while builder class file generation");
280 }
281 } else {
282 insertDataIntoJavaFile(file, NEW_LINE);
283 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530284 /**
285 * Add default constructor and build method impl.
286 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530287 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
288 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
289 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530290
291 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530292 * Add methods in builder class.
293 */
294 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530295 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530296 }
297 return file;
298 }
299
300 /**
301 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530302 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530303 * @param file file
304 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530305 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530306 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530307 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530308 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530309 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530310 throws IOException {
311
312 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
313
314 String className = getCaptialCase(javaFileInfo.getJavaName());
315 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
316
Bharat saraswale2d51d62016-03-23 19:40:35 +0530317 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530318
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530319 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530320 if (isAttrPresent) {
321 /**
322 * Add attribute strings.
323 */
324 try {
325 insertDataIntoJavaFile(file,
326 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
327 } catch (IOException e) {
328 throw new IOException("No data found in temporary java code fragment files for " + className
329 + " while impl class file generation");
330 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530331
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530332 /**
333 * Add attribute for augmented info's list.
334 */
335 if (isHasAugmentationExtended(getExtendsList())) {
336 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
337 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530338 insertDataIntoJavaFile(file, NEW_LINE);
339 try {
340 /**
341 * Getter methods.
342 */
343 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
344
345 /**
346 * Hash code method.
347 */
348 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
349 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
350 /**
351 * Equals method.
352 */
353 methods.add(getEqualsMethodClose(
354 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
355 /**
356 * To string method.
357 */
358 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
359 + getToStringMethodClose());
360
361 } catch (IOException e) {
362 throw new IOException("No data found in temporary java code fragment files for " + className
363 + " while impl class file generation");
364 }
365 } else {
366 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530367 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530368 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530369 /**
370 * Constructor.
371 */
Vinod Kumar S38046502016-03-23 15:30:27 +0530372 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK, curNode)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530373 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530374 } catch (IOException e) {
375 throw new IOException("No data found in temporary java code fragment files for " + className
376 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530377 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530378
379 /**
380 * Add method for augment info's list.
381 */
382 if (isHasAugmentationExtended(getExtendsList())) {
383 methods.add(getAddAugmentInfoMethodImpl());
384 methods.add(getAugmentInfoListImpl());
385 methods.add(getRemoveAugmentationImpl());
386 }
387
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530388 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530389 * Add methods in impl class.
390 */
391 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530392 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530393 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530394 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530395
396 return file;
397 }
398
399 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530400 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530401 *
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530402 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530403 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530404 * @param imports imports for file
405 * @return type def class file
406 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530407 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530408 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530409
Bharat saraswale2d51d62016-03-23 19:40:35 +0530410 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530411
Bharat saraswale2d51d62016-03-23 19:40:35 +0530412 String className = getCaptialCase(javaFileInfo.getJavaName());
413 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530414
Bharat saraswale2d51d62016-03-23 19:40:35 +0530415 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530416
Bharat saraswale2d51d62016-03-23 19:40:35 +0530417 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530418
Bharat saraswale2d51d62016-03-23 19:40:35 +0530419 /**
420 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530421 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530422 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530423 insertDataIntoJavaFile(file,
424 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530425 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530426 throw new IOException("No data found in temporary java code fragment files for " + className
427 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530428 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530429
Bharat saraswale2d51d62016-03-23 19:40:35 +0530430 /**
431 * Default constructor.
432 */
433 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
434 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530435
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530436 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530437
438 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530439 * Type constructor.
440 */
441 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK, curNode));
442
443 /**
444 * Of method.
445 */
446 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK, curNode));
447
448 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530449 * Getter method.
450 */
451 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
452
453 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530454 * Hash code method.
455 */
456 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
457 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
458
459 /**
460 * Equals method.
461 */
462 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
463 + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
464
465 /**
466 * To string method.
467 */
468 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode)
469 + getToStringMethodClose());
470
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530471 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530472 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530473 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530474 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530475
Bharat saraswale2d51d62016-03-23 19:40:35 +0530476 for (String method : methods) {
477 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530478 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530479 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530480
Bharat saraswale2d51d62016-03-23 19:40:35 +0530481 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530482 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530483
484 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530485 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530486 *
487 * @param file generated file
488 * @param curNode current YANG node
489 * @param imports imports for file
490 * @return type def class file
491 * @throws IOException when fails to generate class file
492 */
493 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports) throws IOException {
494
495 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
496
497 String className = getCaptialCase(javaFileInfo.getJavaName());
498 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
499
500 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
501
502 List<String> methods = new ArrayList<>();
503
504 /**
505 * Add attribute strings.
506 */
507 try {
508 insertDataIntoJavaFile(file,
509 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK, curNode));
510 } catch (IOException e) {
511 throw new IOException("No data found in temporary java code fragment files for " + className
512 + " while union class file generation");
513 }
514
515 /**
516 * Default constructor.
517 */
518 methods.add(((HasTempJavaCodeFragmentFiles) curNode).getTempJavaCodeFragmentFiles()
519 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
520
521 try {
522
523 /**
524 * Type constructor.
525 */
526 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK, curNode));
527
528 /**
529 * Of string method.
530 */
531 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK, curNode));
532
533 /**
534 * Getter method.
535 */
536 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK, curNode));
537
538 /**
539 * Hash code method.
540 */
541 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
542 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK, curNode).replace(NEW_LINE, EMPTY_STRING))));
543
544 /**
545 * Equals method.
546 */
547 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
548 + getDataFromTempFileHandle(EQUALS_IMPL_MASK, curNode)));
549
550 /**
551 * To string method.
552 */
553 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
554 getDataFromTempFileHandle(TO_STRING_IMPL_MASK, curNode) + getToStringMethodClose());
555
556 /**
557 * From string method.
558 */
559 methods.add(getFromStringMethodSignature(className)
560 + getDataFromTempFileHandle(UNION_FROM_STRING_IMPL_MASK, curNode)
561 + getFromStringMethodClose());
562
563 } catch (IOException e) {
564 throw new IOException("No data found in temporary java code fragment files for " + className
565 + " while union class file generation");
566 }
567
568 for (String method : methods) {
569 insertDataIntoJavaFile(file, method);
570 }
571 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
572
573 return file;
574 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530575
576 /**
577 * Generates class file for type enum.
578 *
579 * @param file generated file
580 * @param curNode current YANG node
581 * @return class file for type enum
582 * @throws IOException when fails to generate class file
583 */
584 public static File generateEnumClassFile(File file, YangNode curNode) throws IOException {
585
586 JavaFileInfo javaFileInfo = ((HasJavaFileInfo) curNode).getJavaFileInfo();
587
588 String className = getCaptialCase(javaFileInfo.getJavaName());
589 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
590
591 initiateJavaFileGeneration(file, className, GENERATE_ENUM_CLASS, null, path);
592 /**
593 * Add attribute strings.
594 */
595 try {
596 insertDataIntoJavaFile(file,
597 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, curNode), COMMA), NEW_LINE)
598 + SEMI_COLAN + NEW_LINE);
599 } catch (IOException e) {
600 throw new IOException("No data found in temporary java code fragment files for " + className
601 + " while enum class file generation");
602 }
603
604 /**
605 * Add an attribute to get the enum's values.
606 */
607 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
608
609 /**
610 * Add a constructor for enum.
611 */
612 insertDataIntoJavaFile(file,
613 getJavaDoc(TYPE_CONSTRUCTOR, getSmallCase(className), false) + getEnumsConstrcutor(className)
614 + NEW_LINE);
615
616 /**
617 * Add a getter method for enum.
618 */
619 insertDataIntoJavaFile(file,
620 getJavaDoc(GETTER_METHOD, getSmallCase(className), false) + getGetter(INT, getSmallCase(className))
621 + NEW_LINE);
622
623 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
624
625 return file;
626 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530627}