blob: f76d9b2a292dc2cb0b49bdbba0e04cad3c1f462d [file] [log] [blame]
Bharat saraswale2d51d62016-03-23 19:40:35 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswale2d51d62016-03-23 19:40:35 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053021import java.util.ArrayList;
Bharat saraswale2d51d62016-03-23 19:40:35 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Bharat saraswalb551aae2016-07-14 15:18:20 +053024import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053025import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053026import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053027import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053028import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053029import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswale2d51d62016-03-23 19:40:35 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053031import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswalb551aae2016-07-14 15:18:20 +053032import org.onosproject.yangutils.translator.tojava.JavaImportData;
33import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053034import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalb551aae2016-07-14 15:18:20 +053035import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswalc0e04842016-05-12 13:16:57 +053036import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053037import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053038import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053039import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
40import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053041import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
42import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053043import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044
45import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053071import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalb551aae2016-07-14 15:18:20 +053080import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
81import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053082import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053083import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053085import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053086import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
janani bdd1314f2016-05-19 17:39:50 +053087import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053088import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
89import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
90import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053091import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
92import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053094import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
95import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053097import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
98import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Bharat saraswald50c6382016-07-14 21:57:13 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OPERATION_CLASS;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530103import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
104import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
105import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530106import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530107import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530108
109/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530110 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530111 */
112public final class JavaFileGeneratorUtils {
113
114 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530115 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530116 */
117 private JavaFileGeneratorUtils() {
118 }
119
120 /**
121 * Returns a file object for generated file.
122 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530123 * @param filePath file package path
Bharat saraswald50c6382016-07-14 21:57:13 +0530124 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530125 * @param extension file extension
Bharat saraswald50c6382016-07-14 21:57:13 +0530126 * @param baseCodePath cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530127 * @return file object
128 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530129 public static File getFileObject(String filePath, String fileName, String extension, String baseCodePath) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530130
Bharat saraswald50c6382016-07-14 21:57:13 +0530131 return new File(baseCodePath + filePath + SLASH + fileName + extension);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530132 }
133
134 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530135 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530136 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530137 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530138 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530139 * @param absolutePath absolute path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530140 * @return data stored in temporary files
141 * @throws IOException when failed to get the data from temporary file handle
142 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530143 static String getDataFromTempFileHandle(int generatedTempFiles,
144 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530145 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530146
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530147 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530148
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530149 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
150 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
151 }
152
153 TempJavaBeanFragmentFiles beanFragmentFiles = null;
154
155 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
156 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
157 }
158
159 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
160 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
161 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
162 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530163
Bharat saraswald50c6382016-07-14 21:57:13 +0530164 TempJavaEventFragmentFiles eventFragmentFiles = null;
165 if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
166 eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
167 }
168
Bharat saraswalc0e04842016-05-12 13:16:57 +0530169 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
170 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530171 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
172 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530173 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530174 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530175 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
176 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530177 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530178 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530179 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
180 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530181 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530182 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530183 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
184 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530185 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530186 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530187 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
188 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530189 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530190 if (beanFragmentFiles == null) {
191 throw new TranslatorException("Required constructor info is missing.");
192 }
193 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530194 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
195 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530196 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530197 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530198 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
199 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530200 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530201 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530202 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
203 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530204 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530205 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530206 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
207 absolutePath);
208 } else if ((generatedTempFiles & AUGMENTE_CLASS_CONSTRUCTOR_MASK) != 0) {
209 return tempJavaFragmentFiles
210 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAugmentConstructorImplTempFileHandle(),
211 absolutePath);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530212 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530213 if (typeFragmentFiles == null) {
214 throw new TranslatorException("Required of string implementation info is missing.");
215 }
216 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530217 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530218 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
219 if (typeFragmentFiles == null) {
220 throw new TranslatorException("Required constructor implementation info is missing.");
221 }
222 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530223 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
224 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530225 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530226 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530227 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
228 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530229 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
230 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
231 throw new TranslatorException("Required enum info is missing.");
232 }
233 TempJavaEnumerationFragmentFiles enumFragmentFiles =
234 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
235 return enumFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530236 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530237 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
238 if (serviceFragmentFiles == null) {
239 throw new TranslatorException("Required rpc interface info is missing.");
240 }
241 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530242 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
243 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530244 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530245 if (serviceFragmentFiles == null) {
246 throw new TranslatorException("Required rpc implementation info is missing.");
247 }
248 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530249 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
250 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530251 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530252 if (eventFragmentFiles == null) {
253 throw new TranslatorException("Required event enum implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530254 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530255 return eventFragmentFiles
256 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530257 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530258 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530259 if (eventFragmentFiles == null) {
260 throw new TranslatorException("Required event method implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530261 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530262 return eventFragmentFiles
263 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530264 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530265 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530266 if (eventFragmentFiles == null) {
267 throw new TranslatorException("Required event subject getter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530268 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530269 return eventFragmentFiles
270 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530271 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530272 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530273 if (eventFragmentFiles == null) {
274 throw new TranslatorException("Required event subject setter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530275 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530276 return eventFragmentFiles
277 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530278 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530279 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530280 if (eventFragmentFiles == null) {
281 throw new TranslatorException("Required event subject attribute implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530282 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530283 return eventFragmentFiles
284 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530285 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530286 }
287 return null;
288 }
289
290 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530291 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530292 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530293 * @param file generated file
294 * @param className generated file class name
295 * @param genType generated file type
296 * @param imports imports for the file
297 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530298 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530299 * @throws IOException when fails to generate a file
300 */
sangyun-han19f8d352016-05-30 19:33:27 +0900301 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530302 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530303 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530304
Bharat saraswald50c6382016-07-14 21:57:13 +0530305 boolean isFileCreated;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530306 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530307 isFileCreated = file.createNewFile();
308 if (!isFileCreated) {
309 throw new IOException("Failed to create " + file.getName() + " class file.");
310 }
sangyun-han19f8d352016-05-30 19:33:27 +0900311 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530312 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530313 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswale2d51d62016-03-23 19:40:35 +0530314 }
315 }
316
317 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530318 * Initiates generation of file based on generated file type.
319 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530320 * @param file generated file
321 * @param genType generated file type
322 * @param imports imports for the file
323 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530324 * @param className class name
325 * @throws IOException when fails to generate a file
326 */
sangyun-han19f8d352016-05-30 19:33:27 +0900327 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530328 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530329 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530330
Bharat saraswald50c6382016-07-14 21:57:13 +0530331 boolean isFileCreated;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530332 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530333 isFileCreated = file.createNewFile();
334 if (!isFileCreated) {
335 throw new IOException("Failed to create " + file.getName() + " class file.");
336 }
sangyun-han19f8d352016-05-30 19:33:27 +0900337 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530338 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530339 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530340 }
341 }
342
343 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530344 * Appends all the contents into a generated java file.
345 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530346 * @param file generated file
347 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900348 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530349 * @param curNode current YANG node
350 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900351 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530352 */
sangyun-han19f8d352016-05-30 19:33:27 +0900353 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530354 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530355 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530356
357 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
358
Bharat saraswal33dfa012016-05-17 19:59:16 +0530359 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530360 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530361
Bharat saraswald50c6382016-07-14 21:57:13 +0530362 String pkgString;
sangyun-han19f8d352016-05-30 19:33:27 +0900363 if (genType == GENERATE_EVENT_CLASS
364 || genType == GENERATE_EVENT_LISTENER_INTERFACE
365 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530366 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530367 } else {
368 pkgString = parsePackageString(path, importsList);
369 }
sangyun-han19f8d352016-05-30 19:33:27 +0900370 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530371 case INTERFACE_MASK:
Bharat saraswald50c6382016-07-14 21:57:13 +0530372 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530373 write(file, genType, INTERFACE, curNode, className);
374 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530375 case IMPL_CLASS_MASK:
376 appendHeaderContents(file, pkgString, importsList);
377 write(file, genType, IMPL_CLASS, curNode, className);
378 break;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530379 case OPERATION_CLASS_MASK:
380 appendHeaderContents(file, pkgString, importsList);
381 write(file, genType, OPERATION_CLASS, curNode, className);
382 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530383 case BUILDER_CLASS_MASK:
384 write(file, genType, BUILDER_CLASS, curNode, className);
385 break;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530386 case OPERATION_BUILDER_CLASS_MASK:
387 write(file, genType, BUILDER_CLASS, curNode, className);
388 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530389 case BUILDER_INTERFACE_MASK:
390 write(file, genType, BUILDER_INTERFACE, curNode, className);
391 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530392 case GENERATE_SERVICE_AND_MANAGER:
393 appendHeaderContents(file, pkgString, importsList);
394 write(file, genType, RPC_INTERFACE, curNode, className);
395 break;
396 case GENERATE_EVENT_CLASS:
397 appendHeaderContents(file, pkgString, importsList);
398 write(file, genType, EVENT, curNode, className);
399 break;
400 case GENERATE_EVENT_LISTENER_INTERFACE:
401 appendHeaderContents(file, pkgString, importsList);
402 write(file, genType, EVENT_LISTENER, curNode, className);
403 break;
404 case GENERATE_EVENT_SUBJECT_CLASS:
405 appendHeaderContents(file, pkgString, importsList);
406 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
407 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530408 case GENERATE_IDENTITY_CLASS:
409 appendHeaderContents(file, pkgString, importsList);
410 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
411 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
412 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530413 default:
414 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530415 }
416 }
417
418 /**
419 * Appends all the contents into a generated java file.
420 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530421 * @param file generated file
422 * @param fileName generated file name
423 * @param genType generated file type
424 * @param importsList list of java imports
425 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900426 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530427 * @throws IOException when fails to append contents
428 */
sangyun-han19f8d352016-05-30 19:33:27 +0900429 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530430 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530431 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530432
433 String pkgString = parsePackageString(pkg, importsList);
434
sangyun-han19f8d352016-05-30 19:33:27 +0900435 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530436 case GENERATE_TYPEDEF_CLASS:
437 appendHeaderContents(file, pkgString, importsList);
438 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
439 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530440 case GENERATE_UNION_CLASS:
441 appendHeaderContents(file, pkgString, importsList);
442 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
443 break;
444 case GENERATE_ENUM_CLASS:
445 appendHeaderContents(file, pkgString, importsList);
446 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
447 break;
448 default:
449 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530450 }
451 }
452
453 /**
454 * Removes base directory path from package and generates package string for file.
455 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530456 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530457 * @param importsList list of imports
458 * @return package string
459 */
460 private static String parsePackageString(String javaPkg, List<String> importsList) {
461
Bharat saraswal33dfa012016-05-17 19:59:16 +0530462 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530463 if (importsList != null) {
464 if (!importsList.isEmpty()) {
465 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
466 } else {
467 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
468 }
469 } else {
470 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
471 }
472 }
473
474 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530475 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
476 * package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530477 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530478 * @param file generated file
479 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530480 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530481 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530482 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530483 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
484 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530485
486 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
487 insertDataIntoJavaFile(file, pkg);
488
489 /*
Bharat saraswald50c6382016-07-14 21:57:13 +0530490 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530491 * JavaCodeSnippetGen.getFileHeaderComment
492 */
493
494 if (importsList != null) {
495 insertDataIntoJavaFile(file, NEW_LINE);
496 for (String imports : importsList) {
497 insertDataIntoJavaFile(file, imports);
498 }
499 }
500 }
501
502 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530503 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530504 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530505 * @param file generated file
506 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530507 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530508 * @param curNode current YANG node
509 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530510 * @throws IOException when fails to write into a file
511 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530512 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530513 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530514
Bharat saraswal33dfa012016-05-17 19:59:16 +0530515 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530516 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530517 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
518 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530519 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530520 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530521 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530522 }
523 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530524 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530525 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530526 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
527 }
528
529 /**
530 * Writes data to the specific generated file.
531 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530532 * @param file generated file
533 * @param fileName file name
534 * @param genType generated file type
535 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900536 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900537 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530538 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530539 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530540 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530541 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530542 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530543 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530544 }
545
Bharat saraswalb551aae2016-07-14 15:18:20 +0530546 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530547 * Returns set of node identifiers.
548 *
549 * @param parent parent node
550 * @return set of node identifiers
551 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530552 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530553
554 List<YangAtomicPath> targets = new ArrayList<>();
555 YangNodeIdentifier nodeId;
556 List<YangAugment> augments = getListOfAugments(parent);
557 for (YangAugment augment : augments) {
558 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
559
560 if (validateNodeIdentifierInSet(nodeId, targets)) {
561 targets.add(augment.getTargetNode().get(0));
562 }
563 }
564 return targets;
565 }
566
567 /* Returns list of augments.*/
568 private static List<YangAugment> getListOfAugments(YangNode parent) {
569 List<YangAugment> augments = new ArrayList<>();
570 YangNode child = parent.getChild();
571 while (child != null) {
572 if (child instanceof YangAugment) {
573 augments.add((YangAugment) child);
574 }
575 child = child.getNextSibling();
576 }
577 return augments;
578 }
579
580 /*Validates the set for duplicate names of node identifiers.*/
581 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
582 boolean isPresent = true;
583 for (YangAtomicPath target : targets) {
584 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
585 if (target.getNodeIdentifier().getPrefix() != null) {
586 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
587 } else {
588 isPresent = nodeId.getPrefix() != null;
589 }
590 }
591 }
592 return isPresent;
593 }
594
595 /**
596 * Adds resolved augmented node imports to manager class.
597 *
598 * @param parent parent node
599 */
600 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530601 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
602 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
603 .getTempJavaCodeFragmentFiles();
604 YangNode augmentedNode;
605 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
606 String curNodeName;
607 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
608 for (YangAtomicPath nodeId : targets) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530609 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530610 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
611 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
612 } else {
613 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
614 .getConflictResolver()));
615 }
616
617 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
618 parentInfo.getPluginConfig());
619 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
620 parentInfo.getJavaName(), parentInfo.getPackage());
621
622 }
623 }
624
625 /**
626 * Returns qualified type info of augmented node.
627 *
628 * @param augmentedNode augmented node
629 * @param curNodeName current node name
630 * @param pluginConfig plugin configurations
631 * @return qualified type info of augmented node
632 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530633 private static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
634 YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530635 JavaQualifiedTypeInfo javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
636 getCapitalCase(curNodeName));
637 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
638 javaQualifiedTypeInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode,
639 pluginConfig));
640 }
641 return javaQualifiedTypeInfo;
642 }
643
644 /**
645 * Validates if augmented node is imported in parent node.
646 *
647 * @param javaQualifiedTypeInfo qualified type info
648 * @param importData import data
649 * @return true if present in imports
650 */
651 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfo javaQualifiedTypeInfo,
652 JavaImportData importData) {
653 for (JavaQualifiedTypeInfo curImportInfo : importData.getImportSet()) {
654 if (curImportInfo.getClassInfo()
655 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
656 return curImportInfo.getPkgInfo()
657 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
658 }
659 }
660 return true;
661 }
662
663 /**
664 * Return augmented class name for data methods in manager and service.
665 *
666 * @param augmentedNode augmented node
667 * @param parent parent node
668 * @return augmented class name for data methods in manager and service
669 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530670 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530671 String curNodeName;
672 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
673 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
674 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
675 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
676 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
677 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
678 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
679 } else {
680 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
681 .getConflictResolver()));
682 }
683
684 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
685 getCapitalCase(curNodeName),
686 parentInfo.getPluginConfig());
687 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
688 tempJavaServiceFragmentFiles.getJavaImportData())) {
689 return javaQualifiedTypeInfo.getClassInfo();
690 } else {
691 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
692 }
693 }
694
695 /**
696 * Returns parent node name for data methods in manager and service.
697 *
698 * @param parent parent node
699 * @param pluginConfig plugin configurations
700 * @return parent node name for data methods in manager and service
701 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530702 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530703 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
704 if (parentInfo.getJavaName() != null) {
705 return getCapitalCase(parentInfo.getJavaName());
706 }
707 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
708 .getConflictResolver()));
709
710 }
711
Bharat saraswale2d51d62016-03-23 19:40:35 +0530712}