blob: 6f4fa9bcb5dbd3d4bdf0a48cf765e168a4ae0287 [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;
22import java.util.HashMap;
Bharat saraswale2d51d62016-03-23 19:40:35 +053023import java.util.List;
Bharat saraswalb551aae2016-07-14 15:18:20 +053024import java.util.Map;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053025
Bharat saraswalb551aae2016-07-14 15:18:20 +053026import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053027import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053028import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053029import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053030import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053031import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswale2d51d62016-03-23 19:40:35 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswalb551aae2016-07-14 15:18:20 +053034import org.onosproject.yangutils.translator.tojava.JavaImportData;
35import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053036import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalb551aae2016-07-14 15:18:20 +053037import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswalc0e04842016-05-12 13:16:57 +053038import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053039import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053040import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
41import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053042import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
43import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053044import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Bharat saraswale2d51d62016-03-23 19:40:35 +053045
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalb551aae2016-07-14 15:18:20 +053079import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo.getQualifiedTypeInfoOfCurNode;
80import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053081import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053082import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053083import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053084import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswale2d51d62016-03-23 19:40:35 +053085import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053087import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
janani bdd1314f2016-05-19 17:39:50 +053088import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053089import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
90import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
91import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053092import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
93import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053094import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
96import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053097import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053098import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
99import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
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 fileName file name
124 * @param filePath file package path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530125 * @param extension file extension
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530126 * @param handle cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530127 * @return file object
128 */
129 public static File getFileObject(String filePath, String fileName, String extension, JavaFileInfo handle) {
130
131 return new File(handle.getBaseCodeGenPath() + filePath + SLASH + fileName + extension);
132 }
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 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530143 public static String getDataFromTempFileHandle(int generatedTempFiles,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530144 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 saraswalc0e04842016-05-12 13:16:57 +0530164 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
165 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530166 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
167 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530168 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530169 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530170 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
171 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530172 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530173 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530174 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
175 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530176 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530177 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530178 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
179 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530181 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530182 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
183 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530184 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530185 if (beanFragmentFiles == null) {
186 throw new TranslatorException("Required constructor info is missing.");
187 }
188 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530189 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
190 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530191 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530192 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530193 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
194 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530195 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530196 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530197 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
198 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530199 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530201 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
202 absolutePath);
203 } else if ((generatedTempFiles & AUGMENTE_CLASS_CONSTRUCTOR_MASK) != 0) {
204 return tempJavaFragmentFiles
205 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAugmentConstructorImplTempFileHandle(),
206 absolutePath);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530207 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530208 if (typeFragmentFiles == null) {
209 throw new TranslatorException("Required of string implementation info is missing.");
210 }
211 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530212 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530213 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
214 if (typeFragmentFiles == null) {
215 throw new TranslatorException("Required constructor implementation info is missing.");
216 }
217 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530218 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
219 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530220 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530221 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530222 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
223 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530224 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
225 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
226 throw new TranslatorException("Required enum info is missing.");
227 }
228 TempJavaEnumerationFragmentFiles enumFragmentFiles =
229 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
230 return enumFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530231 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530232 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
233 if (serviceFragmentFiles == null) {
234 throw new TranslatorException("Required rpc interface info is missing.");
235 }
236 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530237 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
238 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530239 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530240 if (serviceFragmentFiles == null) {
241 throw new TranslatorException("Required rpc implementation info is missing.");
242 }
243 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530244 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
245 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530246 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
247 if (serviceFragmentFiles == null) {
248 throw new TranslatorException("Required rpc implementation info is missing.");
249 }
250 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530251 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventEnumTempFileHandle(),
252 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530253 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
254 if (serviceFragmentFiles == null) {
255 throw new TranslatorException("Required rpc implementation info is missing.");
256 }
257 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530258 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventMethodTempFileHandle(),
259 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530260 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
261 if (serviceFragmentFiles == null) {
262 throw new TranslatorException("Required rpc implementation info is missing.");
263 }
264 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530265 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectGetterTempFileHandle(),
266 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530267 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
268 if (serviceFragmentFiles == null) {
269 throw new TranslatorException("Required rpc implementation info is missing.");
270 }
271 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530272 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectSetterTempFileHandle(),
273 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530274 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
275 if (serviceFragmentFiles == null) {
276 throw new TranslatorException("Required rpc implementation info is missing.");
277 }
278 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530279 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getEventSubjectAttributeTempFileHandle(),
280 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530281 }
282 return null;
283 }
284
285 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530286 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530287 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530288 * @param file generated file
289 * @param className generated file class name
290 * @param genType generated file type
291 * @param imports imports for the file
292 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530293 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530294 * @throws IOException when fails to generate a file
295 */
sangyun-han19f8d352016-05-30 19:33:27 +0900296 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530297 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530298 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530299
300 try {
301 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900302 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530303 } catch (IOException e) {
304 throw new IOException("Failed to create " + file.getName() + " class file.");
305 }
306 }
307
308 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530309 * Initiates generation of file based on generated file type.
310 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530311 * @param file generated file
312 * @param genType generated file type
313 * @param imports imports for the file
314 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530315 * @param className class name
316 * @throws IOException when fails to generate a file
317 */
sangyun-han19f8d352016-05-30 19:33:27 +0900318 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530319 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530320 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530321
322 try {
323 file.createNewFile();
sangyun-han19f8d352016-05-30 19:33:27 +0900324 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530325 } catch (IOException e) {
326 throw new IOException("Failed to create " + file.getName() + " class file.");
327 }
328 }
329
330 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530331 * Appends all the contents into a generated java file.
332 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530333 * @param file generated file
334 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900335 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530336 * @param curNode current YANG node
337 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900338 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530339 */
sangyun-han19f8d352016-05-30 19:33:27 +0900340 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530341 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530342 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530343
344 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
345
Bharat saraswal33dfa012016-05-17 19:59:16 +0530346 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530347 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530348
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530349 YangNode augmentedNode = null;
350 if (curNode instanceof YangAugment) {
351 augmentedNode = ((YangAugment) curNode).getAugmentedNode();
352 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530353 String pkgString = null;
sangyun-han19f8d352016-05-30 19:33:27 +0900354 if (genType == GENERATE_EVENT_CLASS
355 || genType == GENERATE_EVENT_LISTENER_INTERFACE
356 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530357 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530358 } else {
359 pkgString = parsePackageString(path, importsList);
360 }
sangyun-han19f8d352016-05-30 19:33:27 +0900361 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530362 case INTERFACE_MASK:
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530363 if (augmentedNode != null) {
364 appendHeaderContents(file, pkgString, importsList, augmentedNode);
365 } else {
366 appendHeaderContents(file, pkgString, importsList);
367 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530368 write(file, genType, INTERFACE, curNode, className);
369 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530370 case IMPL_CLASS_MASK:
371 appendHeaderContents(file, pkgString, importsList);
372 write(file, genType, IMPL_CLASS, curNode, className);
373 break;
374 case BUILDER_CLASS_MASK:
375 write(file, genType, BUILDER_CLASS, curNode, className);
376 break;
377 case BUILDER_INTERFACE_MASK:
378 write(file, genType, BUILDER_INTERFACE, curNode, className);
379 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530380 case GENERATE_SERVICE_AND_MANAGER:
381 appendHeaderContents(file, pkgString, importsList);
382 write(file, genType, RPC_INTERFACE, curNode, className);
383 break;
384 case GENERATE_EVENT_CLASS:
385 appendHeaderContents(file, pkgString, importsList);
386 write(file, genType, EVENT, curNode, className);
387 break;
388 case GENERATE_EVENT_LISTENER_INTERFACE:
389 appendHeaderContents(file, pkgString, importsList);
390 write(file, genType, EVENT_LISTENER, curNode, className);
391 break;
392 case GENERATE_EVENT_SUBJECT_CLASS:
393 appendHeaderContents(file, pkgString, importsList);
394 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
395 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530396 case GENERATE_IDENTITY_CLASS:
397 appendHeaderContents(file, pkgString, importsList);
398 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
399 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
400 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530401 default:
402 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530403 }
404 }
405
406 /**
407 * Appends all the contents into a generated java file.
408 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530409 * @param file generated file
410 * @param fileName generated file name
411 * @param genType generated file type
412 * @param importsList list of java imports
413 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900414 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530415 * @throws IOException when fails to append contents
416 */
sangyun-han19f8d352016-05-30 19:33:27 +0900417 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530418 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530419 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530420
421 String pkgString = parsePackageString(pkg, importsList);
422
sangyun-han19f8d352016-05-30 19:33:27 +0900423 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530424 case GENERATE_TYPEDEF_CLASS:
425 appendHeaderContents(file, pkgString, importsList);
426 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
427 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530428 case GENERATE_UNION_CLASS:
429 appendHeaderContents(file, pkgString, importsList);
430 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
431 break;
432 case GENERATE_ENUM_CLASS:
433 appendHeaderContents(file, pkgString, importsList);
434 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
435 break;
436 default:
437 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530438 }
439 }
440
441 /**
442 * Removes base directory path from package and generates package string for file.
443 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530444 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530445 * @param importsList list of imports
446 * @return package string
447 */
448 private static String parsePackageString(String javaPkg, List<String> importsList) {
449
Bharat saraswal33dfa012016-05-17 19:59:16 +0530450 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530451 if (importsList != null) {
452 if (!importsList.isEmpty()) {
453 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
454 } else {
455 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
456 }
457 } else {
458 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
459 }
460 }
461
462 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530463 * Appends other contents to interface, impl and typedef classes.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530464 * for example : ONOS copyright, imports and package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530465 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530466 * @param file generated file
467 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530468 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530469 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530470 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530471 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
472 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530473
474 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
475 insertDataIntoJavaFile(file, pkg);
476
477 /*
478 * TODO: add the file header using
479 * JavaCodeSnippetGen.getFileHeaderComment
480 */
481
482 if (importsList != null) {
483 insertDataIntoJavaFile(file, NEW_LINE);
484 for (String imports : importsList) {
485 insertDataIntoJavaFile(file, imports);
486 }
487 }
488 }
489
490 /**
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530491 * Appends other contents to interface and impl classes when augmented node is not null.
492 * for example : ONOS copyright, imports and package.
493 *
494 * @param file generated file
495 * @param pkg generated package
496 * @param augmentedNode augmented node
497 * @param importsList list of imports
498 * @throws IOException when fails to append contents
499 */
500 private static void appendHeaderContents(File file, String pkg, List<String> importsList, YangNode augmentedNode)
501 throws IOException {
502
503 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
504 insertDataIntoJavaFile(file, pkg);
505
506 /*
507 * TODO: add the file header using
508 * JavaCodeSnippetGen.getFileHeaderComment
509 */
510
511 if (importsList != null) {
512 insertDataIntoJavaFile(file, NEW_LINE);
513 for (String imports : importsList) {
514 if (!imports.contains(getCapitalCase(DEFAULT) + getCapitalCase(getCamelCase(augmentedNode.getName(),
515 null)))
516 && !imports.contains(getCapitalCase(getCamelCase(augmentedNode.getName(), null)) + BUILDER)) {
517 insertDataIntoJavaFile(file, imports);
518 }
519 }
520 }
521 }
522
523 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530524 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530525 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530526 * @param file generated file
527 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530528 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530529 * @param curNode current YANG node
530 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530531 * @throws IOException when fails to write into a file
532 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530533 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530534 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530535
Bharat saraswal33dfa012016-05-17 19:59:16 +0530536 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530537 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530538 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
539 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530540 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530541 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530542 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530543 }
544 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530545 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530546 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530547 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
548 }
549
550 /**
551 * Writes data to the specific generated file.
552 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530553 * @param file generated file
554 * @param fileName file name
555 * @param genType generated file type
556 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900557 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900558 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530559 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530560 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530561 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530562 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530563 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530564 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530565 }
566
Bharat saraswalb551aae2016-07-14 15:18:20 +0530567 /**
568 * Returns resolved augments for manager classes.
569 *
570 * @param parent parent node
571 * @return resolved augments for manager classes
572 */
573 public static Map<YangAtomicPath, YangAugment> getResolvedAugmentsForManager(YangNode parent) {
574 Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = new HashMap<>();
575 YangNodeIdentifier nodeId;
576 List<YangAtomicPath> targets = new ArrayList<>();
577 for (YangAugment augment : getListOfAugments(parent)) {
578 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
579 if (validateNodeIdentifierInSet(nodeId, targets)) {
580 targets.add(augment.getTargetNode().get(0));
581 resolvedAugmentsForManager.put(augment.getTargetNode().get(0), augment);
582 }
583 }
584 return resolvedAugmentsForManager;
585 }
586
587 /**
588 * Returns set of node identifiers.
589 *
590 * @param parent parent node
591 * @return set of node identifiers
592 */
593 public static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
594
595 List<YangAtomicPath> targets = new ArrayList<>();
596 YangNodeIdentifier nodeId;
597 List<YangAugment> augments = getListOfAugments(parent);
598 for (YangAugment augment : augments) {
599 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
600
601 if (validateNodeIdentifierInSet(nodeId, targets)) {
602 targets.add(augment.getTargetNode().get(0));
603 }
604 }
605 return targets;
606 }
607
608 /* Returns list of augments.*/
609 private static List<YangAugment> getListOfAugments(YangNode parent) {
610 List<YangAugment> augments = new ArrayList<>();
611 YangNode child = parent.getChild();
612 while (child != null) {
613 if (child instanceof YangAugment) {
614 augments.add((YangAugment) child);
615 }
616 child = child.getNextSibling();
617 }
618 return augments;
619 }
620
621 /*Validates the set for duplicate names of node identifiers.*/
622 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
623 boolean isPresent = true;
624 for (YangAtomicPath target : targets) {
625 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
626 if (target.getNodeIdentifier().getPrefix() != null) {
627 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
628 } else {
629 isPresent = nodeId.getPrefix() != null;
630 }
631 }
632 }
633 return isPresent;
634 }
635
636 /**
637 * Adds resolved augmented node imports to manager class.
638 *
639 * @param parent parent node
640 */
641 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
642 Map<YangAtomicPath, YangAugment> resolvedAugmentsForManager = getResolvedAugmentsForManager(parent);
643 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
644 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
645 .getTempJavaCodeFragmentFiles();
646 YangNode augmentedNode;
647 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
648 String curNodeName;
649 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
650 for (YangAtomicPath nodeId : targets) {
651 augmentedNode = resolvedAugmentsForManager.get(nodeId).getResolveNodeInPath().get(nodeId);
652 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
653 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
654 } else {
655 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
656 .getConflictResolver()));
657 }
658
659 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
660 parentInfo.getPluginConfig());
661 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
662 parentInfo.getJavaName(), parentInfo.getPackage());
663
664 }
665 }
666
667 /**
668 * Returns qualified type info of augmented node.
669 *
670 * @param augmentedNode augmented node
671 * @param curNodeName current node name
672 * @param pluginConfig plugin configurations
673 * @return qualified type info of augmented node
674 */
675 public static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
676 YangPluginConfig pluginConfig) {
677 JavaQualifiedTypeInfo javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
678 getCapitalCase(curNodeName));
679 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
680 javaQualifiedTypeInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode,
681 pluginConfig));
682 }
683 return javaQualifiedTypeInfo;
684 }
685
686 /**
687 * Validates if augmented node is imported in parent node.
688 *
689 * @param javaQualifiedTypeInfo qualified type info
690 * @param importData import data
691 * @return true if present in imports
692 */
693 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfo javaQualifiedTypeInfo,
694 JavaImportData importData) {
695 for (JavaQualifiedTypeInfo curImportInfo : importData.getImportSet()) {
696 if (curImportInfo.getClassInfo()
697 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
698 return curImportInfo.getPkgInfo()
699 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
700 }
701 }
702 return true;
703 }
704
705 /**
706 * Return augmented class name for data methods in manager and service.
707 *
708 * @param augmentedNode augmented node
709 * @param parent parent node
710 * @return augmented class name for data methods in manager and service
711 */
712 public static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
713 String curNodeName;
714 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
715 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
716 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
717 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
718 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
719 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
720 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
721 } else {
722 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
723 .getConflictResolver()));
724 }
725
726 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
727 getCapitalCase(curNodeName),
728 parentInfo.getPluginConfig());
729 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
730 tempJavaServiceFragmentFiles.getJavaImportData())) {
731 return javaQualifiedTypeInfo.getClassInfo();
732 } else {
733 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
734 }
735 }
736
737 /**
738 * Returns parent node name for data methods in manager and service.
739 *
740 * @param parent parent node
741 * @param pluginConfig plugin configurations
742 * @return parent node name for data methods in manager and service
743 */
744 public static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
745 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
746 if (parentInfo.getJavaName() != null) {
747 return getCapitalCase(parentInfo.getJavaName());
748 }
749 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
750 .getConflictResolver()));
751
752 }
753
Bharat saraswale2d51d62016-03-23 19:40:35 +0530754}