blob: 0ecc49eaa40e270a4c5c2450fd0c65973e8ab8f5 [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;
Bharat saraswal33dfa012016-05-17 19:59:16 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
45import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053066import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Bharat saraswal2f11f652016-03-25 18:19:46 +053067import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getJavaPackageFromPackagePath;
Bharat saraswald72411a2016-04-19 01:00:16 +053068import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getSmallCase;
Bharat saraswal33dfa012016-05-17 19:59:16 +053069import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
70import static org.onosproject.yangutils.utils.UtilConstants.COMPONENT_ANNOTATION;
71import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
Bharat saraswald72411a2016-04-19 01:00:16 +053072import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswal33dfa012016-05-17 19:59:16 +053073import static org.onosproject.yangutils.utils.UtilConstants.IMMEDIATE;
Bharat saraswald72411a2016-04-19 01:00:16 +053074import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053075import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053076import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053077import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053078import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswald72411a2016-04-19 01:00:16 +053079import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
janani bdd1314f2016-05-19 17:39:50 +053080import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053081import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswal33dfa012016-05-17 19:59:16 +053082import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_ANNOTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +053083import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
84import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053085import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
87import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053088import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053089import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
90import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053091import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053092import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
93import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +053094import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +053098import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +053099
100/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530101 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530102 */
103public final class JavaFileGeneratorUtils {
104
105 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530106 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530107 */
108 private JavaFileGeneratorUtils() {
109 }
110
111 /**
112 * Returns a file object for generated file.
113 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530114 * @param fileName file name
115 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530116 * @param extension file extension
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530117 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530118 * @return file object
119 */
120 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
121
122 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
123 }
124
125 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530126 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530127 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530128 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530129 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswale2d51d62016-03-23 19:40:35 +0530130 * @return data stored in temporary files
131 * @throws IOException when failed to get the data from temporary file handle
132 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530133 public static String getDataFromTempFileHandle(int generatedTempFiles,
134 TempJavaFragmentFiles tempJavaFragmentFiles)
135 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530136
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530137 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530138
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530139 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
140 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
141 }
142
143 TempJavaBeanFragmentFiles beanFragmentFiles = null;
144
145 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
146 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
147 }
148
149 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
150 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
151 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
152 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530153
Bharat saraswalc0e04842016-05-12 13:16:57 +0530154 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
155 return tempJavaFragmentFiles
156 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle());
157 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530158 return tempJavaFragmentFiles
159 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530160 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530161 return tempJavaFragmentFiles
162 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530163 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530164 return tempJavaFragmentFiles
165 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530166 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530167 return tempJavaFragmentFiles
168 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530169 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530170 if (beanFragmentFiles == null) {
171 throw new TranslatorException("Required constructor info is missing.");
172 }
173 return beanFragmentFiles
174 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530175 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530176 return tempJavaFragmentFiles
177 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530178 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530179 return tempJavaFragmentFiles
180 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530181 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530182 return tempJavaFragmentFiles
183 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530184 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530185 if (typeFragmentFiles == null) {
186 throw new TranslatorException("Required of string implementation info is missing.");
187 }
188 return typeFragmentFiles
189 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle());
190 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
191 if (typeFragmentFiles == null) {
192 throw new TranslatorException("Required constructor implementation info is missing.");
193 }
194 return typeFragmentFiles
195 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530196 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530197 return tempJavaFragmentFiles
Bharat saraswalc0e04842016-05-12 13:16:57 +0530198 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle());
199 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
200 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
201 throw new TranslatorException("Required enum info is missing.");
202 }
203 TempJavaEnumerationFragmentFiles enumFragmentFiles =
204 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
205 return enumFragmentFiles
206 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle());
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530207 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
208 if (serviceFragmentFiles == null) {
209 throw new TranslatorException("Required rpc interface info is missing.");
210 }
211 return serviceFragmentFiles
212 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530213 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530214 if (serviceFragmentFiles == null) {
215 throw new TranslatorException("Required rpc implementation info is missing.");
216 }
217 return serviceFragmentFiles
218 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle());
Bharat saraswal33dfa012016-05-17 19:59:16 +0530219 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
220 if (serviceFragmentFiles == null) {
221 throw new TranslatorException("Required rpc implementation info is missing.");
222 }
223 return serviceFragmentFiles
224 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle());
225 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
226 if (serviceFragmentFiles == null) {
227 throw new TranslatorException("Required rpc implementation info is missing.");
228 }
229 return serviceFragmentFiles
230 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle());
231 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
232 if (serviceFragmentFiles == null) {
233 throw new TranslatorException("Required rpc implementation info is missing.");
234 }
235 return serviceFragmentFiles
236 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle());
237 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
238 if (serviceFragmentFiles == null) {
239 throw new TranslatorException("Required rpc implementation info is missing.");
240 }
241 return serviceFragmentFiles
242 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle());
243 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
244 if (serviceFragmentFiles == null) {
245 throw new TranslatorException("Required rpc implementation info is missing.");
246 }
247 return serviceFragmentFiles
248 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530249 }
250 return null;
251 }
252
253 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530254 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530255 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530256 * @param file generated file
257 * @param className generated file class name
258 * @param genType generated file type
259 * @param imports imports for the file
260 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530261 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530262 * @throws IOException when fails to generate a file
263 */
sangyun-han19f8d352016-05-30 19:33:27 +0900264 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530265 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530266 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530267
268 try {
269 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900270 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530271 } catch (IOException e) {
272 throw new IOException("Failed to create " + file.getName() + " class file.");
273 }
274 }
275
276 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530277 * Initiates generation of file based on generated file type.
278 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530279 * @param file generated file
280 * @param genType generated file type
281 * @param imports imports for the file
282 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530283 * @param className class name
284 * @throws IOException when fails to generate a file
285 */
sangyun-han19f8d352016-05-30 19:33:27 +0900286 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530287 YangNode curNode, String className)
288 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530289
290 try {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530291 if (file.exists()) {
292 throw new IOException(file.getName() + " is reused due to YANG naming");
293 }
294
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530295 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900296 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530297 } catch (IOException e) {
298 throw new IOException("Failed to create " + file.getName() + " class file.");
299 }
300 }
301
302 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530303 * Appends all the contents into a generated java file.
304 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530305 * @param file generated file
306 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900307 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530308 * @param curNode current YANG node
309 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900310 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530311 */
sangyun-han19f8d352016-05-30 19:33:27 +0900312 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530313 String className)
314 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530315
316 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
317
Bharat saraswal33dfa012016-05-17 19:59:16 +0530318 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530319 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530320
Bharat saraswal33dfa012016-05-17 19:59:16 +0530321 String pkgString = null;
sangyun-han19f8d352016-05-30 19:33:27 +0900322 if (genType == GENERATE_EVENT_CLASS
323 || genType == GENERATE_EVENT_LISTENER_INTERFACE
324 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530325 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530326 } else {
327 pkgString = parsePackageString(path, importsList);
328 }
sangyun-han19f8d352016-05-30 19:33:27 +0900329 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530330 case INTERFACE_MASK:
331 appendHeaderContents(file, pkgString, importsList);
332 write(file, genType, INTERFACE, curNode, className);
333 break;
334 case GENERATE_SERVICE_AND_MANAGER:
335 appendHeaderContents(file, pkgString, importsList);
336 write(file, genType, RPC_INTERFACE, curNode, className);
337 break;
338 case GENERATE_EVENT_CLASS:
339 appendHeaderContents(file, pkgString, importsList);
340 write(file, genType, EVENT, curNode, className);
341 break;
342 case GENERATE_EVENT_LISTENER_INTERFACE:
343 appendHeaderContents(file, pkgString, importsList);
344 write(file, genType, EVENT_LISTENER, curNode, className);
345 break;
346 case GENERATE_EVENT_SUBJECT_CLASS:
347 appendHeaderContents(file, pkgString, importsList);
348 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
349 break;
350 default:
351 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530352 }
353 }
354
355 /**
356 * Appends all the contents into a generated java file.
357 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530358 * @param file generated file
359 * @param fileName generated file name
360 * @param genType generated file type
361 * @param importsList list of java imports
362 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900363 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530364 * @throws IOException when fails to append contents
365 */
sangyun-han19f8d352016-05-30 19:33:27 +0900366 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswal33dfa012016-05-17 19:59:16 +0530367 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530368 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530369
370 String pkgString = parsePackageString(pkg, importsList);
371
sangyun-han19f8d352016-05-30 19:33:27 +0900372 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530373 case IMPL_CLASS_MASK:
374 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
375 break;
376 case BUILDER_INTERFACE_MASK:
377 write(file, fileName, genType, BUILDER_INTERFACE, pluginConfig);
378 break;
379 case GENERATE_TYPEDEF_CLASS:
380 appendHeaderContents(file, pkgString, importsList);
381 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
382 break;
383 case BUILDER_CLASS_MASK:
384 appendHeaderContents(file, pkgString, importsList);
385 write(file, fileName, genType, BUILDER_CLASS, pluginConfig);
386 break;
387 case GENERATE_UNION_CLASS:
388 appendHeaderContents(file, pkgString, importsList);
389 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
390 break;
391 case GENERATE_ENUM_CLASS:
392 appendHeaderContents(file, pkgString, importsList);
393 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
394 break;
395 default:
396 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530397 }
398 }
399
400 /**
401 * Removes base directory path from package and generates package string for file.
402 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530403 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530404 * @param importsList list of imports
405 * @return package string
406 */
407 private static String parsePackageString(String javaPkg, List<String> importsList) {
408
Bharat saraswal33dfa012016-05-17 19:59:16 +0530409 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530410 if (importsList != null) {
411 if (!importsList.isEmpty()) {
412 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
413 } else {
414 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
415 }
416 } else {
417 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
418 }
419 }
420
421 /**
422 * Appends other contents to interface, builder and typedef classes.
423 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530424 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530425 * @param file generated file
426 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530427 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530428 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530429 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530430 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
431 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530432
433 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
434 insertDataIntoJavaFile(file, pkg);
435
436 /*
437 * TODO: add the file header using
438 * JavaCodeSnippetGen.getFileHeaderComment
439 */
440
441 if (importsList != null) {
442 insertDataIntoJavaFile(file, NEW_LINE);
443 for (String imports : importsList) {
444 insertDataIntoJavaFile(file, imports);
445 }
446 }
447 }
448
449 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530450 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530451 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530452 * @param file generated file
453 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530454 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530455 * @param curNode current YANG node
456 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530457 * @throws IOException when fails to write into a file
458 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530459 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530460 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530461
Bharat saraswal33dfa012016-05-17 19:59:16 +0530462 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530463 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530464 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
465 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswal33dfa012016-05-17 19:59:16 +0530466 insertDataIntoJavaFile(file, addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530467 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530468 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530469 }
470 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530471 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530472 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530473 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
474 }
475
476 /**
477 * Writes data to the specific generated file.
478 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530479 * @param file generated file
480 * @param fileName file name
481 * @param genType generated file type
482 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900483 * @param pluginConfig plugin configurations
484 * @throws IOException
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530485 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530486 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
487 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530488 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530489 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530490 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530491 }
492
Bharat saraswald72411a2016-04-19 01:00:16 +0530493 /**
494 * Returns integer attribute for enum's class to get the values.
495 *
496 * @param className enum's class name
497 * @return enum's attribute
498 */
499 public static String getEnumsValueAttribute(String className) {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530500 return NEW_LINE + FOUR_SPACE_INDENTATION + PRIVATE + SPACE + INT + SPACE + getSmallCase(className)
501 + SEMI_COLAN + NEW_LINE;
Bharat saraswald72411a2016-04-19 01:00:16 +0530502 }
503
Bharat saraswal33dfa012016-05-17 19:59:16 +0530504 /**
505 * Returns component string.
506 *
507 * @return component string
508 */
509 public static String addComponentString() {
510 return NEW_LINE + COMPONENT_ANNOTATION + SPACE + OPEN_PARENTHESIS + IMMEDIATE + SPACE
511 + EQUAL + SPACE + TRUE + CLOSE_PARENTHESIS + NEW_LINE + SERVICE_ANNOTATION;
512 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530513}