blob: a59143536d7aa8329403675a798e4c36b7929751 [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 saraswal039f59c2016-07-14 21:57:13 +0530337 boolean isFileCreated;
Bharat saraswal84366c52016-03-23 19:40:35 +0530338 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530339 isFileCreated = file.createNewFile();
340 if (!isFileCreated) {
341 throw new IOException("Failed to create " + file.getName() + " class file.");
342 }
sangyun-hanf352f532016-05-30 19:33:27 +0900343 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswal84366c52016-03-23 19:40:35 +0530344 } catch (IOException e) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530345 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswal84366c52016-03-23 19:40:35 +0530346 }
347 }
348
349 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530350 * Initiates generation of file based on generated file type.
351 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530352 * @param file generated file
353 * @param genType generated file type
354 * @param imports imports for the file
355 * @param curNode current YANG node
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530356 * @param className class name
357 * @throws IOException when fails to generate a file
358 */
sangyun-hanf352f532016-05-30 19:33:27 +0900359 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530360 YangNode curNode, String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530361 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530362
Bharat saraswal039f59c2016-07-14 21:57:13 +0530363 boolean isFileCreated;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530364 try {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530365 isFileCreated = file.createNewFile();
366 if (!isFileCreated) {
367 throw new IOException("Failed to create " + file.getName() + " class file.");
368 }
sangyun-hanf352f532016-05-30 19:33:27 +0900369 appendContents(file, genType, imports, curNode, className);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530370 } catch (IOException e) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530371 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530372 }
373 }
374
375 /**
Bharat saraswal84366c52016-03-23 19:40:35 +0530376 * Appends all the contents into a generated java file.
377 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530378 * @param file generated file
379 * @param genType generated file type
sangyun-hanf352f532016-05-30 19:33:27 +0900380 * @param importsList list of java imports
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530381 * @param curNode current YANG node
382 * @param className class name
Shankara-Huaweib7564772016-08-02 18:13:13 +0530383 * @throws IOException when fails to do IO operations
Bharat saraswal84366c52016-03-23 19:40:35 +0530384 */
sangyun-hanf352f532016-05-30 19:33:27 +0900385 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530386 String className)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530387 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530388
Bharat saraswale50edca2016-08-05 01:58:25 +0530389 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530390
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530391 String name = javaFileInfo.getJavaName();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530392 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530393
Bharat saraswal039f59c2016-07-14 21:57:13 +0530394 String pkgString;
sangyun-hanf352f532016-05-30 19:33:27 +0900395 if (genType == GENERATE_EVENT_CLASS
396 || genType == GENERATE_EVENT_LISTENER_INTERFACE
397 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani b3e357f62016-05-19 17:39:50 +0530398 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530399 } else {
400 pkgString = parsePackageString(path, importsList);
401 }
sangyun-hanf352f532016-05-30 19:33:27 +0900402 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530403 case INTERFACE_MASK:
Bharat saraswal039f59c2016-07-14 21:57:13 +0530404 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530405 write(file, genType, INTERFACE, curNode, className);
406 break;
Bharat saraswal8beac342016-08-04 02:00:03 +0530407 case DEFAULT_CLASS_MASK:
Bharat saraswald14cbe82016-07-14 13:26:18 +0530408 appendHeaderContents(file, pkgString, importsList);
409 write(file, genType, IMPL_CLASS, curNode, className);
410 break;
411 case BUILDER_CLASS_MASK:
412 write(file, genType, BUILDER_CLASS, curNode, className);
413 break;
414 case BUILDER_INTERFACE_MASK:
415 write(file, genType, BUILDER_INTERFACE, curNode, className);
416 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530417 case GENERATE_SERVICE_AND_MANAGER:
418 appendHeaderContents(file, pkgString, importsList);
419 write(file, genType, RPC_INTERFACE, curNode, className);
420 break;
421 case GENERATE_EVENT_CLASS:
422 appendHeaderContents(file, pkgString, importsList);
423 write(file, genType, EVENT, curNode, className);
424 break;
425 case GENERATE_EVENT_LISTENER_INTERFACE:
426 appendHeaderContents(file, pkgString, importsList);
427 write(file, genType, EVENT_LISTENER, curNode, className);
428 break;
429 case GENERATE_EVENT_SUBJECT_CLASS:
430 appendHeaderContents(file, pkgString, importsList);
431 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
432 break;
Shankara-Huawei234cd092016-07-14 11:35:34 +0530433 case GENERATE_IDENTITY_CLASS:
434 appendHeaderContents(file, pkgString, importsList);
435 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
436 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
437 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530438 default:
439 break;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530440 }
441 }
442
443 /**
444 * Appends all the contents into a generated java file.
445 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530446 * @param file generated file
447 * @param fileName generated file name
448 * @param genType generated file type
449 * @param importsList list of java imports
450 * @param pkg generated file package
sangyun-hanf352f532016-05-30 19:33:27 +0900451 * @param pluginConfig plugin configurations
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530452 * @throws IOException when fails to append contents
453 */
sangyun-hanf352f532016-05-30 19:33:27 +0900454 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530455 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530456 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530457
458 String pkgString = parsePackageString(pkg, importsList);
459
sangyun-hanf352f532016-05-30 19:33:27 +0900460 switch (genType) {
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530461 case GENERATE_TYPEDEF_CLASS:
462 appendHeaderContents(file, pkgString, importsList);
463 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
464 break;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530465 case GENERATE_UNION_CLASS:
466 appendHeaderContents(file, pkgString, importsList);
467 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
468 break;
469 case GENERATE_ENUM_CLASS:
470 appendHeaderContents(file, pkgString, importsList);
471 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
472 break;
473 default:
474 break;
Bharat saraswal84366c52016-03-23 19:40:35 +0530475 }
476 }
477
478 /**
479 * Removes base directory path from package and generates package string for file.
480 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530481 * @param javaPkg generated java package
Bharat saraswal84366c52016-03-23 19:40:35 +0530482 * @param importsList list of imports
483 * @return package string
484 */
485 private static String parsePackageString(String javaPkg, List<String> importsList) {
486
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530487 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswal84366c52016-03-23 19:40:35 +0530488 if (importsList != null) {
489 if (!importsList.isEmpty()) {
490 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
491 } else {
492 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
493 }
494 } else {
495 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
496 }
497 }
498
499 /**
Bharat saraswal039f59c2016-07-14 21:57:13 +0530500 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
501 * package.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530502 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530503 * @param file generated file
504 * @param pkg generated package
Bharat saraswal84366c52016-03-23 19:40:35 +0530505 * @param importsList list of imports
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530506 * @throws IOException when fails to append contents
Bharat saraswal84366c52016-03-23 19:40:35 +0530507 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530508 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
509 throws IOException {
Bharat saraswal84366c52016-03-23 19:40:35 +0530510
511 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
512 insertDataIntoJavaFile(file, pkg);
513
514 /*
Bharat saraswal039f59c2016-07-14 21:57:13 +0530515 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530516 * JavaCodeSnippetGen.getFileHeaderComment
517 */
518
519 if (importsList != null) {
520 insertDataIntoJavaFile(file, NEW_LINE);
521 for (String imports : importsList) {
522 insertDataIntoJavaFile(file, imports);
523 }
524 }
525 }
526
527 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530528 * Writes data to the specific generated file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530529 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530530 * @param file generated file
531 * @param genType generated file type
Bharat saraswal84366c52016-03-23 19:40:35 +0530532 * @param javaDocType java doc type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530533 * @param curNode current YANG node
534 * @param fileName file name
Bharat saraswal84366c52016-03-23 19:40:35 +0530535 * @throws IOException when fails to write into a file
536 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530537 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswal84366c52016-03-23 19:40:35 +0530538 throws IOException {
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530539
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530540 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530541 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig, null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530542 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
543 }
544
545 /**
546 * Writes data to the specific generated file.
547 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530548 * @param file generated file
549 * @param fileName file name
550 * @param genType generated file type
551 * @param javaDocType java doc type
sangyun-hanf352f532016-05-30 19:33:27 +0900552 * @param pluginConfig plugin configurations
sangyun-han54cb8322016-06-01 14:12:07 +0900553 * @throws IOException when fails to write into a file
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530554 */
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530555 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530556 YangPluginConfig pluginConfig)
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530557 throws IOException {
Vidyashree Ramab3670472016-08-06 15:49:56 +0530558 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig, null));
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530559 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswal84366c52016-03-23 19:40:35 +0530560 }
561
Bharat saraswalaf413b82016-07-14 15:18:20 +0530562 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530563 * Returns set of node identifiers.
564 *
565 * @param parent parent node
566 * @return set of node identifiers
567 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530568 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530569
570 List<YangAtomicPath> targets = new ArrayList<>();
571 YangNodeIdentifier nodeId;
572 List<YangAugment> augments = getListOfAugments(parent);
573 for (YangAugment augment : augments) {
574 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
575
576 if (validateNodeIdentifierInSet(nodeId, targets)) {
577 targets.add(augment.getTargetNode().get(0));
578 }
579 }
580 return targets;
581 }
582
583 /* Returns list of augments.*/
584 private static List<YangAugment> getListOfAugments(YangNode parent) {
585 List<YangAugment> augments = new ArrayList<>();
586 YangNode child = parent.getChild();
587 while (child != null) {
588 if (child instanceof YangAugment) {
589 augments.add((YangAugment) child);
590 }
591 child = child.getNextSibling();
592 }
593 return augments;
594 }
595
596 /*Validates the set for duplicate names of node identifiers.*/
597 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
598 boolean isPresent = true;
599 for (YangAtomicPath target : targets) {
600 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
601 if (target.getNodeIdentifier().getPrefix() != null) {
602 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
603 } else {
604 isPresent = nodeId.getPrefix() != null;
605 }
606 }
607 }
608 return isPresent;
609 }
610
611 /**
612 * Adds resolved augmented node imports to manager class.
613 *
614 * @param parent parent node
615 */
616 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530617 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
618 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
619 .getTempJavaCodeFragmentFiles();
620 YangNode augmentedNode;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530621 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530622 String curNodeName;
Bharat saraswale50edca2016-08-05 01:58:25 +0530623 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530624 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530625 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530626 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
627 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
628 } else {
629 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
630 .getConflictResolver()));
631 }
632
633 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
634 parentInfo.getPluginConfig());
635 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
636 parentInfo.getJavaName(), parentInfo.getPackage());
Bharat saraswal8beac342016-08-04 02:00:03 +0530637 if (augmentedNode instanceof YangModule || augmentedNode instanceof YangSubModule) {
638 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
639 getCapitalCase(curNodeName) + OP_PARAM,
640 parentInfo.getPluginConfig());
641 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
642 parentInfo.getJavaName(), parentInfo.getPackage());
643 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530644
645 }
646 }
647
648 /**
649 * Returns qualified type info of augmented node.
650 *
651 * @param augmentedNode augmented node
652 * @param curNodeName current node name
653 * @param pluginConfig plugin configurations
654 * @return qualified type info of augmented node
655 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530656 private static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530657 String curNodeName, YangPluginConfig pluginConfig) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530658 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
Bharat saraswalaf413b82016-07-14 15:18:20 +0530659 getCapitalCase(curNodeName));
660 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530661 javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
Bharat saraswalaf413b82016-07-14 15:18:20 +0530662 pluginConfig));
663 }
664 return javaQualifiedTypeInfo;
665 }
666
667 /**
668 * Validates if augmented node is imported in parent node.
669 *
670 * @param javaQualifiedTypeInfo qualified type info
671 * @param importData import data
672 * @return true if present in imports
673 */
Shankara-Huaweib7564772016-08-02 18:13:13 +0530674 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530675 JavaImportData importData) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530676 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData.getImportSet()) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530677 if (curImportInfo.getClassInfo()
678 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
679 return curImportInfo.getPkgInfo()
680 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
681 }
682 }
683 return true;
684 }
685
686 /**
687 * Return augmented class name for data methods in manager and service.
688 *
689 * @param augmentedNode augmented node
690 * @param parent parent node
691 * @return augmented class name for data methods in manager and service
692 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530693 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530694 String curNodeName;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530695 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswale50edca2016-08-05 01:58:25 +0530696 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530697 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
698 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
699 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
700 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
701 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
702 } else {
703 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
704 .getConflictResolver()));
705 }
706
707 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
708 getCapitalCase(curNodeName),
709 parentInfo.getPluginConfig());
710 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
711 tempJavaServiceFragmentFiles.getJavaImportData())) {
712 return javaQualifiedTypeInfo.getClassInfo();
713 } else {
714 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
715 }
716 }
717
718 /**
719 * Returns parent node name for data methods in manager and service.
720 *
721 * @param parent parent node
722 * @param pluginConfig plugin configurations
723 * @return parent node name for data methods in manager and service
724 */
Bharat saraswal039f59c2016-07-14 21:57:13 +0530725 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswale50edca2016-08-05 01:58:25 +0530726 JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530727 if (parentInfo.getJavaName() != null) {
728 return getCapitalCase(parentInfo.getJavaName());
729 }
730 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
731 .getConflictResolver()));
732
733 }
734
janani bb3be1332016-08-03 16:40:01 +0530735 /**
736 * Checks if the type name is leafref and returns the effective type name.
737 *
738 * @param attributeName name of the current type
739 * @param attributeType effective type
740 * @return name of the effective type
741 */
742 public static String isTypeNameLeafref(String attributeName, YangType<?> attributeType) {
743 if (attributeName.equalsIgnoreCase(LEAFREF)) {
744 return attributeType.getDataTypeName();
745 }
746 return attributeName;
747 }
748
749 /**
750 * Checks if the type is leafref and returns the effective type.
751 *
752 * @param attributeType current type
753 * @return effective type
754 */
755 public static YangType isTypeLeafref(YangType<?> attributeType) {
756 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
757 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
758 return leafRef.getEffectiveDataType();
759 }
760 return attributeType;
761 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530762
Bharat saraswal84366c52016-03-23 19:40:35 +0530763}