blob: c0cf209771d903e88019e43a9898863500879652 [file] [log] [blame]
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal4bf8b152016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.onosproject.yangutils.datamodel.YangNode;
Vinod Kumar S38046502016-03-23 15:30:27 +053025import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
27import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053028import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053029import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053030
31import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
32import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053034import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053056import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053058import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
janani b4a6711a2016-05-17 13:12:22 +053060import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053061import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
62import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoListImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald72411a2016-04-19 01:00:16 +053064import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstrcutor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053065import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053066import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
67import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053068import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
69import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053070import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053071import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
72import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053073import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053075import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
76import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053077import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
78 .isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053079import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
80import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053081import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053082import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053083import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
84import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswale2d51d62016-03-23 19:40:35 +053085import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
86import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053087import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053088import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
89import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
90import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +053091import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +053092import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswald72411a2016-04-19 01:00:16 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
94import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Gaurav Agrawal56527662016-04-20 15:49:17 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Vinod Kumar S38046502016-03-23 15:30:27 +053097import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.partString;
Bharat saraswald72411a2016-04-19 01:00:16 +053098import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053099
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530100/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530101 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530102 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530103public final class JavaFileGenerator {
104
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530105 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530106 * Flag to check whether generated interface file need to extends any class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530107 */
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530108 private static boolean isExtendsList = false;
109
110 /**
111 * List of classes to be extended by generated interface file.
112 */
113 private static List<String> extendsList = new ArrayList<>();
114
115 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530116 * Creates an instance of java file generator.
117 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530118 private JavaFileGenerator() {
119 }
120
121 /**
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530122 * Returns true if extends list is not empty.
123 *
124 * @return true or false
125 */
126 public static boolean isExtendsList() {
127 return isExtendsList;
128 }
129
130 /**
131 * Sets the value of is extends list.
132 *
133 * @param isExtends true or false
134 */
135 public static void setIsExtendsList(boolean isExtends) {
136 isExtendsList = isExtends;
137 }
138
139 /**
140 * Returns list of extended classes.
141 *
142 * @return list of extended classes
143 */
144 public static List<String> getExtendsList() {
145 return extendsList;
146 }
147
148 /**
149 * Sets the list of extended classes.
150 *
151 * @param extendList list of extended classes
152 */
153 public static void setExtendsList(List<String> extendList) {
154 extendsList = extendList;
155 }
156
157 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530158 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530159 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530160 * @param file file
161 * @param imports imports for the file
162 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530163 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530164 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530165 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530166 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530167 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
168 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530169 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530170
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530171 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530172
janani b4a6711a2016-05-17 13:12:22 +0530173 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530174 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
175
Bharat saraswale2d51d62016-03-23 19:40:35 +0530176 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530177
Bharat saraswal2f11f652016-03-25 18:19:46 +0530178 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530179 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530180 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530181 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530182 try {
183 /**
184 * Getter methods.
185 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530186 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
187 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
188 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530189 } catch (IOException e) {
190 throw new IOException("No data found in temporary java code fragment files for " + className
191 + " while interface file generation");
192 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530193 }
194 return file;
195 }
196
197 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530198 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530199 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 * @param file file
201 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530202 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530203 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530204 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530205 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530206 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
207 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530208
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530209 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530210
janani b4a6711a2016-05-17 13:12:22 +0530211 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530212 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
213
Bharat saraswale2d51d62016-03-23 19:40:35 +0530214 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530215 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530216 if (isAttrPresent) {
217 try {
218 /**
219 * Getter methods.
220 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530221 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
222 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
223 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530224 /**
225 * Setter methods.
226 */
227 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530228 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
229 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
230 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530231 } catch (IOException e) {
232 throw new IOException("No data found in temporary java code fragment files for " + className
233 + " while builder interface file generation");
234 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530235 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530236 /**
237 * Add build method to builder interface file.
238 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530239 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530240 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
241 .addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530242
243 /**
244 * Add getters and setters in builder interface.
245 */
246 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530247 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530248 }
249
Bharat saraswale2d51d62016-03-23 19:40:35 +0530250 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530251 return file;
252 }
253
254 /**
255 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530256 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530257 * @param file file
258 * @param imports imports for the file
259 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530260 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530261 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530262 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530263 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530264 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530265 boolean isAttrPresent)
266 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530267
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530268 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530269
janani b4a6711a2016-05-17 13:12:22 +0530270 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530271 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
272
Bharat saraswale2d51d62016-03-23 19:40:35 +0530273 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530274
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530275 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530276
Bharat saraswal2f11f652016-03-25 18:19:46 +0530277 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530278 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530279 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530280 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530281 try {
282 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530283 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
284 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
285 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530286 } catch (IOException e) {
287 throw new IOException("No data found in temporary java code fragment files for " + className
288 + " while builder class file generation");
289 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530290
Bharat saraswal2f11f652016-03-25 18:19:46 +0530291 try {
292 /**
293 * Getter methods.
294 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530295 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
296 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
297 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530298 /**
299 * Setter methods.
300 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530301 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
302 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
303 .getBeanTempFiles()) +
304 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530305 } catch (IOException e) {
306 throw new IOException("No data found in temporary java code fragment files for " + className
307 + " while builder class file generation");
308 }
309 } else {
310 insertDataIntoJavaFile(file, NEW_LINE);
311 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530312 /**
313 * Add default constructor and build method impl.
314 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530315 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
316 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530317 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530318 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530319
320 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530321 * Add methods in builder class.
322 */
323 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530324 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530325 }
326 return file;
327 }
328
329 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530330 * Returns generated manager class file for current node.
331 *
332 * @param file file
333 * @param imports imports for the file
334 * @param curNode current YANG node
335 * @param isAttrPresent if any attribute is present or not
336 * @return builder class file
337 * @throws IOException when fails to write in file
338 */
339 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
340 boolean isAttrPresent)
341 throws IOException {
342
343 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
344
janani b4a6711a2016-05-17 13:12:22 +0530345 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530346 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
347
348 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
349
350 List<String> methods = new ArrayList<>();
351
Bharat saraswalc0e04842016-05-12 13:16:57 +0530352 try {
353 if (isAttrPresent) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530354 /**
355 * Getter methods.
356 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530357 methods.add(
358 getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
359 ((TempJavaCodeFragmentFilesContainer) curNode)
360 .getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530361 /**
362 * Setter methods.
363 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530364 methods.add(
365 getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
366 ((TempJavaCodeFragmentFilesContainer) curNode)
367 .getTempJavaCodeFragmentFiles().getServiceTempFiles())
368 + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530369
Bharat saraswalc0e04842016-05-12 13:16:57 +0530370 }
371 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530372 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
373 /**
374 * Rpc methods
375 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530376 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
377 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530378 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530379 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530380
381 } catch (IOException e) {
382 throw new IOException("No data found in temporary java code fragment files for " + className
383 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530384 }
385
386 /**
387 * Add methods in builder class.
388 */
389 for (String method : methods) {
390 insertDataIntoJavaFile(file, method);
391 }
392 return file;
393 }
394
395 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530396 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530397 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530398 * @param file file
399 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530400 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530401 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530402 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530403 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530404 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530405 throws IOException {
406
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530407 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530408
janani b4a6711a2016-05-17 13:12:22 +0530409 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530410 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
411
Bharat saraswale2d51d62016-03-23 19:40:35 +0530412 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530413
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530414 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530415 if (isAttrPresent) {
416 /**
417 * Add attribute strings.
418 */
419 try {
420 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530421 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
422 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
423 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530424 } catch (IOException e) {
425 throw new IOException("No data found in temporary java code fragment files for " + className
426 + " while impl class file generation");
427 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530428
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530429 /**
430 * Add attribute for augmented info's list.
431 */
432 if (isHasAugmentationExtended(getExtendsList())) {
433 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
434 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530435 insertDataIntoJavaFile(file, NEW_LINE);
436 try {
437 /**
438 * Getter methods.
439 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530440 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
441 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
442 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530443
444 /**
445 * Hash code method.
446 */
447 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530448 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
449 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
450 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530451 /**
452 * Equals method.
453 */
454 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530455 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
456 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
457 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530458 /**
459 * To string method.
460 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530461 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
462 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
463 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530464 + getToStringMethodClose());
465
466 } catch (IOException e) {
467 throw new IOException("No data found in temporary java code fragment files for " + className
468 + " while impl class file generation");
469 }
470 } else {
471 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530472 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530473 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530474 /**
475 * Constructor.
476 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530477 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
478 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530479 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530480 } catch (IOException e) {
481 throw new IOException("No data found in temporary java code fragment files for " + className
482 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530483 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530484
485 /**
486 * Add method for augment info's list.
487 */
488 if (isHasAugmentationExtended(getExtendsList())) {
489 methods.add(getAddAugmentInfoMethodImpl());
490 methods.add(getAugmentInfoListImpl());
491 methods.add(getRemoveAugmentationImpl());
492 }
493
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530494 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530495 * Add methods in impl class.
496 */
497 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530498 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530499 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530500 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530501
502 return file;
503 }
504
505 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530506 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530507 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530508 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530509 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530510 * @param imports imports for file
511 * @return type def class file
512 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530513 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530514 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
515 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530516
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530517 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530518
janani b4a6711a2016-05-17 13:12:22 +0530519 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530520 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530521
Bharat saraswale2d51d62016-03-23 19:40:35 +0530522 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530523
Bharat saraswale2d51d62016-03-23 19:40:35 +0530524 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530525
Bharat saraswale2d51d62016-03-23 19:40:35 +0530526 /**
527 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530528 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530529 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530530 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530531 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
532 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
533 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530534 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530535 throw new IOException("No data found in temporary java code fragment files for " + className
536 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530537 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530538
Bharat saraswale2d51d62016-03-23 19:40:35 +0530539 /**
540 * Default constructor.
541 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530542 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530543 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530544
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530545 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530546
547 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530548 * Type constructor.
549 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530550 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
551 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530552
553 /**
554 * Of method.
555 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530556 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
557 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530558
559 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530560 * Getter method.
561 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530562 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
563 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530564
565 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530566 * Hash code method.
567 */
568 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530569 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
570 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
571 .getTypeTempFiles())
572 .replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530573
574 /**
575 * Equals method.
576 */
577 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530578 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
579 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530580
581 /**
582 * To string method.
583 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530584 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
585 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530586 + getToStringMethodClose());
587
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530588 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530589 /**
590 * From string method.
591 */
592 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530593 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
594 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530595
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530596 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530597 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530598 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530599 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530600
Bharat saraswale2d51d62016-03-23 19:40:35 +0530601 for (String method : methods) {
602 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530603 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530604 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530605
Bharat saraswale2d51d62016-03-23 19:40:35 +0530606 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530607 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530608
609 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530610 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530611 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530612 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530613 * @param curNode current YANG node
614 * @param imports imports for file
615 * @return type def class file
616 * @throws IOException when fails to generate class file
617 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530618 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
619 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530620
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530621 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530622
janani b4a6711a2016-05-17 13:12:22 +0530623 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530624 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
625
626 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
627
628 List<String> methods = new ArrayList<>();
629
630 /**
631 * Add attribute strings.
632 */
633 try {
634 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530635 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
636 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
637 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530638 } catch (IOException e) {
639 throw new IOException("No data found in temporary java code fragment files for " + className
640 + " while union class file generation");
641 }
642
643 /**
644 * Default constructor.
645 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530646 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530647 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
648
649 try {
650
651 /**
652 * Type constructor.
653 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530654 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
655 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530656
657 /**
658 * Of string method.
659 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530660 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
661 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530662
663 /**
664 * Getter method.
665 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530666 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
667 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530668
669 /**
670 * Hash code method.
671 */
672 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530673 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
674 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
675 .getTypeTempFiles())
676 .replace(NEW_LINE, EMPTY_STRING))));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530677
678 /**
679 * Equals method.
680 */
681 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530682 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
683 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530684
685 /**
686 * To string method.
687 */
688 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530689 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
690 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
691 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530692
693 /**
694 * From string method.
695 */
696 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530697 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
698 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530699 + getFromStringMethodClose());
700
701 } catch (IOException e) {
702 throw new IOException("No data found in temporary java code fragment files for " + className
703 + " while union class file generation");
704 }
705
706 for (String method : methods) {
707 insertDataIntoJavaFile(file, method);
708 }
709 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
710
711 return file;
712 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530713
714 /**
715 * Generates class file for type enum.
716 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530717 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530718 * @param curNode current YANG node
719 * @return class file for type enum
720 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530721 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530722 public static File generateEnumClassFile(File file, YangNode curNode)
723 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530724
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530725 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald72411a2016-04-19 01:00:16 +0530726
janani b4a6711a2016-05-17 13:12:22 +0530727 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +0530728 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
729
janani b4a6711a2016-05-17 13:12:22 +0530730 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path);
Bharat saraswald72411a2016-04-19 01:00:16 +0530731 /**
732 * Add attribute strings.
733 */
734 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530735 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530736 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530737 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
738 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530739 + SEMI_COLAN + NEW_LINE);
740 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530741 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +0530742 + " while enum class file generation");
743 }
744
745 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530746 * Add an
747 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530748 */
janani b4a6711a2016-05-17 13:12:22 +0530749 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +0530750
751 /**
752 * Add a constructor for enum.
753 */
janani b4a6711a2016-05-17 13:12:22 +0530754 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false)
755 + getEnumsConstrcutor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530756
757 TempJavaEnumerationFragmentFiles enumFragFiles =
758 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
759 .getEnumerationTempFiles();
760 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
761 enumFragFiles.getJavaAttributeForEnum(),
762 enumFragFiles.getEnumSetJavaMap(),
763 enumFragFiles.getEnumStringList())
764 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530765
766 /**
767 * Add a getter method for enum.
768 */
janani b4a6711a2016-05-17 13:12:22 +0530769 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false)
770 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530771
772 try {
janani b4a6711a2016-05-17 13:12:22 +0530773 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className))
Bharat saraswalc0e04842016-05-12 13:16:57 +0530774 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
775 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
776 .getEnumerationTempFiles())
777 + getFromStringMethodClose());
778 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +0530779 throw new IOException("No data found in temporary java code fragment files for " +
780 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +0530781 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530782
783 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
784
785 return file;
786 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530787
788 /**
789 * Generates interface file for rpc.
790 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530791 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530792 * @param curNode current YANG node
793 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530794 * @param isAttributePresent is attribute present
795 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530796 * @throws IOException when fails to generate class file
797 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530798 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
799 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530800 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530801
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530802 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530803
janani b4a6711a2016-05-17 13:12:22 +0530804 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530805 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
806
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530807 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530808
809 List<String> methods = new ArrayList<>();
810
811 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530812 if (isAttributePresent) {
813
814 /**
815 * Getter methods.
816 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530817 methods.add(getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530818 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
819 .getServiceTempFiles()));
820 /**
821 * Setter methods.
822 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530823 methods.add(getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530824 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
825 .getServiceTempFiles()));
826 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530827 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
828 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
829 /**
830 * Rpc methods
831 */
832 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
833 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles()));
834 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530835 } catch (IOException e) {
836 throw new IOException("No data found in temporary java code fragment files for " + className
837 + " while rpc class file generation");
838 }
839
840 for (String method : methods) {
841 insertDataIntoJavaFile(file, method);
842 }
843 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
844
845 return file;
846 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530847
848 /**
849 * Generates event file.
850 *
851 * @param file generated file
852 * @param curNode current YANG node
853 * @param imports imports for file
854 * @throws IOException when fails to generate class file
855 */
856 public static void generateEventFile(File file, YangNode curNode, List<String> imports)
857 throws IOException {
858
859 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
860
janani b4a6711a2016-05-17 13:12:22 +0530861 String className = getCapitalCase(javaFileInfo.getJavaName()) + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530862 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
863
864 initiateJavaFileGeneration(file, className, GENERATE_EVENT_CLASS, imports, path);
865
866 insertDataIntoJavaFile(file, getEventFileContents(className, javaFileInfo.getJavaName()));
867 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
868 }
869
870 private static String getEventFileContents(String eventClassname, String classname) {
871 return "\n" +
872 " public enum Type {\n" +
873 " /**\n" +
874 " * " + eventClassname + "notification.\n" +
875 " */\n" +
876 " " + classname.toUpperCase() + "_EVENT\n" +
877 " }\n" +
878 "\n" +
879 " /**\n" +
880 " * Creates " + classname + " event with type and subject.\n" +
881 " *\n" +
882 " * @param type event type\n" +
883 " * @param subject subject interface\n" +
884 " */\n" +
885 " public " + eventClassname + "(Type type, Interface subject) {\n" +
886 " super(type, subject);\n" +
887 " }\n" +
888 "\n" +
889 " /**\n" +
890 " * Creates " + classname + " event with type, subject and time.\n" +
891 " *\n" +
892 " * @param type event type\n" +
893 " * @param subject subject interface\n" +
894 " * @param time time of event\n" +
895 " */\n" +
896 " public " + eventClassname + "(Type type, Interface subject, long time) {\n" +
897 " super(type, subject, time);\n" +
898 " }\n" +
899 "\n";
900 }
901
902 /**
903 * Generates event listener file.
904 *
905 * @param file generated file
906 * @param curNode current YANG node
907 * @param imports imports for file
908 * @throws IOException when fails to generate class file
909 */
910 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
911 throws IOException {
912
913 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
914
janani b4a6711a2016-05-17 13:12:22 +0530915 String className = getCapitalCase(javaFileInfo.getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530916 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
917
918 initiateJavaFileGeneration(file, className, GENERATE_EVENT_LISTENER_INTERFACE, imports, path);
919 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
920 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530921}