blob: c5558ffd8d52237ec97f3f9e1557aa2dfdcf3092 [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;
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;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053082import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswale2d51d62016-03-23 19:40:35 +053083import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053084import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053085import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
janani bdd1314f2016-05-19 17:39:50 +053086import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
88import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
89import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
91import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053092import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
94import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
97import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Bharat saraswald50c6382016-07-14 21:57:13 +053098import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OPERATION_CLASS;
Gaurav Agrawal56527662016-04-20 15:49:17 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530102import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
103import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
104import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530105import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530106import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530107
108/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530109 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530110 */
111public final class JavaFileGeneratorUtils {
112
113 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530114 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530115 */
116 private JavaFileGeneratorUtils() {
117 }
118
119 /**
120 * Returns a file object for generated file.
121 *
Bharat saraswale707f032016-07-14 23:33:55 +0530122 * @param filePath file package path
123 * @param fileName file name
124 * @param extension file extension
125 * @param baseCodePath cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530126 * @return file object
127 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530128 public static File getFileObject(String filePath, String fileName, String extension, String baseCodePath) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129
Bharat saraswald50c6382016-07-14 21:57:13 +0530130 return new File(baseCodePath + filePath + SLASH + fileName + extension);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530131 }
132
133 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530134 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530135 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530136 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530137 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530138 * @param absolutePath absolute path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530139 * @return data stored in temporary files
140 * @throws IOException when failed to get the data from temporary file handle
141 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530142 static String getDataFromTempFileHandle(int generatedTempFiles,
143 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530144 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530145
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530146 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530147
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530148 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
149 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
150 }
151
152 TempJavaBeanFragmentFiles beanFragmentFiles = null;
153
154 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
155 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
156 }
157
158 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
159 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
160 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
161 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530162
Bharat saraswald50c6382016-07-14 21:57:13 +0530163 TempJavaEventFragmentFiles eventFragmentFiles = null;
164 if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
165 eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
166 }
167
Bharat saraswalc0e04842016-05-12 13:16:57 +0530168 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
169 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530170 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
171 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530172 } else if ((generatedTempFiles & GETTER_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.getGetterInterfaceTempFileHandle(),
175 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530176 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530177 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530178 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
179 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530180 } else if ((generatedTempFiles & GETTER_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.getGetterImplTempFileHandle(),
183 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530184 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530185 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530186 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
187 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530188 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530189 if (beanFragmentFiles == null) {
190 throw new TranslatorException("Required constructor info is missing.");
191 }
192 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530193 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
194 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530195 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530196 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530197 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
198 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530199 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530201 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
202 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530203 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530204 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530205 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
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) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530247 if (eventFragmentFiles == null) {
248 throw new TranslatorException("Required event enum implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530249 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530250 return eventFragmentFiles
251 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530252 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530253 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530254 if (eventFragmentFiles == null) {
255 throw new TranslatorException("Required event method implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530256 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530257 return eventFragmentFiles
258 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530259 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530260 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530261 if (eventFragmentFiles == null) {
262 throw new TranslatorException("Required event subject getter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530263 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530264 return eventFragmentFiles
265 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530266 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530267 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530268 if (eventFragmentFiles == null) {
269 throw new TranslatorException("Required event subject setter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530270 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530271 return eventFragmentFiles
272 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530273 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530274 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530275 if (eventFragmentFiles == null) {
276 throw new TranslatorException("Required event subject attribute implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530277 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530278 return eventFragmentFiles
279 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530280 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
Bharat saraswald50c6382016-07-14 21:57:13 +0530300 boolean isFileCreated;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530301 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530302 isFileCreated = file.createNewFile();
303 if (!isFileCreated) {
304 throw new IOException("Failed to create " + file.getName() + " class file.");
305 }
sangyun-han19f8d352016-05-30 19:33:27 +0900306 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530307 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530308 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswale2d51d62016-03-23 19:40:35 +0530309 }
310 }
311
312 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530313 * Initiates generation of file based on generated file type.
314 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530315 * @param file generated file
316 * @param genType generated file type
317 * @param imports imports for the file
318 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530319 * @param className class name
320 * @throws IOException when fails to generate a file
321 */
sangyun-han19f8d352016-05-30 19:33:27 +0900322 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530323 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530324 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530325
Bharat saraswald50c6382016-07-14 21:57:13 +0530326 boolean isFileCreated;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530327 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530328 isFileCreated = file.createNewFile();
329 if (!isFileCreated) {
330 throw new IOException("Failed to create " + file.getName() + " class file.");
331 }
sangyun-han19f8d352016-05-30 19:33:27 +0900332 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530333 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530334 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530335 }
336 }
337
338 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530339 * Appends all the contents into a generated java file.
340 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530341 * @param file generated file
342 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900343 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530344 * @param curNode current YANG node
345 * @param className class name
sangyun-han19f8d352016-05-30 19:33:27 +0900346 * @throws IOException
Bharat saraswale2d51d62016-03-23 19:40:35 +0530347 */
sangyun-han19f8d352016-05-30 19:33:27 +0900348 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530349 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530350 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530351
352 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
353
Bharat saraswal33dfa012016-05-17 19:59:16 +0530354 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530355 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530356
Bharat saraswald50c6382016-07-14 21:57:13 +0530357 String pkgString;
sangyun-han19f8d352016-05-30 19:33:27 +0900358 if (genType == GENERATE_EVENT_CLASS
359 || genType == GENERATE_EVENT_LISTENER_INTERFACE
360 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530361 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530362 } else {
363 pkgString = parsePackageString(path, importsList);
364 }
sangyun-han19f8d352016-05-30 19:33:27 +0900365 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530366 case INTERFACE_MASK:
Bharat saraswald50c6382016-07-14 21:57:13 +0530367 appendHeaderContents(file, pkgString, importsList);
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;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530374 case OPERATION_CLASS_MASK:
375 appendHeaderContents(file, pkgString, importsList);
376 write(file, genType, OPERATION_CLASS, curNode, className);
377 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530378 case BUILDER_CLASS_MASK:
379 write(file, genType, BUILDER_CLASS, curNode, className);
380 break;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530381 case OPERATION_BUILDER_CLASS_MASK:
382 write(file, genType, BUILDER_CLASS, curNode, className);
383 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530384 case BUILDER_INTERFACE_MASK:
385 write(file, genType, BUILDER_INTERFACE, curNode, className);
386 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530387 case GENERATE_SERVICE_AND_MANAGER:
388 appendHeaderContents(file, pkgString, importsList);
389 write(file, genType, RPC_INTERFACE, curNode, className);
390 break;
391 case GENERATE_EVENT_CLASS:
392 appendHeaderContents(file, pkgString, importsList);
393 write(file, genType, EVENT, curNode, className);
394 break;
395 case GENERATE_EVENT_LISTENER_INTERFACE:
396 appendHeaderContents(file, pkgString, importsList);
397 write(file, genType, EVENT_LISTENER, curNode, className);
398 break;
399 case GENERATE_EVENT_SUBJECT_CLASS:
400 appendHeaderContents(file, pkgString, importsList);
401 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
402 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530403 case GENERATE_IDENTITY_CLASS:
404 appendHeaderContents(file, pkgString, importsList);
405 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
406 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
407 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530408 default:
409 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530410 }
411 }
412
413 /**
414 * Appends all the contents into a generated java file.
415 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530416 * @param file generated file
417 * @param fileName generated file name
418 * @param genType generated file type
419 * @param importsList list of java imports
420 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900421 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530422 * @throws IOException when fails to append contents
423 */
sangyun-han19f8d352016-05-30 19:33:27 +0900424 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530425 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530426 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530427
428 String pkgString = parsePackageString(pkg, importsList);
429
sangyun-han19f8d352016-05-30 19:33:27 +0900430 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530431 case GENERATE_TYPEDEF_CLASS:
432 appendHeaderContents(file, pkgString, importsList);
433 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
434 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530435 case GENERATE_UNION_CLASS:
436 appendHeaderContents(file, pkgString, importsList);
437 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
438 break;
439 case GENERATE_ENUM_CLASS:
440 appendHeaderContents(file, pkgString, importsList);
441 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
442 break;
443 default:
444 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530445 }
446 }
447
448 /**
449 * Removes base directory path from package and generates package string for file.
450 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530451 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530452 * @param importsList list of imports
453 * @return package string
454 */
455 private static String parsePackageString(String javaPkg, List<String> importsList) {
456
Bharat saraswal33dfa012016-05-17 19:59:16 +0530457 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530458 if (importsList != null) {
459 if (!importsList.isEmpty()) {
460 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
461 } else {
462 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
463 }
464 } else {
465 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
466 }
467 }
468
469 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530470 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
471 * package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530472 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530473 * @param file generated file
474 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530475 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530476 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530477 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530478 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
479 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530480
481 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
482 insertDataIntoJavaFile(file, pkg);
483
484 /*
Bharat saraswald50c6382016-07-14 21:57:13 +0530485 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530486 * JavaCodeSnippetGen.getFileHeaderComment
487 */
488
489 if (importsList != null) {
490 insertDataIntoJavaFile(file, NEW_LINE);
491 for (String imports : importsList) {
492 insertDataIntoJavaFile(file, imports);
493 }
494 }
495 }
496
497 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530498 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530499 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530500 * @param file generated file
501 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530502 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530503 * @param curNode current YANG node
504 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530505 * @throws IOException when fails to write into a file
506 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530507 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530508 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530509
Bharat saraswal33dfa012016-05-17 19:59:16 +0530510 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530511 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530512 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
513 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530514 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530515 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530516 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530517 }
518 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530519 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530520 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530521 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
522 }
523
524 /**
525 * Writes data to the specific generated file.
526 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530527 * @param file generated file
528 * @param fileName file name
529 * @param genType generated file type
530 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900531 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900532 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530533 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530534 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530535 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530536 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530537 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530538 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530539 }
540
Bharat saraswalb551aae2016-07-14 15:18:20 +0530541 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530542 * Returns set of node identifiers.
543 *
544 * @param parent parent node
545 * @return set of node identifiers
546 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530547 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530548
549 List<YangAtomicPath> targets = new ArrayList<>();
550 YangNodeIdentifier nodeId;
551 List<YangAugment> augments = getListOfAugments(parent);
552 for (YangAugment augment : augments) {
553 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
554
555 if (validateNodeIdentifierInSet(nodeId, targets)) {
556 targets.add(augment.getTargetNode().get(0));
557 }
558 }
559 return targets;
560 }
561
562 /* Returns list of augments.*/
563 private static List<YangAugment> getListOfAugments(YangNode parent) {
564 List<YangAugment> augments = new ArrayList<>();
565 YangNode child = parent.getChild();
566 while (child != null) {
567 if (child instanceof YangAugment) {
568 augments.add((YangAugment) child);
569 }
570 child = child.getNextSibling();
571 }
572 return augments;
573 }
574
575 /*Validates the set for duplicate names of node identifiers.*/
576 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
577 boolean isPresent = true;
578 for (YangAtomicPath target : targets) {
579 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
580 if (target.getNodeIdentifier().getPrefix() != null) {
581 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
582 } else {
583 isPresent = nodeId.getPrefix() != null;
584 }
585 }
586 }
587 return isPresent;
588 }
589
590 /**
591 * Adds resolved augmented node imports to manager class.
592 *
593 * @param parent parent node
594 */
595 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530596 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
597 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
598 .getTempJavaCodeFragmentFiles();
599 YangNode augmentedNode;
600 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
601 String curNodeName;
602 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
603 for (YangAtomicPath nodeId : targets) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530604 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530605 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
606 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
607 } else {
608 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
609 .getConflictResolver()));
610 }
611
612 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
613 parentInfo.getPluginConfig());
614 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
615 parentInfo.getJavaName(), parentInfo.getPackage());
616
617 }
618 }
619
620 /**
621 * Returns qualified type info of augmented node.
622 *
623 * @param augmentedNode augmented node
624 * @param curNodeName current node name
625 * @param pluginConfig plugin configurations
626 * @return qualified type info of augmented node
627 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530628 private static JavaQualifiedTypeInfo getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode, String curNodeName,
629 YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530630 JavaQualifiedTypeInfo javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
631 getCapitalCase(curNodeName));
632 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
633 javaQualifiedTypeInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode,
634 pluginConfig));
635 }
636 return javaQualifiedTypeInfo;
637 }
638
639 /**
640 * Validates if augmented node is imported in parent node.
641 *
642 * @param javaQualifiedTypeInfo qualified type info
643 * @param importData import data
644 * @return true if present in imports
645 */
646 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfo javaQualifiedTypeInfo,
647 JavaImportData importData) {
648 for (JavaQualifiedTypeInfo curImportInfo : importData.getImportSet()) {
649 if (curImportInfo.getClassInfo()
650 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
651 return curImportInfo.getPkgInfo()
652 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
653 }
654 }
655 return true;
656 }
657
658 /**
659 * Return augmented class name for data methods in manager and service.
660 *
661 * @param augmentedNode augmented node
662 * @param parent parent node
663 * @return augmented class name for data methods in manager and service
664 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530665 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530666 String curNodeName;
667 JavaQualifiedTypeInfo javaQualifiedTypeInfo;
668 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
669 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
670 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
671 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
672 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
673 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
674 } else {
675 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
676 .getConflictResolver()));
677 }
678
679 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
680 getCapitalCase(curNodeName),
681 parentInfo.getPluginConfig());
682 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
683 tempJavaServiceFragmentFiles.getJavaImportData())) {
684 return javaQualifiedTypeInfo.getClassInfo();
685 } else {
686 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
687 }
688 }
689
690 /**
691 * Returns parent node name for data methods in manager and service.
692 *
693 * @param parent parent node
694 * @param pluginConfig plugin configurations
695 * @return parent node name for data methods in manager and service
696 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530697 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530698 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
699 if (parentInfo.getJavaName() != null) {
700 return getCapitalCase(parentInfo.getJavaName());
701 }
702 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
703 .getConflictResolver()));
704
705 }
706
Bharat saraswale2d51d62016-03-23 19:40:35 +0530707}