blob: fc24ff907010860484c6e402c543293504e0742f [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;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053034import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Bharat saraswale2d51d62016-03-23 19:40:35 +053035
36import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053067import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053068import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
69import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal33dfa012016-05-17 19:59:16 +053070import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
71import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT_ANNOTATION;
72import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
Bharat saraswald72411a2016-04-19 01:00:16 +053073import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswal33dfa012016-05-17 19:59:16 +053074import static org.onosproject.yangutils.utils.UtilConstants.IMMEDIATE;
Bharat saraswald72411a2016-04-19 01:00:16 +053075import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053076import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053077import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053079import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswald72411a2016-04-19 01:00:16 +053080import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
janani bdd1314f2016-05-19 17:39:50 +053081import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053082import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswal33dfa012016-05-17 19:59:16 +053083import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
85import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053086import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
88import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053089import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053090import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
91import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053092import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
94import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053097import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +053099import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530100
101/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530102 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530103 */
104public final class JavaFileGeneratorUtils {
105
106 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530107 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530108 */
109 private JavaFileGeneratorUtils() {
110 }
111
112 /**
113 * Returns a file object for generated file.
114 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530115 * @param fileName file name
116 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530117 * @param extension file extension
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530118 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530119 * @return file object
120 */
121 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
122
123 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
124 }
125
126 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530127 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530128 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530129 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530130 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswale2d51d62016-03-23 19:40:35 +0530131 * @return data stored in temporary files
132 * @throws IOException when failed to get the data from temporary file handle
133 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530134 public static String getDataFromTempFileHandle(int generatedTempFiles,
135 TempJavaFragmentFiles tempJavaFragmentFiles)
136 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530137
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530138 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530139
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530140 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
141 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
142 }
143
144 TempJavaBeanFragmentFiles beanFragmentFiles = null;
145
146 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
147 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
148 }
149
150 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
151 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
152 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
153 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530154
Bharat saraswalc0e04842016-05-12 13:16:57 +0530155 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
156 return tempJavaFragmentFiles
157 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle());
158 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530159 return tempJavaFragmentFiles
160 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530161 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530162 return tempJavaFragmentFiles
163 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530164 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530165 return tempJavaFragmentFiles
166 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530167 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530168 return tempJavaFragmentFiles
169 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530170 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530171 if (beanFragmentFiles == null) {
172 throw new TranslatorException("Required constructor info is missing.");
173 }
174 return beanFragmentFiles
175 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530176 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530177 return tempJavaFragmentFiles
178 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530179 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530180 return tempJavaFragmentFiles
181 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530182 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530183 return tempJavaFragmentFiles
184 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530185 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530186 if (typeFragmentFiles == null) {
187 throw new TranslatorException("Required of string implementation info is missing.");
188 }
189 return typeFragmentFiles
190 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle());
191 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
192 if (typeFragmentFiles == null) {
193 throw new TranslatorException("Required constructor implementation info is missing.");
194 }
195 return typeFragmentFiles
196 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530197 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530198 return tempJavaFragmentFiles
Bharat saraswalc0e04842016-05-12 13:16:57 +0530199 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle());
200 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
201 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
202 throw new TranslatorException("Required enum info is missing.");
203 }
204 TempJavaEnumerationFragmentFiles enumFragmentFiles =
205 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
206 return enumFragmentFiles
207 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530208 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
209 if (serviceFragmentFiles == null) {
210 throw new TranslatorException("Required rpc interface info is missing.");
211 }
212 return serviceFragmentFiles
213 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530214 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530215 if (serviceFragmentFiles == null) {
216 throw new TranslatorException("Required rpc implementation info is missing.");
217 }
218 return serviceFragmentFiles
219 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle());
Bharat saraswal33dfa012016-05-17 19:59:16 +0530220 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
221 if (serviceFragmentFiles == null) {
222 throw new TranslatorException("Required rpc implementation info is missing.");
223 }
224 return serviceFragmentFiles
225 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle());
226 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
227 if (serviceFragmentFiles == null) {
228 throw new TranslatorException("Required rpc implementation info is missing.");
229 }
230 return serviceFragmentFiles
231 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle());
232 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
233 if (serviceFragmentFiles == null) {
234 throw new TranslatorException("Required rpc implementation info is missing.");
235 }
236 return serviceFragmentFiles
237 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle());
238 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
239 if (serviceFragmentFiles == null) {
240 throw new TranslatorException("Required rpc implementation info is missing.");
241 }
242 return serviceFragmentFiles
243 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle());
244 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
245 if (serviceFragmentFiles == null) {
246 throw new TranslatorException("Required rpc implementation info is missing.");
247 }
248 return serviceFragmentFiles
249 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530250 }
251 return null;
252 }
253
254 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530255 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530256 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530257 * @param file generated file
258 * @param className generated file class name
259 * @param genType generated file type
260 * @param imports imports for the file
261 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530262 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530263 * @throws IOException when fails to generate a file
264 */
sangyun-han19f8d352016-05-30 19:33:27 +0900265 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530266 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530268
269 try {
270 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900271 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530272 } catch (IOException e) {
273 throw new IOException("Failed to create " + file.getName() + " class file.");
274 }
275 }
276
277 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530278 * Initiates generation of file based on generated file type.
279 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530280 * @param file generated file
281 * @param genType generated file type
282 * @param imports imports for the file
283 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530284 * @param className class name
285 * @throws IOException when fails to generate a file
286 */
sangyun-han19f8d352016-05-30 19:33:27 +0900287 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530288 YangNode curNode, String className)
289 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530290
291 try {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530292 if (file.exists()) {
293 throw new IOException(file.getName() + " is reused due to YANG naming");
294 }
295
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530296 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900297 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530298 } catch (IOException e) {
299 throw new IOException("Failed to create " + file.getName() + " class file.");
300 }
301 }
302
303 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530304 * Appends all the contents into a generated java file.
305 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530306 * @param file generated file
307 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900308 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530309 * @param curNode current YANG node
310 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900311 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530312 */
sangyun-han19f8d352016-05-30 19:33:27 +0900313 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530314 String className)
315 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530316
317 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
318
Bharat saraswal33dfa012016-05-17 19:59:16 +0530319 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530320 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530321
Bharat saraswal33dfa012016-05-17 19:59:16 +0530322 String pkgString = null;
sangyun-han19f8d352016-05-30 19:33:27 +0900323 if (genType == GENERATE_EVENT_CLASS
324 || genType == GENERATE_EVENT_LISTENER_INTERFACE
325 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530326 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530327 } else {
328 pkgString = parsePackageString(path, importsList);
329 }
sangyun-han19f8d352016-05-30 19:33:27 +0900330 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530331 case INTERFACE_MASK:
332 appendHeaderContents(file, pkgString, importsList);
333 write(file, genType, INTERFACE, curNode, className);
334 break;
335 case GENERATE_SERVICE_AND_MANAGER:
336 appendHeaderContents(file, pkgString, importsList);
337 write(file, genType, RPC_INTERFACE, curNode, className);
338 break;
339 case GENERATE_EVENT_CLASS:
340 appendHeaderContents(file, pkgString, importsList);
341 write(file, genType, EVENT, curNode, className);
342 break;
343 case GENERATE_EVENT_LISTENER_INTERFACE:
344 appendHeaderContents(file, pkgString, importsList);
345 write(file, genType, EVENT_LISTENER, curNode, className);
346 break;
347 case GENERATE_EVENT_SUBJECT_CLASS:
348 appendHeaderContents(file, pkgString, importsList);
349 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
350 break;
351 default:
352 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530353 }
354 }
355
356 /**
357 * Appends all the contents into a generated java file.
358 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530359 * @param file generated file
360 * @param fileName generated file name
361 * @param genType generated file type
362 * @param importsList list of java imports
363 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900364 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530365 * @throws IOException when fails to append contents
366 */
sangyun-han19f8d352016-05-30 19:33:27 +0900367 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530368 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530369 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530370
371 String pkgString = parsePackageString(pkg, importsList);
372
sangyun-han19f8d352016-05-30 19:33:27 +0900373 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530374 case IMPL_CLASS_MASK:
375 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
376 break;
377 case BUILDER_INTERFACE_MASK:
378 write(file, fileName, genType, BUILDER_INTERFACE, pluginConfig);
379 break;
380 case GENERATE_TYPEDEF_CLASS:
381 appendHeaderContents(file, pkgString, importsList);
382 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
383 break;
384 case BUILDER_CLASS_MASK:
385 appendHeaderContents(file, pkgString, importsList);
386 write(file, fileName, genType, BUILDER_CLASS, pluginConfig);
387 break;
388 case GENERATE_UNION_CLASS:
389 appendHeaderContents(file, pkgString, importsList);
390 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
391 break;
392 case GENERATE_ENUM_CLASS:
393 appendHeaderContents(file, pkgString, importsList);
394 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
395 break;
396 default:
397 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530398 }
399 }
400
401 /**
402 * Removes base directory path from package and generates package string for file.
403 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530404 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530405 * @param importsList list of imports
406 * @return package string
407 */
408 private static String parsePackageString(String javaPkg, List<String> importsList) {
409
Bharat saraswal33dfa012016-05-17 19:59:16 +0530410 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530411 if (importsList != null) {
412 if (!importsList.isEmpty()) {
413 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
414 } else {
415 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
416 }
417 } else {
418 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
419 }
420 }
421
422 /**
423 * Appends other contents to interface, builder and typedef classes.
424 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530425 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530426 * @param file generated file
427 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530428 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530429 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530430 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530431 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
432 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530433
434 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
435 insertDataIntoJavaFile(file, pkg);
436
437 /*
438 * TODO: add the file header using
439 * JavaCodeSnippetGen.getFileHeaderComment
440 */
441
442 if (importsList != null) {
443 insertDataIntoJavaFile(file, NEW_LINE);
444 for (String imports : importsList) {
445 insertDataIntoJavaFile(file, imports);
446 }
447 }
448 }
449
450 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530451 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530452 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530453 * @param file generated file
454 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530455 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530456 * @param curNode current YANG node
457 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530458 * @throws IOException when fails to write into a file
459 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530460 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530461 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530462
Bharat saraswal33dfa012016-05-17 19:59:16 +0530463 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530464 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530465 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
466 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530467 insertDataIntoJavaFile(file, addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530468 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530469 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530470 }
471 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530472 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530473 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530474 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
475 }
476
477 /**
478 * Writes data to the specific generated file.
479 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530480 * @param file generated file
481 * @param fileName file name
482 * @param genType generated file type
483 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900484 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900485 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530486 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530487 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
488 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530489 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530490 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530491 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530492 }
493
Bharat saraswald72411a2016-04-19 01:00:16 +0530494 /**
495 * Returns integer attribute for enum's class to get the values.
496 *
497 * @param className enum's class name
498 * @return enum's attribute
499 */
500 public static String getEnumsValueAttribute(String className) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530501 return NEW_LINE + FOUR_SPACE_INDENTATION + PRIVATE + SPACE + INT + SPACE + getSmallCase(className)
502 + SEMI_COLAN + NEW_LINE;
Bharat saraswald72411a2016-04-19 01:00:16 +0530503 }
504
Bharat saraswal33dfa012016-05-17 19:59:16 +0530505 /**
506 * Returns component string.
507 *
508 * @return component string
509 */
510 public static String addComponentString() {
511 return NEW_LINE + COMPONENT_ANNOTATION + SPACE + OPEN_PARENTHESIS + IMMEDIATE + SPACE
512 + EQUAL + SPACE + TRUE + CLOSE_PARENTHESIS + NEW_LINE + SERVICE_ANNOTATION;
513 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530514}