blob: 6ebc453b332942b2ddf0b5ce88b5850d4c838ea3 [file] [log] [blame]
Bharat saraswale2d51d62016-03-23 19:40:35 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswale2d51d62016-03-23 19:40:35 +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;
21import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053022
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053023import org.onosproject.yangutils.datamodel.YangNode;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053024import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswale2d51d62016-03-23 19:40:35 +053025import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053027import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
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.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053030import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
31import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053032import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
33import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
34
35import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
39import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
44import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053060import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Bharat saraswal2f11f652016-03-25 18:19:46 +053061import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getJavaPackageFromPackagePath;
Bharat saraswald72411a2016-04-19 01:00:16 +053062import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
63import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
64import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswalc0e04842016-05-12 13:16:57 +053065import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053066import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
67import static org.onosproject.yangutils.utils.UtilConstants.ORG;
68import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswald72411a2016-04-19 01:00:16 +053069import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053070import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswalc0e04842016-05-12 13:16:57 +053071import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053072import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
73import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053074import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053075import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
76import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053077import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053078import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
79import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053080import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
81import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +053082import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053083import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
85
86/**
Bharat saraswald9822e92016-04-05 15:13:44 +053087 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +053088 */
89public final class JavaFileGeneratorUtils {
90
91 /**
Bharat saraswald9822e92016-04-05 15:13:44 +053092 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +053093 */
94 private JavaFileGeneratorUtils() {
95 }
96
97 /**
98 * Returns a file object for generated file.
99 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530100 * @param fileName file name
101 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530102 * @param extension file extension
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530103 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530104 * @return file object
105 */
106 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
107
108 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
109 }
110
111 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530112 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530113 *
114 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530115 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswale2d51d62016-03-23 19:40:35 +0530116 * @return data stored in temporary files
117 * @throws IOException when failed to get the data from temporary file handle
118 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530119 public static String getDataFromTempFileHandle(int generatedTempFiles,
120 TempJavaFragmentFiles tempJavaFragmentFiles)
121 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530122
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530123 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530124
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530125 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
126 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
127 }
128
129 TempJavaBeanFragmentFiles beanFragmentFiles = null;
130
131 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
132 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
133 }
134
135 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
136 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
137 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
138 }
Bharat saraswalc0e04842016-05-12 13:16:57 +0530139 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
140 return tempJavaFragmentFiles
141 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle());
142 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530143 return tempJavaFragmentFiles
144 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530145 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530146 return tempJavaFragmentFiles
147 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530148 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530149 return tempJavaFragmentFiles
150 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530151 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530152 return tempJavaFragmentFiles
153 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530154 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530155 if (beanFragmentFiles == null) {
156 throw new TranslatorException("Required constructor info is missing.");
157 }
158 return beanFragmentFiles
159 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530160 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530161 return tempJavaFragmentFiles
162 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530163 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 return tempJavaFragmentFiles
165 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530166 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530167 return tempJavaFragmentFiles
168 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530169 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530170 if (typeFragmentFiles == null) {
171 throw new TranslatorException("Required of string implementation info is missing.");
172 }
173 return typeFragmentFiles
174 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle());
175 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
176 if (typeFragmentFiles == null) {
177 throw new TranslatorException("Required constructor implementation info is missing.");
178 }
179 return typeFragmentFiles
180 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530181 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530182 return tempJavaFragmentFiles
Bharat saraswalc0e04842016-05-12 13:16:57 +0530183 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle());
184 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
185 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
186 throw new TranslatorException("Required enum info is missing.");
187 }
188 TempJavaEnumerationFragmentFiles enumFragmentFiles =
189 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
190 return enumFragmentFiles
191 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530192 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
193 if (serviceFragmentFiles == null) {
194 throw new TranslatorException("Required rpc interface info is missing.");
195 }
196 return serviceFragmentFiles
197 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530198 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530199 if (serviceFragmentFiles == null) {
200 throw new TranslatorException("Required rpc implementation info is missing.");
201 }
202 return serviceFragmentFiles
203 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530204 }
205 return null;
206 }
207
208 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530209 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530210 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530211 * @param file generated file
Bharat saraswale2d51d62016-03-23 19:40:35 +0530212 * @param className generated file class name
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530213 * @param type generated file type
214 * @param imports imports for the file
215 * @param pkg generated file package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530216 * @throws IOException when fails to generate a file
217 */
218 public static void initiateJavaFileGeneration(File file, String className, int type, List<String> imports,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530219 String pkg)
220 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530221
222 try {
223 file.createNewFile();
224 appendContents(file, className, type, imports, pkg);
225 } catch (IOException e) {
226 throw new IOException("Failed to create " + file.getName() + " class file.");
227 }
228 }
229
230 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530231 * Initiates generation of file based on generated file type.
232 *
233 * @param file generated file
234 * @param type generated file type
235 * @param imports imports for the file
236 * @param curNode current YANG node
237 * @param className class name
238 * @throws IOException when fails to generate a file
239 */
240 public static void initiateJavaFileGeneration(File file, int type, List<String> imports,
241 YangNode curNode, String className) throws IOException {
242
243 try {
244 file.createNewFile();
245 appendContents(file, type, imports, curNode, className);
246 } catch (IOException e) {
247 throw new IOException("Failed to create " + file.getName() + " class file.");
248 }
249 }
250
251 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530252 * Appends all the contents into a generated java file.
253 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530254 * @param file generated file
255 * @param fileName generated file name
256 * @param type generated file type
257 * @param pkg generated file package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530258 * @param importsList list of java imports.
259 * @throws IOException when fails to append contents
260 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530261 private static void appendContents(File file, int type, List<String> importsList, YangNode curNode,
262 String className) throws IOException {
263
264 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
265
266 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
267 String pkgString = parsePackageString(path, importsList);
268
269 switch (type) {
270 case INTERFACE_MASK:
271 appendHeaderContents(file, pkgString, importsList);
272 write(file, type, INTERFACE, curNode, className);
273 break;
274 case GENERATE_SERVICE_AND_MANAGER:
275 appendHeaderContents(file, pkgString, importsList);
276 write(file, type, RPC_INTERFACE, curNode, className);
277 break;
278 case GENERATE_EVENT_CLASS:
279 appendHeaderContents(file, pkgString, importsList);
280 write(file, type, EVENT, curNode, className);
281 break;
282 default:
283 break;
284 }
285 }
286
287 /**
288 * Appends all the contents into a generated java file.
289 *
290 * @param file generated file
291 * @param fileName generated file name
292 * @param type generated file type
293 * @param pkg generated file package
294 * @param importsList list of java imports.
295 * @throws IOException when fails to append contents
296 */
297 private static void appendContents(File file, String fileName, int type, List<String> importsList, String pkg)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530298 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530299
300 String pkgString = parsePackageString(pkg, importsList);
301
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530302 switch (type) {
303 case IMPL_CLASS_MASK:
Bharat saraswale2d51d62016-03-23 19:40:35 +0530304 write(file, fileName, type, IMPL_CLASS);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530305 break;
306 case BUILDER_INTERFACE_MASK:
Bharat saraswale2d51d62016-03-23 19:40:35 +0530307 write(file, fileName, type, BUILDER_INTERFACE);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530308 break;
309 case GENERATE_TYPEDEF_CLASS:
Bharat saraswale2d51d62016-03-23 19:40:35 +0530310 appendHeaderContents(file, pkgString, importsList);
311 write(file, fileName, type, IMPL_CLASS);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530312 break;
313 case BUILDER_CLASS_MASK:
Bharat saraswale2d51d62016-03-23 19:40:35 +0530314 appendHeaderContents(file, pkgString, importsList);
315 write(file, fileName, type, BUILDER_CLASS);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530316 break;
317 case GENERATE_UNION_CLASS:
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530318 appendHeaderContents(file, pkgString, importsList);
319 write(file, fileName, type, IMPL_CLASS);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530320 break;
321 case GENERATE_ENUM_CLASS:
Bharat saraswald72411a2016-04-19 01:00:16 +0530322 appendHeaderContents(file, pkgString, importsList);
323 write(file, fileName, type, ENUM_CLASS);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530324 break;
325 case GENERATE_EVENT_LISTENER_INTERFACE:
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530326 appendHeaderContents(file, pkgString, importsList);
327 write(file, fileName, type, EVENT_LISTENER);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530328 break;
329 default:
330 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530331 }
332 }
333
334 /**
335 * Removes base directory path from package and generates package string for file.
336 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530337 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530338 * @param importsList list of imports
339 * @return package string
340 */
341 private static String parsePackageString(String javaPkg, List<String> importsList) {
342
343 if (javaPkg.contains(ORG)) {
344 String[] strArray = javaPkg.split(ORG);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530345 javaPkg = ORG + getJavaPackageFromPackagePath(strArray[1]);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530346 }
347 if (importsList != null) {
348 if (!importsList.isEmpty()) {
349 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
350 } else {
351 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
352 }
353 } else {
354 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
355 }
356 }
357
358 /**
359 * Appends other contents to interface, builder and typedef classes.
360 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530361 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530362 * @param file generated file
363 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530364 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530365 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530366 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530367 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
368 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530369
370 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
371 insertDataIntoJavaFile(file, pkg);
372
373 /*
374 * TODO: add the file header using
375 * JavaCodeSnippetGen.getFileHeaderComment
376 */
377
378 if (importsList != null) {
379 insertDataIntoJavaFile(file, NEW_LINE);
380 for (String imports : importsList) {
381 insertDataIntoJavaFile(file, imports);
382 }
383 }
384 }
385
386 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530387 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530388 *
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530389 * @param file generated file
390 * @param fileName file name
391 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530392 * @param javaDocType java doc type
393 * @throws IOException when fails to write into a file
394 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530395 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530396 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530397
Bharat saraswalc0e04842016-05-12 13:16:57 +0530398 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
399 if (!fileName.contains(SERVICE)) {
400 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName + MANAGER, false));
401 } else {
402 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false));
403 }
404 } else {
405 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false));
406 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530407 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
408 }
409
410 /**
411 * Writes data to the specific generated file.
412 *
413 * @param file generated file
414 * @param fileName file name
415 * @param genType generated file type
416 * @param javaDocType java doc type
417 * @throws IOException when fails to write into a file
418 */
419 private static void write(File file, String fileName, int genType, JavaDocType javaDocType)
420 throws IOException {
421 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false));
422 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530423 }
424
Bharat saraswald72411a2016-04-19 01:00:16 +0530425 /**
426 * Returns integer attribute for enum's class to get the values.
427 *
428 * @param className enum's class name
429 * @return enum's attribute
430 */
431 public static String getEnumsValueAttribute(String className) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530432 return NEW_LINE + FOUR_SPACE_INDENTATION + PRIVATE + SPACE + INT + SPACE + getSmallCase(className)
433 + SEMI_COLAN + NEW_LINE;
Bharat saraswald72411a2016-04-19 01:00:16 +0530434 }
435
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436}