blob: c6fd897cde359441ee1d268a751ad0824b005ec6 [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 saraswalb1170bd2016-07-14 13:26:18 +053023import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053024import org.onosproject.yangutils.datamodel.YangNode;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053025import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswale2d51d62016-03-23 19:40:35 +053026import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053027import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053028import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalc0e04842016-05-12 13:16:57 +053029import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053030import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053031import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
32import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053033import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
34import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053035import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Bharat saraswale2d51d62016-03-23 19:40:35 +053036
37import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
38import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
41import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053070import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053071import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053072import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053073import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053074import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053075import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053076import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
janani bdd1314f2016-05-19 17:39:50 +053077import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
79import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
80import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053081import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
82import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053083import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053084import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
85import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053086import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
88import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal56527662016-04-20 15:49:17 +053089import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +053090import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053091import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053092import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
93import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
94import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswale2d51d62016-03-23 19:40:35 +053095import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +053096import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097
98/**
Bharat saraswald9822e92016-04-05 15:13:44 +053099 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530100 */
101public final class JavaFileGeneratorUtils {
102
103 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530104 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530105 */
106 private JavaFileGeneratorUtils() {
107 }
108
109 /**
110 * Returns a file object for generated file.
111 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530112 * @param fileName file name
113 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530114 * @param extension file extension
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530115 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530116 * @return file object
117 */
118 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
119
120 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
121 }
122
123 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530124 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530125 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530126 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530127 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530128 * @param absolutePath absolute path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129 * @return data stored in temporary files
130 * @throws IOException when failed to get the data from temporary file handle
131 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530132 public static String getDataFromTempFileHandle(int generatedTempFiles,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530133 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530134 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530135
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530136 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530137
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530138 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
139 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
140 }
141
142 TempJavaBeanFragmentFiles beanFragmentFiles = null;
143
144 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
145 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
146 }
147
148 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
149 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
150 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
151 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530152
Bharat saraswalc0e04842016-05-12 13:16:57 +0530153 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
154 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530155 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
156 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530157 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530158 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530159 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
160 absolutePath);
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
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530163 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
164 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530165 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530166 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530167 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
168 absolutePath);
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
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530171 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
172 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530173 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530174 if (beanFragmentFiles == null) {
175 throw new TranslatorException("Required constructor info is missing.");
176 }
177 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530178 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
179 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530181 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530182 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
183 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530184 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530186 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
187 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530188 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530189 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530190 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
191 absolutePath);
192 } else if ((generatedTempFiles & AUGMENTE_CLASS_CONSTRUCTOR_MASK) != 0) {
193 return tempJavaFragmentFiles
194 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAugmentConstructorImplTempFileHandle(),
195 absolutePath);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530196 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530197 if (typeFragmentFiles == null) {
198 throw new TranslatorException("Required of string implementation info is missing.");
199 }
200 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530201 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530202 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
203 if (typeFragmentFiles == null) {
204 throw new TranslatorException("Required constructor implementation info is missing.");
205 }
206 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530207 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
208 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530209 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530210 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530211 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
212 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530213 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
214 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
215 throw new TranslatorException("Required enum info is missing.");
216 }
217 TempJavaEnumerationFragmentFiles enumFragmentFiles =
218 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
219 return enumFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530220 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530221 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
222 if (serviceFragmentFiles == null) {
223 throw new TranslatorException("Required rpc interface info is missing.");
224 }
225 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530226 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
227 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530228 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530229 if (serviceFragmentFiles == null) {
230 throw new TranslatorException("Required rpc implementation info is missing.");
231 }
232 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530233 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
234 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530235 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
236 if (serviceFragmentFiles == null) {
237 throw new TranslatorException("Required rpc implementation info is missing.");
238 }
239 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530240 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle(),
241 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530242 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
243 if (serviceFragmentFiles == null) {
244 throw new TranslatorException("Required rpc implementation info is missing.");
245 }
246 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530247 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle(),
248 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530249 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
250 if (serviceFragmentFiles == null) {
251 throw new TranslatorException("Required rpc implementation info is missing.");
252 }
253 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530254 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle(),
255 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530256 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
257 if (serviceFragmentFiles == null) {
258 throw new TranslatorException("Required rpc implementation info is missing.");
259 }
260 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530261 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle(),
262 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530263 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
264 if (serviceFragmentFiles == null) {
265 throw new TranslatorException("Required rpc implementation info is missing.");
266 }
267 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530268 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle(),
269 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530270 }
271 return null;
272 }
273
274 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530275 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530276 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530277 * @param file generated file
278 * @param className generated file class name
279 * @param genType generated file type
280 * @param imports imports for the file
281 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530282 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530283 * @throws IOException when fails to generate a file
284 */
sangyun-han19f8d352016-05-30 19:33:27 +0900285 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530286 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530287 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530288
289 try {
290 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900291 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530292 } catch (IOException e) {
293 throw new IOException("Failed to create " + file.getName() + " class file.");
294 }
295 }
296
297 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530298 * Initiates generation of file based on generated file type.
299 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530300 * @param file generated file
301 * @param genType generated file type
302 * @param imports imports for the file
303 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530304 * @param className class name
305 * @throws IOException when fails to generate a file
306 */
sangyun-han19f8d352016-05-30 19:33:27 +0900307 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530308 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530309 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530310
311 try {
312 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900313 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530314 } catch (IOException e) {
315 throw new IOException("Failed to create " + file.getName() + " class file.");
316 }
317 }
318
319 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530320 * Appends all the contents into a generated java file.
321 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530322 * @param file generated file
323 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900324 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530325 * @param curNode current YANG node
326 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900327 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530328 */
sangyun-han19f8d352016-05-30 19:33:27 +0900329 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530330 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530331 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530332
333 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
334
Bharat saraswal33dfa012016-05-17 19:59:16 +0530335 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530336 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530337
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530338 YangNode augmentedNode = null;
339 if (curNode instanceof YangAugment) {
340 augmentedNode = ((YangAugment) curNode).getAugmentedNode();
341 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530342 String pkgString = null;
sangyun-han19f8d352016-05-30 19:33:27 +0900343 if (genType == GENERATE_EVENT_CLASS
344 || genType == GENERATE_EVENT_LISTENER_INTERFACE
345 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530346 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530347 } else {
348 pkgString = parsePackageString(path, importsList);
349 }
sangyun-han19f8d352016-05-30 19:33:27 +0900350 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530351 case INTERFACE_MASK:
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530352 if (augmentedNode != null) {
353 appendHeaderContents(file, pkgString, importsList, augmentedNode);
354 } else {
355 appendHeaderContents(file, pkgString, importsList);
356 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530357 write(file, genType, INTERFACE, curNode, className);
358 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530359 case IMPL_CLASS_MASK:
360 appendHeaderContents(file, pkgString, importsList);
361 write(file, genType, IMPL_CLASS, curNode, className);
362 break;
363 case BUILDER_CLASS_MASK:
364 write(file, genType, BUILDER_CLASS, curNode, className);
365 break;
366 case BUILDER_INTERFACE_MASK:
367 write(file, genType, BUILDER_INTERFACE, curNode, className);
368 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530369 case GENERATE_SERVICE_AND_MANAGER:
370 appendHeaderContents(file, pkgString, importsList);
371 write(file, genType, RPC_INTERFACE, curNode, className);
372 break;
373 case GENERATE_EVENT_CLASS:
374 appendHeaderContents(file, pkgString, importsList);
375 write(file, genType, EVENT, curNode, className);
376 break;
377 case GENERATE_EVENT_LISTENER_INTERFACE:
378 appendHeaderContents(file, pkgString, importsList);
379 write(file, genType, EVENT_LISTENER, curNode, className);
380 break;
381 case GENERATE_EVENT_SUBJECT_CLASS:
382 appendHeaderContents(file, pkgString, importsList);
383 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
384 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530385 case GENERATE_IDENTITY_CLASS:
386 appendHeaderContents(file, pkgString, importsList);
387 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
388 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
389 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530390 default:
391 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530392 }
393 }
394
395 /**
396 * Appends all the contents into a generated java file.
397 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530398 * @param file generated file
399 * @param fileName generated file name
400 * @param genType generated file type
401 * @param importsList list of java imports
402 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900403 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530404 * @throws IOException when fails to append contents
405 */
sangyun-han19f8d352016-05-30 19:33:27 +0900406 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530407 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530408 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530409
410 String pkgString = parsePackageString(pkg, importsList);
411
sangyun-han19f8d352016-05-30 19:33:27 +0900412 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530413 case GENERATE_TYPEDEF_CLASS:
414 appendHeaderContents(file, pkgString, importsList);
415 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
416 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530417 case GENERATE_UNION_CLASS:
418 appendHeaderContents(file, pkgString, importsList);
419 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
420 break;
421 case GENERATE_ENUM_CLASS:
422 appendHeaderContents(file, pkgString, importsList);
423 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
424 break;
425 default:
426 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530427 }
428 }
429
430 /**
431 * Removes base directory path from package and generates package string for file.
432 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530433 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530434 * @param importsList list of imports
435 * @return package string
436 */
437 private static String parsePackageString(String javaPkg, List<String> importsList) {
438
Bharat saraswal33dfa012016-05-17 19:59:16 +0530439 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530440 if (importsList != null) {
441 if (!importsList.isEmpty()) {
442 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
443 } else {
444 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
445 }
446 } else {
447 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
448 }
449 }
450
451 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530452 * Appends other contents to interface, impl and typedef classes.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530453 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530454 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530455 * @param file generated file
456 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530457 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530458 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530459 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530460 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
461 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530462
463 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
464 insertDataIntoJavaFile(file, pkg);
465
466 /*
467 * TODO: add the file header using
468 * JavaCodeSnippetGen.getFileHeaderComment
469 */
470
471 if (importsList != null) {
472 insertDataIntoJavaFile(file, NEW_LINE);
473 for (String imports : importsList) {
474 insertDataIntoJavaFile(file, imports);
475 }
476 }
477 }
478
479 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530480 * Appends other contents to interface and impl classes when augmented node is not null.
481 * for example : ONOS copyright, imports and package.
482 *
483 * @param file generated file
484 * @param pkg generated package
485 * @param augmentedNode augmented node
486 * @param importsList list of imports
487 * @throws IOException when fails to append contents
488 */
489 private static void appendHeaderContents(File file, String pkg, List<String> importsList, YangNode augmentedNode)
490 throws IOException {
491
492 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
493 insertDataIntoJavaFile(file, pkg);
494
495 /*
496 * TODO: add the file header using
497 * JavaCodeSnippetGen.getFileHeaderComment
498 */
499
500 if (importsList != null) {
501 insertDataIntoJavaFile(file, NEW_LINE);
502 for (String imports : importsList) {
503 if (!imports.contains(getCapitalCase(DEFAULT) + getCapitalCase(getCamelCase(augmentedNode.getName(),
504 null)))
505 && !imports.contains(getCapitalCase(getCamelCase(augmentedNode.getName(), null)) + BUILDER)) {
506 insertDataIntoJavaFile(file, imports);
507 }
508 }
509 }
510 }
511
512 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530513 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530514 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530515 * @param file generated file
516 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530517 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530518 * @param curNode current YANG node
519 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530520 * @throws IOException when fails to write into a file
521 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530522 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530523 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530524
Bharat saraswal33dfa012016-05-17 19:59:16 +0530525 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530526 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530527 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
528 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530529 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530530 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530531 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530532 }
533 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530534 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530535 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530536 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
537 }
538
539 /**
540 * Writes data to the specific generated file.
541 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530542 * @param file generated file
543 * @param fileName file name
544 * @param genType generated file type
545 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900546 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900547 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530548 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530549 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530550 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530551 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530552 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530553 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530554 }
555
Bharat saraswale2d51d62016-03-23 19:40:35 +0530556}