blob: 26487d8a51b8c9f2a93707d2bd522aee8569f477 [file] [log] [blame]
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal4bf8b152016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Vinod Kumar S38046502016-03-23 15:30:27 +053024import org.onosproject.yangutils.datamodel.YangNode;
Vinod Kumar S38046502016-03-23 15:30:27 +053025import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
27import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
28import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053029
30import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
31import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053032import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053033import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
34import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053036import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
39import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053055import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getAugmentedInfoAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053056import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswald72411a2016-04-19 01:00:16 +053057import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getEnumsValueAttribute;
Bharat saraswale2d51d62016-03-23 19:40:35 +053058import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Vinod Kumar S38046502016-03-23 15:30:27 +053059import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
Bharat saraswald72411a2016-04-19 01:00:16 +053060import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
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;
Vinod Kumar S38046502016-03-23 15:30:27 +053065import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
66import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053067import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
68import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053069import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Vinod Kumar S38046502016-03-23 15:30:27 +053070import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
71import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053072import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswalcc1cdab2016-04-16 02:28:25 +053073import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRemoveAugmentationImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053074import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
75import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053076import static org.onosproject.yangutils.translator.tojava.utils.TempJavaCodeFragmentFilesUtils
77 .isHasAugmentationExtended;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
79import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald72411a2016-04-19 01:00:16 +053080import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswale2d51d62016-03-23 19:40:35 +053081import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053082import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
83import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
85import static org.onosproject.yangutils.utils.UtilConstants.IMPL;
Bharat saraswald72411a2016-04-19 01:00:16 +053086import static org.onosproject.yangutils.utils.UtilConstants.INT;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053087import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
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 saraswal2f11f652016-03-25 18:19:46 +0530167 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode, boolean isAttrPresent)
168 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530169
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530170 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530171
Vinod Kumar S38046502016-03-23 15:30:27 +0530172 String className = getCaptialCase(javaFileInfo.getJavaName());
173 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
174
Bharat saraswale2d51d62016-03-23 19:40:35 +0530175 initiateJavaFileGeneration(file, className, INTERFACE_MASK, imports, path);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530176
Bharat saraswal2f11f652016-03-25 18:19:46 +0530177 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530178 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530179 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530181 try {
182 /**
183 * Getter methods.
184 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
186 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
187 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530188 } catch (IOException e) {
189 throw new IOException("No data found in temporary java code fragment files for " + className
190 + " while interface file generation");
191 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530192 }
193 return file;
194 }
195
196 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530197 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530198 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530199 * @param file file
200 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530201 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530202 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530203 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530204 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530205 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
206 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530207
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530208 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530209
210 String className = getCaptialCase(javaFileInfo.getJavaName());
211 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
212
Bharat saraswale2d51d62016-03-23 19:40:35 +0530213 initiateJavaFileGeneration(file, className, BUILDER_INTERFACE_MASK, null, path);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530214 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530215 if (isAttrPresent) {
216 try {
217 /**
218 * Getter methods.
219 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530220 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
221 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
222 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530223 /**
224 * Setter methods.
225 */
226 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530227 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
228 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
229 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530230 } catch (IOException e) {
231 throw new IOException("No data found in temporary java code fragment files for " + className
232 + " while builder interface file generation");
233 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530234 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530235 /**
236 * Add build method to builder interface file.
237 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530238 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530239 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
240 .addBuildMethodForInterface());
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530241
242 /**
243 * Add getters and setters in builder interface.
244 */
245 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530246 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530247 }
248
Bharat saraswale2d51d62016-03-23 19:40:35 +0530249 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530250 return file;
251 }
252
253 /**
254 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530255 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530256 * @param file file
257 * @param imports imports for the file
258 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530259 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530260 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530261 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530262 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530263 public static File generateBuilderClassFile(File file, List<String> imports, YangNode curNode,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530264 boolean isAttrPresent)
265 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530266
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530268
269 String className = getCaptialCase(javaFileInfo.getJavaName());
270 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
271
Bharat saraswale2d51d62016-03-23 19:40:35 +0530272 initiateJavaFileGeneration(file, className, BUILDER_CLASS_MASK, imports, path);
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530273
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530274 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530275
Bharat saraswal2f11f652016-03-25 18:19:46 +0530276 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530277 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530278 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530279 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530280 try {
281 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530282 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
283 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
284 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530285 } catch (IOException e) {
286 throw new IOException("No data found in temporary java code fragment files for " + className
287 + " while builder class file generation");
288 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530289
Bharat saraswal2f11f652016-03-25 18:19:46 +0530290 try {
291 /**
292 * Getter methods.
293 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530294 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
295 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
296 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530297 /**
298 * Setter methods.
299 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530300 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
301 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
302 .getBeanTempFiles()) +
303 NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530304 } catch (IOException e) {
305 throw new IOException("No data found in temporary java code fragment files for " + className
306 + " while builder class file generation");
307 }
308 } else {
309 insertDataIntoJavaFile(file, NEW_LINE);
310 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530311 /**
312 * Add default constructor and build method impl.
313 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530314 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().addBuildMethodImpl());
315 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530316 .addDefaultConstructor(PUBLIC, BUILDER));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530317
318 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530319 * Add methods in builder class.
320 */
321 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530322 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530323 }
324 return file;
325 }
326
327 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530328 * Returns generated manager class file for current node.
329 *
330 * @param file file
331 * @param imports imports for the file
332 * @param curNode current YANG node
333 * @param isAttrPresent if any attribute is present or not
334 * @return builder class file
335 * @throws IOException when fails to write in file
336 */
337 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode,
338 boolean isAttrPresent)
339 throws IOException {
340
341 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
342
343 String className = getCaptialCase(javaFileInfo.getJavaName()) + MANAGER;
344 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
345
346 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
347
348 List<String> methods = new ArrayList<>();
349
350 if (isAttrPresent) {
351
352 try {
353 /**
354 * Getter methods.
355 */
356 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
357 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
358 .getServiceTempFiles()));
359 /**
360 * Setter methods.
361 */
362 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
363 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
364 .getServiceTempFiles()) +
365 NEW_LINE);
366
367 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
368 /**
369 * Rpc methods
370 */
371 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
372 .getServiceTempFiles()));
373 } catch (IOException e) {
374 throw new IOException("No data found in temporary java code fragment files for " + className
375 + " while manager class file generation");
376 }
377 } else {
378 insertDataIntoJavaFile(file, NEW_LINE);
379 }
380
381 /**
382 * Add methods in builder class.
383 */
384 for (String method : methods) {
385 insertDataIntoJavaFile(file, method);
386 }
387 return file;
388 }
389
390 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530391 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530392 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530393 * @param file file
394 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530395 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530396 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530397 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530398 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530399 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent)
Vinod Kumar S38046502016-03-23 15:30:27 +0530400 throws IOException {
401
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530402 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530403
404 String className = getCaptialCase(javaFileInfo.getJavaName());
405 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
406
Bharat saraswale2d51d62016-03-23 19:40:35 +0530407 initiateJavaFileGeneration(file, className, IMPL_CLASS_MASK, null, path);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530408
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530409 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530410 if (isAttrPresent) {
411 /**
412 * Add attribute strings.
413 */
414 try {
415 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530416 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
417 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
418 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530419 } catch (IOException e) {
420 throw new IOException("No data found in temporary java code fragment files for " + className
421 + " while impl class file generation");
422 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530423
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530424 /**
425 * Add attribute for augmented info's list.
426 */
427 if (isHasAugmentationExtended(getExtendsList())) {
428 insertDataIntoJavaFile(file, getAugmentedInfoAttribute());
429 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530430 insertDataIntoJavaFile(file, NEW_LINE);
431 try {
432 /**
433 * Getter methods.
434 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530435 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
436 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
437 .getBeanTempFiles()));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530438
439 /**
440 * Hash code method.
441 */
442 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530443 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
444 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
445 .getBeanTempFiles()).replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530446 /**
447 * Equals method.
448 */
449 methods.add(getEqualsMethodClose(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530450 getEqualsMethodOpen(className + IMPL) + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
451 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
452 .getBeanTempFiles())));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530453 /**
454 * To string method.
455 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530456 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
457 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
458 .getBeanTempFiles())
Bharat saraswal2f11f652016-03-25 18:19:46 +0530459 + getToStringMethodClose());
460
461 } catch (IOException e) {
462 throw new IOException("No data found in temporary java code fragment files for " + className
463 + " while impl class file generation");
464 }
465 } else {
466 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530467 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530468 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530469 /**
470 * Constructor.
471 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530472 methods.add(getConstructorStart(className) + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
473 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getBeanTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530474 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530475 } catch (IOException e) {
476 throw new IOException("No data found in temporary java code fragment files for " + className
477 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530478 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530479
480 /**
481 * Add method for augment info's list.
482 */
483 if (isHasAugmentationExtended(getExtendsList())) {
484 methods.add(getAddAugmentInfoMethodImpl());
485 methods.add(getAugmentInfoListImpl());
486 methods.add(getRemoveAugmentationImpl());
487 }
488
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530489 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530490 * Add methods in impl class.
491 */
492 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530493 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + method + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530494 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530495 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530496
497 return file;
498 }
499
500 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530501 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530502 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530503 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530504 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530505 * @param imports imports for file
506 * @return type def class file
507 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530508 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530509 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
510 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530511
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530512 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S38046502016-03-23 15:30:27 +0530513
Bharat saraswale2d51d62016-03-23 19:40:35 +0530514 String className = getCaptialCase(javaFileInfo.getJavaName());
515 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530516
Bharat saraswale2d51d62016-03-23 19:40:35 +0530517 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path);
Vinod Kumar S38046502016-03-23 15:30:27 +0530518
Bharat saraswale2d51d62016-03-23 19:40:35 +0530519 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530520
Bharat saraswale2d51d62016-03-23 19:40:35 +0530521 /**
522 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530523 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530524 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530525 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530526 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
527 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
528 .getTypeTempFiles()));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530529 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530530 throw new IOException("No data found in temporary java code fragment files for " + className
531 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530532 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530533
Bharat saraswale2d51d62016-03-23 19:40:35 +0530534 /**
535 * Default constructor.
536 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530537 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswale2d51d62016-03-23 19:40:35 +0530538 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
Vinod Kumar S38046502016-03-23 15:30:27 +0530539
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530540 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530541
542 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530543 * Type constructor.
544 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530545 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
546 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530547
548 /**
549 * Of method.
550 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530551 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
552 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530553
554 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530555 * Getter method.
556 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530557 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
558 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530559
560 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530561 * Hash code method.
562 */
563 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530564 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
565 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
566 .getTypeTempFiles())
567 .replace(NEW_LINE, EMPTY_STRING))));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530568
569 /**
570 * Equals method.
571 */
572 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530573 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
574 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530575
576 /**
577 * To string method.
578 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530579 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
580 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Bharat saraswale2d51d62016-03-23 19:40:35 +0530581 + getToStringMethodClose());
582
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530583 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530584 /**
585 * From string method.
586 */
587 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530588 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
589 .getTypeTempFiles()) + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530590
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530591 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530592 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530593 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530594 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530595
Bharat saraswale2d51d62016-03-23 19:40:35 +0530596 for (String method : methods) {
597 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530598 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530599 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530600
Bharat saraswale2d51d62016-03-23 19:40:35 +0530601 return file;
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530602 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530603
604 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530605 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530606 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530607 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530608 * @param curNode current YANG node
609 * @param imports imports for file
610 * @return type def class file
611 * @throws IOException when fails to generate class file
612 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530613 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
614 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530615
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530616 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530617
618 String className = getCaptialCase(javaFileInfo.getJavaName());
619 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
620
621 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path);
622
623 List<String> methods = new ArrayList<>();
624
625 /**
626 * Add attribute strings.
627 */
628 try {
629 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530630 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
631 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
632 .getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530633 } catch (IOException e) {
634 throw new IOException("No data found in temporary java code fragment files for " + className
635 + " while union class file generation");
636 }
637
638 /**
639 * Default constructor.
640 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530641 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530642 .addDefaultConstructor(PRIVATE, EMPTY_STRING));
643
644 try {
645
646 /**
647 * Type constructor.
648 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530649 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
650 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530651
652 /**
653 * Of string method.
654 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530655 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
656 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530657
658 /**
659 * Getter method.
660 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530661 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
662 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles()));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530663
664 /**
665 * Hash code method.
666 */
667 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() + partString(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530668 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
669 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
670 .getTypeTempFiles())
671 .replace(NEW_LINE, EMPTY_STRING))));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530672
673 /**
674 * Equals method.
675 */
676 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530677 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
678 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530679
680 /**
681 * To string method.
682 */
683 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530684 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
685 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
686 .getTypeTempFiles()) + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530687
688 /**
689 * From string method.
690 */
691 methods.add(getFromStringMethodSignature(className)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530692 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
693 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles())
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530694 + getFromStringMethodClose());
695
696 } catch (IOException e) {
697 throw new IOException("No data found in temporary java code fragment files for " + className
698 + " while union class file generation");
699 }
700
701 for (String method : methods) {
702 insertDataIntoJavaFile(file, method);
703 }
704 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
705
706 return file;
707 }
Bharat saraswald72411a2016-04-19 01:00:16 +0530708
709 /**
710 * Generates class file for type enum.
711 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530712 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +0530713 * @param curNode current YANG node
714 * @return class file for type enum
715 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530716 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530717 public static File generateEnumClassFile(File file, YangNode curNode)
718 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +0530719
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530720 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald72411a2016-04-19 01:00:16 +0530721
722 String className = getCaptialCase(javaFileInfo.getJavaName());
723 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
724
725 initiateJavaFileGeneration(file, className, GENERATE_ENUM_CLASS, null, path);
726 /**
727 * Add attribute strings.
728 */
729 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530730 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +0530731 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530732 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
733 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles()), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +0530734 + SEMI_COLAN + NEW_LINE);
735 } catch (IOException e) {
736 throw new IOException("No data found in temporary java code fragment files for " + className
737 + " while enum class file generation");
738 }
739
740 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530741 * Add an
742 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +0530743 */
744 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
745
746 /**
747 * Add a constructor for enum.
748 */
749 insertDataIntoJavaFile(file,
750 getJavaDoc(TYPE_CONSTRUCTOR, getSmallCase(className), false) + getEnumsConstrcutor(className)
751 + NEW_LINE);
752
753 /**
754 * Add a getter method for enum.
755 */
756 insertDataIntoJavaFile(file,
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530757 getJavaDoc(GETTER_METHOD, getSmallCase(className), false)
758 + getGetter(INT, getSmallCase(className), GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +0530759
760 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
761
762 return file;
763 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530764
765 /**
766 * Generates interface file for rpc.
767 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530768 * @param file generated file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530769 * @param curNode current YANG node
770 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530771 * @param isAttributePresent is attribute present
772 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +0530773 * @throws IOException when fails to generate class file
774 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530775 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports,
776 boolean isAttributePresent)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530777 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +0530778
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530779 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +0530780
781 String className = getCaptialCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
782 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
783
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530784 initiateJavaFileGeneration(file, className, GENERATE_SERVICE_AND_MANAGER, imports, path);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530785
786 List<String> methods = new ArrayList<>();
787
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530788
Gaurav Agrawal56527662016-04-20 15:49:17 +0530789 try {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530790 if (isAttributePresent) {
791
792 /**
793 * Getter methods.
794 */
795 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
796 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
797 .getServiceTempFiles()));
798 /**
799 * Setter methods.
800 */
801 methods.add(NEW_LINE);
802 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
803 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
804 .getServiceTempFiles()));
805 }
806
Gaurav Agrawal56527662016-04-20 15:49:17 +0530807
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530808 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530809 /**
810 * Rpc methods
811 */
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530812 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530813 .getServiceTempFiles()));
Gaurav Agrawal56527662016-04-20 15:49:17 +0530814
815 } catch (IOException e) {
816 throw new IOException("No data found in temporary java code fragment files for " + className
817 + " while rpc class file generation");
818 }
819
820 for (String method : methods) {
821 insertDataIntoJavaFile(file, method);
822 }
823 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
824
825 return file;
826 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530827
828 /**
829 * Generates event file.
830 *
831 * @param file generated file
832 * @param curNode current YANG node
833 * @param imports imports for file
834 * @throws IOException when fails to generate class file
835 */
836 public static void generateEventFile(File file, YangNode curNode, List<String> imports)
837 throws IOException {
838
839 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
840
841 String className = getCaptialCase(javaFileInfo.getJavaName()) + EVENT_STRING;
842 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
843
844 initiateJavaFileGeneration(file, className, GENERATE_EVENT_CLASS, imports, path);
845
846 insertDataIntoJavaFile(file, getEventFileContents(className, javaFileInfo.getJavaName()));
847 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
848 }
849
850 private static String getEventFileContents(String eventClassname, String classname) {
851 return "\n" +
852 " public enum Type {\n" +
853 " /**\n" +
854 " * " + eventClassname + "notification.\n" +
855 " */\n" +
856 " " + classname.toUpperCase() + "_EVENT\n" +
857 " }\n" +
858 "\n" +
859 " /**\n" +
860 " * Creates " + classname + " event with type and subject.\n" +
861 " *\n" +
862 " * @param type event type\n" +
863 " * @param subject subject interface\n" +
864 " */\n" +
865 " public " + eventClassname + "(Type type, Interface subject) {\n" +
866 " super(type, subject);\n" +
867 " }\n" +
868 "\n" +
869 " /**\n" +
870 " * Creates " + classname + " event with type, subject and time.\n" +
871 " *\n" +
872 " * @param type event type\n" +
873 " * @param subject subject interface\n" +
874 " * @param time time of event\n" +
875 " */\n" +
876 " public " + eventClassname + "(Type type, Interface subject, long time) {\n" +
877 " super(type, subject, time);\n" +
878 " }\n" +
879 "\n";
880 }
881
882 /**
883 * Generates event listener file.
884 *
885 * @param file generated file
886 * @param curNode current YANG node
887 * @param imports imports for file
888 * @throws IOException when fails to generate class file
889 */
890 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
891 throws IOException {
892
893 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
894
895 String className = getCaptialCase(javaFileInfo.getJavaName()) + EVENT_LISTENER_STRING;
896 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
897
898 initiateJavaFileGeneration(file, className, GENERATE_EVENT_LISTENER_INTERFACE, imports, path);
899 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
900 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530901}