blob: 09bb72b71f1ba5c9594d22e5a3449cc1d4bc89fc [file] [log] [blame]
Bharat saraswal84366c52016-03-23 19:40:35 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal84366c52016-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;
Bharat saraswalaf413b82016-07-14 15:18:20 +053021import java.util.ArrayList;
Bharat saraswal84366c52016-03-23 19:40:35 +053022import java.util.List;
Bharat saraswal8beac342016-08-04 02:00:03 +053023
Bharat saraswalaf413b82016-07-14 15:18:20 +053024import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswald14cbe82016-07-14 13:26:18 +053025import org.onosproject.yangutils.datamodel.YangAugment;
janani bb3be1332016-08-03 16:40:01 +053026import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswal8beac342016-08-04 02:00:03 +053027import org.onosproject.yangutils.datamodel.YangModule;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053028import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053029import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
Bharat saraswal8beac342016-08-04 02:00:03 +053030import org.onosproject.yangutils.datamodel.YangSubModule;
janani bb3be1332016-08-03 16:40:01 +053031import org.onosproject.yangutils.datamodel.YangType;
janani bb3be1332016-08-03 16:40:01 +053032import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053033import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalaf413b82016-07-14 15:18:20 +053034import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053035import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswale50edca2016-08-05 01:58:25 +053036import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswalaf413b82016-07-14 15:18:20 +053037import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053038import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053039import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalaf413b82016-07-14 15:18:20 +053040import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswal250a7472016-05-12 13:16:57 +053041import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053043import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053044import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
45import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale50edca2016-08-05 01:58:25 +053046import org.onosproject.yangutils.utils.io.YangPluginConfig;
Bharat saraswal84366c52016-03-23 19:40:35 +053047import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
48import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
49
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswald14cbe82016-07-14 13:26:18 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal84366c52016-03-23 19:40:35 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053083import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +053084import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053085import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswal84366c52016-03-23 19:40:35 +053086import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
87import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
88import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweib7564772016-08-02 18:13:13 +053089import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053090import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053091import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huawei234cd092016-07-14 11:35:34 +053092import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
janani bb3be1332016-08-03 16:40:01 +053093import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswal84366c52016-03-23 19:40:35 +053094import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +053095import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053097import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal84366c52016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
99import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
100import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
105import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530106import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530107import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
108import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530109import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530110import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530111import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
112import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
113import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswal84366c52016-03-23 19:40:35 +0530114import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530115import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswal84366c52016-03-23 19:40:35 +0530116
117/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530118 * Represents utilities for java file generator.
Bharat saraswal84366c52016-03-23 19:40:35 +0530119 */
120public final class JavaFileGeneratorUtils {
121
122 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530123 * Creates an instance of java file generator util.
Bharat saraswal84366c52016-03-23 19:40:35 +0530124 */
125 private JavaFileGeneratorUtils() {
126 }
127
128 /**
129 * Returns a file object for generated file.
130 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530131 * @param filePath file package path
132 * @param fileName file name
133 * @param extension file extension
134 * @param handler cached file handle
Bharat saraswal84366c52016-03-23 19:40:35 +0530135 * @return file object
136 */
Bharat saraswale50edca2016-08-05 01:58:25 +0530137 public static File getFileObject(String filePath, String fileName, String extension,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530138 JavaFileInfoTranslator handler) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530139 return new File(handler.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
Bharat saraswal84366c52016-03-23 19:40:35 +0530140 }
141
142 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530143 * Returns data stored in temporary files.
Bharat saraswal84366c52016-03-23 19:40:35 +0530144 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530145 * @param generatedTempFiles temporary file types
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530146 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswald14cbe82016-07-14 13:26:18 +0530147 * @param absolutePath absolute path
Bharat saraswal84366c52016-03-23 19:40:35 +0530148 * @return data stored in temporary files
149 * @throws IOException when failed to get the data from temporary file handle
150 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530151 static String getDataFromTempFileHandle(int generatedTempFiles,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530152 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530153 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530154
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530155 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswal84366c52016-03-23 19:40:35 +0530156
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530157 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
158 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
159 }
160
161 TempJavaBeanFragmentFiles beanFragmentFiles = null;
162
163 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
164 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
165 }
166
167 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
168 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
169 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
170 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530171
Bharat saraswal039f59c2016-07-14 21:57:13 +0530172 TempJavaEventFragmentFiles eventFragmentFiles = null;
173 if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
174 eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
175 }
176
Bharat saraswal250a7472016-05-12 13:16:57 +0530177 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
178 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530179 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
180 absolutePath);
Bharat saraswal250a7472016-05-12 13:16:57 +0530181 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530182 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530183 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
184 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530185 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530186 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530187 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
188 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530189 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530190 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530191 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
192 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530193 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530194 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530195 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
196 absolutePath);
Bharat saraswal8beac342016-08-04 02:00:03 +0530197 } else if ((generatedTempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
198 return tempJavaFragmentFiles
199 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAddToListInterfaceTempFileHandle(),
200 absolutePath);
201 } else if ((generatedTempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
202 return tempJavaFragmentFiles
203 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAddToListImplTempFileHandle(),
204 absolutePath);
Bharat saraswale50edca2016-08-05 01:58:25 +0530205 } else if ((generatedTempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
206 return tempJavaFragmentFiles
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530207 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSubtreeFilteringForLeafTempFileHandle(),
Bharat saraswale50edca2016-08-05 01:58:25 +0530208 absolutePath);
209 } else if ((generatedTempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
210 return tempJavaFragmentFiles
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530211 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetSubtreeFilteringForListTempFileHandle(),
Bharat saraswale50edca2016-08-05 01:58:25 +0530212 absolutePath);
213 } else if ((generatedTempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
214 return tempJavaFragmentFiles
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530215 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles
216 .getGetSubtreeFilteringForChildNodeTempFileHandle(), absolutePath);
Bharat saraswale50edca2016-08-05 01:58:25 +0530217 } else if ((generatedTempFiles & EDIT_CONTENT_MASK) != 0) {
218 return tempJavaFragmentFiles
219 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEditContentTempFileHandle(),
220 absolutePath);
Bharat saraswal8beac342016-08-04 02:00:03 +0530221 } else if ((generatedTempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
222 return tempJavaFragmentFiles
223 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getLeafIdAttributeTempFileHandle(),
224 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530225 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530226 if (beanFragmentFiles == null) {
227 throw new TranslatorException("Required constructor info is missing.");
228 }
229 return beanFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530230 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
231 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530232 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530233 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530234 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
235 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530236 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530237 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530238 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
239 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530240 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530241 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530242 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
243 absolutePath);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530244 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530245 if (typeFragmentFiles == null) {
246 throw new TranslatorException("Required of string implementation info is missing.");
247 }
248 return typeFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530249 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530250 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
251 if (typeFragmentFiles == null) {
252 throw new TranslatorException("Required constructor implementation info is missing.");
253 }
254 return typeFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530255 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
256 absolutePath);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530257 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530258 return tempJavaFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530259 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
260 absolutePath);
Bharat saraswal250a7472016-05-12 13:16:57 +0530261 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
262 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
263 throw new TranslatorException("Required enum info is missing.");
264 }
265 TempJavaEnumerationFragmentFiles enumFragmentFiles =
266 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
267 return enumFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530268 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530269 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
270 if (serviceFragmentFiles == null) {
271 throw new TranslatorException("Required rpc interface info is missing.");
272 }
273 return serviceFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530274 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
275 absolutePath);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530276 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530277 if (serviceFragmentFiles == null) {
278 throw new TranslatorException("Required rpc implementation info is missing.");
279 }
280 return serviceFragmentFiles
Bharat saraswald14cbe82016-07-14 13:26:18 +0530281 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
282 absolutePath);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530283 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530284 if (eventFragmentFiles == null) {
285 throw new TranslatorException("Required event enum implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530286 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530287 return eventFragmentFiles
288 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
Bharat saraswald14cbe82016-07-14 13:26:18 +0530289 absolutePath);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530290 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530291 if (eventFragmentFiles == null) {
292 throw new TranslatorException("Required event method implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530293 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530294 return eventFragmentFiles
295 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
Bharat saraswald14cbe82016-07-14 13:26:18 +0530296 absolutePath);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530297 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530298 if (eventFragmentFiles == null) {
299 throw new TranslatorException("Required event subject getter implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530300 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530301 return eventFragmentFiles
302 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
Bharat saraswald14cbe82016-07-14 13:26:18 +0530303 absolutePath);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530304 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530305 if (eventFragmentFiles == null) {
306 throw new TranslatorException("Required event subject setter implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530307 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530308 return eventFragmentFiles
309 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
Bharat saraswald14cbe82016-07-14 13:26:18 +0530310 absolutePath);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530311 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530312 if (eventFragmentFiles == null) {
313 throw new TranslatorException("Required event subject attribute implementation info is missing.");
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530314 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530315 return eventFragmentFiles
316 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
Bharat saraswald14cbe82016-07-14 13:26:18 +0530317 absolutePath);
Bharat saraswal84366c52016-03-23 19:40:35 +0530318 }
319 return null;
320 }
321
322 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530323 * Initiates generation of file based on generated file type.
Bharat saraswal84366c52016-03-23 19:40:35 +0530324 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530325 * @param file generated file
326 * @param className generated file class name
327 * @param genType generated file type
328 * @param imports imports for the file
329 * @param pkg generated file package
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530330 * @param pluginConfig plugin configurations
Bharat saraswal84366c52016-03-23 19:40:35 +0530331 * @throws IOException when fails to generate a file
332 */
sangyun-hanf352f532016-05-30 19:33:27 +0900333 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530334 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530335 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530336
Bharat saraswale3175d32016-08-31 17:50:11 +0530337 if (file.exists()) {
338 throw new IOException(" file " + file.getName() + " is already generated." +
339 "please check whether multiple yang files has same module/submodule \"name\" and \"namespace\"" +
340 "or You may have generated code of previous build present in your directory.");
341 }
342
Bharat saraswal039f59c2016-07-14 21:57:13 +0530343 boolean isFileCreated;
Bharat saraswal84366c52016-03-23 19:40:35 +0530344 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530345 isFileCreated = file.createNewFile();
346 if (!isFileCreated) {
347 throw new IOException("Failed to create " + file.getName() + " class file.");
348 }
sangyun-hanf352f532016-05-30 19:33:27 +0900349 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswal84366c52016-03-23 19:40:35 +0530350 } catch (IOException e) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530351 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswal84366c52016-03-23 19:40:35 +0530352 }
353 }
354
355 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530356 * Initiates generation of file based on generated file type.
357 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530358 * @param file generated file
359 * @param genType generated file type
360 * @param imports imports for the file
361 * @param curNode current YANG node
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530362 * @param className class name
363 * @throws IOException when fails to generate a file
364 */
sangyun-hanf352f532016-05-30 19:33:27 +0900365 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530366 YangNode curNode, String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530367 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530368
Bharat saraswale3175d32016-08-31 17:50:11 +0530369 if (file.exists()) {
370 throw new IOException(" file " + file.getName() + " is already generated." +
371 "please check whether multiple yang files has same module/submodule \"name\" and \"namespace\"" +
372 "or You may have generated code of previous build present in your directory.");
373 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530374 boolean isFileCreated;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530375 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530376 isFileCreated = file.createNewFile();
377 if (!isFileCreated) {
378 throw new IOException("Failed to create " + file.getName() + " class file.");
379 }
sangyun-hanf352f532016-05-30 19:33:27 +0900380 appendContents(file, genType, imports, curNode, className);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530381 } catch (IOException e) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530382 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530383 }
384 }
385
386 /**
Bharat saraswal84366c52016-03-23 19:40:35 +0530387 * Appends all the contents into a generated java file.
388 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530389 * @param file generated file
390 * @param genType generated file type
sangyun-hanf352f532016-05-30 19:33:27 +0900391 * @param importsList list of java imports
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530392 * @param curNode current YANG node
393 * @param className class name
Shankara-Huaweib7564772016-08-02 18:13:13 +0530394 * @throws IOException when fails to do IO operations
Bharat saraswal84366c52016-03-23 19:40:35 +0530395 */
sangyun-hanf352f532016-05-30 19:33:27 +0900396 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530397 String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530398 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530399
Bharat saraswale50edca2016-08-05 01:58:25 +0530400 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530401
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530402 String name = javaFileInfo.getJavaName();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530403 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530404
Bharat saraswal039f59c2016-07-14 21:57:13 +0530405 String pkgString;
sangyun-hanf352f532016-05-30 19:33:27 +0900406 if (genType == GENERATE_EVENT_CLASS
407 || genType == GENERATE_EVENT_LISTENER_INTERFACE
408 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani b3e357f62016-05-19 17:39:50 +0530409 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530410 } else {
411 pkgString = parsePackageString(path, importsList);
412 }
sangyun-hanf352f532016-05-30 19:33:27 +0900413 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530414 case INTERFACE_MASK:
Bharat saraswal039f59c2016-07-14 21:57:13 +0530415 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530416 write(file, genType, INTERFACE, curNode, className);
417 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530418 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530419 appendHeaderContents(file, pkgString, importsList);
420 write(file, genType, IMPL_CLASS, curNode, className);
421 break;
422 case BUILDER_CLASS_MASK:
423 write(file, genType, BUILDER_CLASS, curNode, className);
424 break;
425 case BUILDER_INTERFACE_MASK:
426 write(file, genType, BUILDER_INTERFACE, curNode, className);
427 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530428 case GENERATE_SERVICE_AND_MANAGER:
429 appendHeaderContents(file, pkgString, importsList);
430 write(file, genType, RPC_INTERFACE, curNode, className);
431 break;
432 case GENERATE_EVENT_CLASS:
433 appendHeaderContents(file, pkgString, importsList);
434 write(file, genType, EVENT, curNode, className);
435 break;
436 case GENERATE_EVENT_LISTENER_INTERFACE:
437 appendHeaderContents(file, pkgString, importsList);
438 write(file, genType, EVENT_LISTENER, curNode, className);
439 break;
440 case GENERATE_EVENT_SUBJECT_CLASS:
441 appendHeaderContents(file, pkgString, importsList);
442 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
443 break;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530444 case GENERATE_IDENTITY_CLASS:
445 appendHeaderContents(file, pkgString, importsList);
446 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
447 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
448 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530449 default:
450 break;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530451 }
452 }
453
454 /**
455 * Appends all the contents into a generated java file.
456 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530457 * @param file generated file
458 * @param fileName generated file name
459 * @param genType generated file type
460 * @param importsList list of java imports
461 * @param pkg generated file package
sangyun-hanf352f532016-05-30 19:33:27 +0900462 * @param pluginConfig plugin configurations
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530463 * @throws IOException when fails to append contents
464 */
sangyun-hanf352f532016-05-30 19:33:27 +0900465 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530466 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530467 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530468
469 String pkgString = parsePackageString(pkg, importsList);
470
sangyun-hanf352f532016-05-30 19:33:27 +0900471 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530472 case GENERATE_TYPEDEF_CLASS:
473 appendHeaderContents(file, pkgString, importsList);
474 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
475 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530476 case GENERATE_UNION_CLASS:
477 appendHeaderContents(file, pkgString, importsList);
478 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
479 break;
480 case GENERATE_ENUM_CLASS:
481 appendHeaderContents(file, pkgString, importsList);
482 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
483 break;
484 default:
485 break;
Bharat saraswal84366c52016-03-23 19:40:35 +0530486 }
487 }
488
489 /**
490 * Removes base directory path from package and generates package string for file.
491 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530492 * @param javaPkg generated java package
Bharat saraswal84366c52016-03-23 19:40:35 +0530493 * @param importsList list of imports
494 * @return package string
495 */
496 private static String parsePackageString(String javaPkg, List<String> importsList) {
497
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530498 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswal84366c52016-03-23 19:40:35 +0530499 if (importsList != null) {
500 if (!importsList.isEmpty()) {
501 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
502 } else {
503 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
504 }
505 } else {
506 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
507 }
508 }
509
510 /**
Bharat saraswal039f59c2016-07-14 21:57:13 +0530511 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
512 * package.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530513 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530514 * @param file generated file
515 * @param pkg generated package
Bharat saraswal84366c52016-03-23 19:40:35 +0530516 * @param importsList list of imports
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530517 * @throws IOException when fails to append contents
Bharat saraswal84366c52016-03-23 19:40:35 +0530518 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530519 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
520 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530521
522 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
523 insertDataIntoJavaFile(file, pkg);
524
525 /*
Bharat saraswal039f59c2016-07-14 21:57:13 +0530526 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530527 * JavaCodeSnippetGen.getFileHeaderComment
528 */
529
530 if (importsList != null) {
531 insertDataIntoJavaFile(file, NEW_LINE);
532 for (String imports : importsList) {
533 insertDataIntoJavaFile(file, imports);
534 }
535 }
536 }
537
538 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530539 * Writes data to the specific generated file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530540 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530541 * @param file generated file
542 * @param genType generated file type
Bharat saraswal84366c52016-03-23 19:40:35 +0530543 * @param javaDocType java doc type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530544 * @param curNode current YANG node
545 * @param fileName file name
Bharat saraswal84366c52016-03-23 19:40:35 +0530546 * @throws IOException when fails to write into a file
547 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530548 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswal84366c52016-03-23 19:40:35 +0530549 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530550
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530551 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530552 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig, null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530553 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
554 }
555
556 /**
557 * Writes data to the specific generated file.
558 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530559 * @param file generated file
560 * @param fileName file name
561 * @param genType generated file type
562 * @param javaDocType java doc type
sangyun-hanf352f532016-05-30 19:33:27 +0900563 * @param pluginConfig plugin configurations
sangyun-han54cb8322016-06-01 14:12:07 +0900564 * @throws IOException when fails to write into a file
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530565 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530566 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530567 YangPluginConfig pluginConfig)
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530568 throws IOException {
Vidyashree Ramab3670472016-08-06 15:49:56 +0530569 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig, null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530570 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswal84366c52016-03-23 19:40:35 +0530571 }
572
Bharat saraswalaf413b82016-07-14 15:18:20 +0530573 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530574 * Returns set of node identifiers.
575 *
576 * @param parent parent node
577 * @return set of node identifiers
578 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530579 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530580
581 List<YangAtomicPath> targets = new ArrayList<>();
582 YangNodeIdentifier nodeId;
583 List<YangAugment> augments = getListOfAugments(parent);
584 for (YangAugment augment : augments) {
585 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
586
587 if (validateNodeIdentifierInSet(nodeId, targets)) {
588 targets.add(augment.getTargetNode().get(0));
589 }
590 }
591 return targets;
592 }
593
594 /* Returns list of augments.*/
595 private static List<YangAugment> getListOfAugments(YangNode parent) {
596 List<YangAugment> augments = new ArrayList<>();
597 YangNode child = parent.getChild();
598 while (child != null) {
599 if (child instanceof YangAugment) {
600 augments.add((YangAugment) child);
601 }
602 child = child.getNextSibling();
603 }
604 return augments;
605 }
606
607 /*Validates the set for duplicate names of node identifiers.*/
608 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
609 boolean isPresent = true;
610 for (YangAtomicPath target : targets) {
611 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
612 if (target.getNodeIdentifier().getPrefix() != null) {
613 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
614 } else {
615 isPresent = nodeId.getPrefix() != null;
616 }
617 }
618 }
619 return isPresent;
620 }
621
622 /**
623 * Adds resolved augmented node imports to manager class.
624 *
625 * @param parent parent node
626 */
627 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530628 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
629 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
630 .getTempJavaCodeFragmentFiles();
631 YangNode augmentedNode;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530632 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530633 String curNodeName;
Bharat saraswale50edca2016-08-05 01:58:25 +0530634 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530635 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530636 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530637 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
638 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
639 } else {
640 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
641 .getConflictResolver()));
642 }
643
644 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
645 parentInfo.getPluginConfig());
646 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
647 parentInfo.getJavaName(), parentInfo.getPackage());
Bharat saraswal8beac342016-08-04 02:00:03 +0530648 if (augmentedNode instanceof YangModule || augmentedNode instanceof YangSubModule) {
649 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
650 getCapitalCase(curNodeName) + OP_PARAM,
651 parentInfo.getPluginConfig());
652 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
653 parentInfo.getJavaName(), parentInfo.getPackage());
654 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530655
656 }
657 }
658
659 /**
660 * Returns qualified type info of augmented node.
661 *
662 * @param augmentedNode augmented node
663 * @param curNodeName current node name
664 * @param pluginConfig plugin configurations
665 * @return qualified type info of augmented node
666 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530667 private static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530668 String curNodeName, YangPluginConfig pluginConfig) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530669 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
Bharat saraswalaf413b82016-07-14 15:18:20 +0530670 getCapitalCase(curNodeName));
671 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530672 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswalaf413b82016-07-14 15:18:20 +0530673 pluginConfig));
674 }
675 return javaQualifiedTypeInfo;
676 }
677
678 /**
679 * Validates if augmented node is imported in parent node.
680 *
681 * @param javaQualifiedTypeInfo qualified type info
682 * @param importData import data
683 * @return true if present in imports
684 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530685 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530686 JavaImportData importData) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530687 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData.getImportSet()) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530688 if (curImportInfo.getClassInfo()
689 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
690 return curImportInfo.getPkgInfo()
691 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
692 }
693 }
694 return true;
695 }
696
697 /**
698 * Return augmented class name for data methods in manager and service.
699 *
700 * @param augmentedNode augmented node
701 * @param parent parent node
702 * @return augmented class name for data methods in manager and service
703 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530704 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530705 String curNodeName;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530706 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswale50edca2016-08-05 01:58:25 +0530707 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530708 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
709 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
710 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
711 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
712 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
713 } else {
714 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
715 .getConflictResolver()));
716 }
717
718 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
719 getCapitalCase(curNodeName),
720 parentInfo.getPluginConfig());
721 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
722 tempJavaServiceFragmentFiles.getJavaImportData())) {
723 return javaQualifiedTypeInfo.getClassInfo();
724 } else {
725 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
726 }
727 }
728
729 /**
730 * Returns parent node name for data methods in manager and service.
731 *
732 * @param parent parent node
733 * @param pluginConfig plugin configurations
734 * @return parent node name for data methods in manager and service
735 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530736 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswale50edca2016-08-05 01:58:25 +0530737 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530738 if (parentInfo.getJavaName() != null) {
739 return getCapitalCase(parentInfo.getJavaName());
740 }
741 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
742 .getConflictResolver()));
743
744 }
745
janani bb3be1332016-08-03 16:40:01 +0530746 /**
747 * Checks if the type name is leafref and returns the effective type name.
748 *
749 * @param attributeName name of the current type
750 * @param attributeType effective type
751 * @return name of the effective type
752 */
753 public static String isTypeNameLeafref(String attributeName, YangType<?> attributeType) {
754 if (attributeName.equalsIgnoreCase(LEAFREF)) {
755 return attributeType.getDataTypeName();
756 }
757 return attributeName;
758 }
759
760 /**
761 * Checks if the type is leafref and returns the effective type.
762 *
763 * @param attributeType current type
764 * @return effective type
765 */
766 public static YangType isTypeLeafref(YangType<?> attributeType) {
767 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
768 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
769 return leafRef.getEffectiveDataType();
770 }
771 return attributeType;
772 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530773
Bharat saraswal84366c52016-03-23 19:40:35 +0530774}