blob: 4a2b6f5cca1eb222f80e4713ad1e2c7b1223a840 [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;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053068import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053069import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
70import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal33dfa012016-05-17 19:59:16 +053071import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053072import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal33dfa012016-05-17 19:59:16 +053073import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT_ANNOTATION;
74import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
Bharat saraswald72411a2016-04-19 01:00:16 +053075import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswal33dfa012016-05-17 19:59:16 +053076import static org.onosproject.yangutils.utils.UtilConstants.IMMEDIATE;
Bharat saraswald72411a2016-04-19 01:00:16 +053077import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053079import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053080import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053081import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswald72411a2016-04-19 01:00:16 +053082import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
janani bdd1314f2016-05-19 17:39:50 +053083import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswal33dfa012016-05-17 19:59:16 +053085import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
87import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053088import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053089import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
90import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053091import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053092import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
93import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053094import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
96import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +053097import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053098import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530100import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530101import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530102
103/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530104 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530105 */
106public final class JavaFileGeneratorUtils {
107
108 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530109 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530110 */
111 private JavaFileGeneratorUtils() {
112 }
113
114 /**
115 * Returns a file object for generated file.
116 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530117 * @param fileName file name
118 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530119 * @param extension file extension
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530120 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530121 * @return file object
122 */
123 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
124
125 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
126 }
127
128 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530129 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530130 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530131 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530132 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswale2d51d62016-03-23 19:40:35 +0530133 * @return data stored in temporary files
134 * @throws IOException when failed to get the data from temporary file handle
135 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530136 public static String getDataFromTempFileHandle(int generatedTempFiles,
137 TempJavaFragmentFiles tempJavaFragmentFiles)
138 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530139
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530140 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530141
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530142 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
143 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
144 }
145
146 TempJavaBeanFragmentFiles beanFragmentFiles = null;
147
148 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
149 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
150 }
151
152 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
153 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
154 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
155 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530156
Bharat saraswalc0e04842016-05-12 13:16:57 +0530157 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
158 return tempJavaFragmentFiles
159 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle());
160 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530161 return tempJavaFragmentFiles
162 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530163 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 return tempJavaFragmentFiles
165 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530166 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530167 return tempJavaFragmentFiles
168 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530169 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530170 return tempJavaFragmentFiles
171 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530172 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530173 if (beanFragmentFiles == null) {
174 throw new TranslatorException("Required constructor info is missing.");
175 }
176 return beanFragmentFiles
177 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530178 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530179 return tempJavaFragmentFiles
180 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530181 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530182 return tempJavaFragmentFiles
183 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530184 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 return tempJavaFragmentFiles
186 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530187 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530188 if (typeFragmentFiles == null) {
189 throw new TranslatorException("Required of string implementation info is missing.");
190 }
191 return typeFragmentFiles
192 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle());
193 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
194 if (typeFragmentFiles == null) {
195 throw new TranslatorException("Required constructor implementation info is missing.");
196 }
197 return typeFragmentFiles
198 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530199 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 return tempJavaFragmentFiles
Bharat saraswalc0e04842016-05-12 13:16:57 +0530201 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle());
202 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
203 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
204 throw new TranslatorException("Required enum info is missing.");
205 }
206 TempJavaEnumerationFragmentFiles enumFragmentFiles =
207 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
208 return enumFragmentFiles
209 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530210 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
211 if (serviceFragmentFiles == null) {
212 throw new TranslatorException("Required rpc interface info is missing.");
213 }
214 return serviceFragmentFiles
215 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530216 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530217 if (serviceFragmentFiles == null) {
218 throw new TranslatorException("Required rpc implementation info is missing.");
219 }
220 return serviceFragmentFiles
221 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle());
Bharat saraswal33dfa012016-05-17 19:59:16 +0530222 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
223 if (serviceFragmentFiles == null) {
224 throw new TranslatorException("Required rpc implementation info is missing.");
225 }
226 return serviceFragmentFiles
227 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle());
228 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
229 if (serviceFragmentFiles == null) {
230 throw new TranslatorException("Required rpc implementation info is missing.");
231 }
232 return serviceFragmentFiles
233 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle());
234 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
235 if (serviceFragmentFiles == null) {
236 throw new TranslatorException("Required rpc implementation info is missing.");
237 }
238 return serviceFragmentFiles
239 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle());
240 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
241 if (serviceFragmentFiles == null) {
242 throw new TranslatorException("Required rpc implementation info is missing.");
243 }
244 return serviceFragmentFiles
245 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle());
246 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
247 if (serviceFragmentFiles == null) {
248 throw new TranslatorException("Required rpc implementation info is missing.");
249 }
250 return serviceFragmentFiles
251 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530252 }
253 return null;
254 }
255
256 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530257 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530258 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530259 * @param file generated file
260 * @param className generated file class name
261 * @param genType generated file type
262 * @param imports imports for the file
263 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530264 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530265 * @throws IOException when fails to generate a file
266 */
sangyun-han19f8d352016-05-30 19:33:27 +0900267 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530268 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530269 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530270
271 try {
272 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900273 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530274 } catch (IOException e) {
275 throw new IOException("Failed to create " + file.getName() + " class file.");
276 }
277 }
278
279 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530280 * Initiates generation of file based on generated file type.
281 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530282 * @param file generated file
283 * @param genType generated file type
284 * @param imports imports for the file
285 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530286 * @param className class name
287 * @throws IOException when fails to generate a file
288 */
sangyun-han19f8d352016-05-30 19:33:27 +0900289 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530290 YangNode curNode, String className)
291 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530292
293 try {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530294 if (file.exists()) {
295 throw new IOException(file.getName() + " is reused due to YANG naming");
296 }
297
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530298 file.createNewFile();
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530299
sangyun-han19f8d352016-05-30 19:33:27 +0900300 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530301 } catch (IOException e) {
302 throw new IOException("Failed to create " + file.getName() + " class file.");
303 }
304 }
305
306 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530307 * Appends all the contents into a generated java file.
308 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530309 * @param file generated file
310 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900311 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530312 * @param curNode current YANG node
313 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900314 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530315 */
sangyun-han19f8d352016-05-30 19:33:27 +0900316 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530317 String className)
318 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530319
320 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
321
Bharat saraswal33dfa012016-05-17 19:59:16 +0530322 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530323 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530324
Bharat saraswal33dfa012016-05-17 19:59:16 +0530325 String pkgString = null;
sangyun-han19f8d352016-05-30 19:33:27 +0900326 if (genType == GENERATE_EVENT_CLASS
327 || genType == GENERATE_EVENT_LISTENER_INTERFACE
328 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530329 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530330 } else {
331 pkgString = parsePackageString(path, importsList);
332 }
sangyun-han19f8d352016-05-30 19:33:27 +0900333 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530334 case INTERFACE_MASK:
335 appendHeaderContents(file, pkgString, importsList);
336 write(file, genType, INTERFACE, curNode, className);
337 break;
338 case GENERATE_SERVICE_AND_MANAGER:
339 appendHeaderContents(file, pkgString, importsList);
340 write(file, genType, RPC_INTERFACE, curNode, className);
341 break;
342 case GENERATE_EVENT_CLASS:
343 appendHeaderContents(file, pkgString, importsList);
344 write(file, genType, EVENT, curNode, className);
345 break;
346 case GENERATE_EVENT_LISTENER_INTERFACE:
347 appendHeaderContents(file, pkgString, importsList);
348 write(file, genType, EVENT_LISTENER, curNode, className);
349 break;
350 case GENERATE_EVENT_SUBJECT_CLASS:
351 appendHeaderContents(file, pkgString, importsList);
352 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
353 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530354 case GENERATE_IDENTITY_CLASS:
355 appendHeaderContents(file, pkgString, importsList);
356 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
357 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
358 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530359 default:
360 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530361 }
362 }
363
364 /**
365 * Appends all the contents into a generated java file.
366 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530367 * @param file generated file
368 * @param fileName generated file name
369 * @param genType generated file type
370 * @param importsList list of java imports
371 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900372 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530373 * @throws IOException when fails to append contents
374 */
sangyun-han19f8d352016-05-30 19:33:27 +0900375 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530376 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530377 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530378
379 String pkgString = parsePackageString(pkg, importsList);
380
sangyun-han19f8d352016-05-30 19:33:27 +0900381 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530382 case IMPL_CLASS_MASK:
383 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
384 break;
385 case BUILDER_INTERFACE_MASK:
386 write(file, fileName, genType, BUILDER_INTERFACE, pluginConfig);
387 break;
388 case GENERATE_TYPEDEF_CLASS:
389 appendHeaderContents(file, pkgString, importsList);
390 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
391 break;
392 case BUILDER_CLASS_MASK:
393 appendHeaderContents(file, pkgString, importsList);
394 write(file, fileName, genType, BUILDER_CLASS, pluginConfig);
395 break;
396 case GENERATE_UNION_CLASS:
397 appendHeaderContents(file, pkgString, importsList);
398 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
399 break;
400 case GENERATE_ENUM_CLASS:
401 appendHeaderContents(file, pkgString, importsList);
402 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
403 break;
404 default:
405 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530406 }
407 }
408
409 /**
410 * Removes base directory path from package and generates package string for file.
411 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530412 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530413 * @param importsList list of imports
414 * @return package string
415 */
416 private static String parsePackageString(String javaPkg, List<String> importsList) {
417
Bharat saraswal33dfa012016-05-17 19:59:16 +0530418 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530419 if (importsList != null) {
420 if (!importsList.isEmpty()) {
421 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
422 } else {
423 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
424 }
425 } else {
426 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
427 }
428 }
429
430 /**
431 * Appends other contents to interface, builder and typedef classes.
432 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530433 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530434 * @param file generated file
435 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530436 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530437 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530438 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530439 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
440 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530441
442 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
443 insertDataIntoJavaFile(file, pkg);
444
445 /*
446 * TODO: add the file header using
447 * JavaCodeSnippetGen.getFileHeaderComment
448 */
449
450 if (importsList != null) {
451 insertDataIntoJavaFile(file, NEW_LINE);
452 for (String imports : importsList) {
453 insertDataIntoJavaFile(file, imports);
454 }
455 }
456 }
457
458 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530459 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530460 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530461 * @param file generated file
462 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530463 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530464 * @param curNode current YANG node
465 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530466 * @throws IOException when fails to write into a file
467 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530468 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530469 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530470
Bharat saraswal33dfa012016-05-17 19:59:16 +0530471 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530472 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530473 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
474 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530475 insertDataIntoJavaFile(file, addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530476 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530477 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530478 }
479 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530480 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530481 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530482 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
483 }
484
485 /**
486 * Writes data to the specific generated file.
487 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530488 * @param file generated file
489 * @param fileName file name
490 * @param genType generated file type
491 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900492 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900493 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530494 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530495 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
496 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530497 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530498 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530499 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530500 }
501
Bharat saraswald72411a2016-04-19 01:00:16 +0530502 /**
503 * Returns integer attribute for enum's class to get the values.
504 *
505 * @param className enum's class name
506 * @return enum's attribute
507 */
508 public static String getEnumsValueAttribute(String className) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530509 return NEW_LINE + FOUR_SPACE_INDENTATION + PRIVATE + SPACE + INT + SPACE + getSmallCase(className)
510 + SEMI_COLAN + NEW_LINE;
Bharat saraswald72411a2016-04-19 01:00:16 +0530511 }
512
Bharat saraswal33dfa012016-05-17 19:59:16 +0530513 /**
514 * Returns component string.
515 *
516 * @return component string
517 */
518 public static String addComponentString() {
519 return NEW_LINE + COMPONENT_ANNOTATION + SPACE + OPEN_PARENTHESIS + IMMEDIATE + SPACE
520 + EQUAL + SPACE + TRUE + CLOSE_PARENTHESIS + NEW_LINE + SERVICE_ANNOTATION;
521 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530522}