blob: 2c00cc23fbb8abab8342b854cc2d3eac27a24daf [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;
Bharat saraswalb551aae2016-07-14 15:18:20 +053023import org.onosproject.yangutils.datamodel.YangAtomicPath;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053024import org.onosproject.yangutils.datamodel.YangAugment;
janani bf9819ff2016-08-03 16:40:01 +053025import org.onosproject.yangutils.datamodel.YangLeafRef;
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;
janani bf9819ff2016-08-03 16:40:01 +053028import org.onosproject.yangutils.datamodel.YangType;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053029import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
30import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
janani bf9819ff2016-08-03 16:40:01 +053031import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053032import org.onosproject.yangutils.translator.exception.TranslatorException;
Bharat saraswalb551aae2016-07-14 15:18:20 +053033import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Bharat saraswalb551aae2016-07-14 15:18:20 +053035import org.onosproject.yangutils.translator.tojava.JavaImportData;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053036import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053037import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
Bharat saraswalb551aae2016-07-14 15:18:20 +053038import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
Bharat saraswalc0e04842016-05-12 13:16:57 +053039import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053040import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053041import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053042import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
43import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswale2d51d62016-03-23 19:40:35 +053044import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
45import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
46
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Bharat saraswalc0e04842016-05-12 13:16:57 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053071import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053072import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053081import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053082import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getAugmentedNodesPackage;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +053083import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +053084import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
janani bf9819ff2016-08-03 16:40:01 +053085import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
Bharat saraswale2d51d62016-03-23 19:40:35 +053086import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053087import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053088import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
janani bdd1314f2016-05-19 17:39:50 +053089import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
91import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
92import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswale2d51d62016-03-23 19:40:35 +053093import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
94import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
Bharat saraswald72411a2016-04-19 01:00:16 +053095import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053096import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
97import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
Bharat saraswal33dfa012016-05-17 19:59:16 +053098import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
Bharat saraswale2d51d62016-03-23 19:40:35 +053099import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.IMPL_CLASS;
100import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530101import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OPERATION_CLASS;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530102import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530103import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_MANAGER;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530104import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530105import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
106import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
107import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530108import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530110
111/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530112 * Represents utilities for java file generator.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530113 */
114public final class JavaFileGeneratorUtils {
115
116 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530117 * Creates an instance of java file generator util.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530118 */
119 private JavaFileGeneratorUtils() {
120 }
121
122 /**
123 * Returns a file object for generated file.
124 *
Bharat saraswale707f032016-07-14 23:33:55 +0530125 * @param filePath file package path
126 * @param fileName file name
127 * @param extension file extension
128 * @param baseCodePath cached file handle
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129 * @return file object
130 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530131 public static File getFileObject(String filePath, String fileName, String extension, String baseCodePath) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530132
Bharat saraswald50c6382016-07-14 21:57:13 +0530133 return new File(baseCodePath + filePath + SLASH + fileName + extension);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530134 }
135
136 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530137 * Returns data stored in temporary files.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530138 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530139 * @param generatedTempFiles temporary file types
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530140 * @param tempJavaFragmentFiles temp java fragment files
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530141 * @param absolutePath absolute path
Bharat saraswale2d51d62016-03-23 19:40:35 +0530142 * @return data stored in temporary files
143 * @throws IOException when failed to get the data from temporary file handle
144 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530145 static String getDataFromTempFileHandle(int generatedTempFiles,
146 TempJavaFragmentFiles tempJavaFragmentFiles, String absolutePath)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530147 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530148
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530149 TempJavaTypeFragmentFiles typeFragmentFiles = null;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530150
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530151 if (tempJavaFragmentFiles instanceof TempJavaTypeFragmentFiles) {
152 typeFragmentFiles = (TempJavaTypeFragmentFiles) tempJavaFragmentFiles;
153 }
154
155 TempJavaBeanFragmentFiles beanFragmentFiles = null;
156
157 if (tempJavaFragmentFiles instanceof TempJavaBeanFragmentFiles) {
158 beanFragmentFiles = (TempJavaBeanFragmentFiles) tempJavaFragmentFiles;
159 }
160
161 TempJavaServiceFragmentFiles serviceFragmentFiles = null;
162 if (tempJavaFragmentFiles instanceof TempJavaServiceFragmentFiles) {
163 serviceFragmentFiles = (TempJavaServiceFragmentFiles) tempJavaFragmentFiles;
164 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530165
Bharat saraswald50c6382016-07-14 21:57:13 +0530166 TempJavaEventFragmentFiles eventFragmentFiles = null;
167 if (tempJavaFragmentFiles instanceof TempJavaEventFragmentFiles) {
168 eventFragmentFiles = (TempJavaEventFragmentFiles) tempJavaFragmentFiles;
169 }
170
Bharat saraswalc0e04842016-05-12 13:16:57 +0530171 if ((generatedTempFiles & ATTRIBUTES_MASK) != 0) {
172 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530173 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getAttributesTempFileHandle(),
174 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530175 } else if ((generatedTempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530176 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530177 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterInterfaceTempFileHandle(),
178 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530179 } else if ((generatedTempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530180 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530181 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterInterfaceTempFileHandle(),
182 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530183 } else if ((generatedTempFiles & GETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530184 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530185 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getGetterImplTempFileHandle(),
186 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530187 } else if ((generatedTempFiles & SETTER_FOR_CLASS_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530188 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530189 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getSetterImplTempFileHandle(),
190 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530191 } else if ((generatedTempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530192 if (beanFragmentFiles == null) {
193 throw new TranslatorException("Required constructor info is missing.");
194 }
195 return beanFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530196 .getTemporaryDataFromFileHandle(beanFragmentFiles.getConstructorImplTempFileHandle(),
197 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530198 } else if ((generatedTempFiles & HASH_CODE_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530199 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530200 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getHashCodeImplTempFileHandle(),
201 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530202 } else if ((generatedTempFiles & EQUALS_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530203 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530204 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getEqualsImplTempFileHandle(),
205 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530206 } else if ((generatedTempFiles & TO_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530207 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530208 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getToStringImplTempFileHandle(),
209 absolutePath);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530210 } else if ((generatedTempFiles & OF_STRING_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530211 if (typeFragmentFiles == null) {
212 throw new TranslatorException("Required of string implementation info is missing.");
213 }
214 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530215 .getTemporaryDataFromFileHandle(typeFragmentFiles.getOfStringImplTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530216 } else if ((generatedTempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
217 if (typeFragmentFiles == null) {
218 throw new TranslatorException("Required constructor implementation info is missing.");
219 }
220 return typeFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530221 .getTemporaryDataFromFileHandle(typeFragmentFiles.getConstructorForTypeTempFileHandle(),
222 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530223 } else if ((generatedTempFiles & FROM_STRING_IMPL_MASK) != 0) {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530224 return tempJavaFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530225 .getTemporaryDataFromFileHandle(tempJavaFragmentFiles.getFromStringImplTempFileHandle(),
226 absolutePath);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530227 } else if ((generatedTempFiles & ENUM_IMPL_MASK) != 0) {
228 if (!(tempJavaFragmentFiles instanceof TempJavaEnumerationFragmentFiles)) {
229 throw new TranslatorException("Required enum info is missing.");
230 }
231 TempJavaEnumerationFragmentFiles enumFragmentFiles =
232 (TempJavaEnumerationFragmentFiles) tempJavaFragmentFiles;
233 return enumFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530234 .getTemporaryDataFromFileHandle(enumFragmentFiles.getEnumClassTempFileHandle(), absolutePath);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530235 } else if ((generatedTempFiles & RPC_INTERFACE_MASK) != 0) {
236 if (serviceFragmentFiles == null) {
237 throw new TranslatorException("Required rpc interface info is missing.");
238 }
239 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530240 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcInterfaceTempFileHandle(),
241 absolutePath);
Gaurav Agrawal56527662016-04-20 15:49:17 +0530242 } else if ((generatedTempFiles & RPC_IMPL_MASK) != 0) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530243 if (serviceFragmentFiles == null) {
244 throw new TranslatorException("Required rpc implementation info is missing.");
245 }
246 return serviceFragmentFiles
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530247 .getTemporaryDataFromFileHandle(serviceFragmentFiles.getRpcImplTempFileHandle(),
248 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530249 } else if ((generatedTempFiles & EVENT_ENUM_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530250 if (eventFragmentFiles == null) {
251 throw new TranslatorException("Required event enum implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530252 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530253 return eventFragmentFiles
254 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventEnumTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530255 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530256 } else if ((generatedTempFiles & EVENT_METHOD_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530257 if (eventFragmentFiles == null) {
258 throw new TranslatorException("Required event method implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530259 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530260 return eventFragmentFiles
261 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventMethodTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530262 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530263 } else if ((generatedTempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530264 if (eventFragmentFiles == null) {
265 throw new TranslatorException("Required event subject getter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530266 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530267 return eventFragmentFiles
268 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectGetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530269 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530270 } else if ((generatedTempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530271 if (eventFragmentFiles == null) {
272 throw new TranslatorException("Required event subject setter implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530273 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530274 return eventFragmentFiles
275 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectSetterTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530276 absolutePath);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530277 } else if ((generatedTempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530278 if (eventFragmentFiles == null) {
279 throw new TranslatorException("Required event subject attribute implementation info is missing.");
Bharat saraswal33dfa012016-05-17 19:59:16 +0530280 }
Bharat saraswald50c6382016-07-14 21:57:13 +0530281 return eventFragmentFiles
282 .getTemporaryDataFromFileHandle(eventFragmentFiles.getEventSubjectAttributeTempFileHandle(),
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530283 absolutePath);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530284 }
285 return null;
286 }
287
288 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530289 * Initiates generation of file based on generated file type.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530290 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530291 * @param file generated file
292 * @param className generated file class name
293 * @param genType generated file type
294 * @param imports imports for the file
295 * @param pkg generated file package
Bharat saraswal33dfa012016-05-17 19:59:16 +0530296 * @param pluginConfig plugin configurations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530297 * @throws IOException when fails to generate a file
298 */
sangyun-han19f8d352016-05-30 19:33:27 +0900299 public static void initiateJavaFileGeneration(File file, String className, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530300 String pkg, YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530301 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530302
Bharat saraswald50c6382016-07-14 21:57:13 +0530303 boolean isFileCreated;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530304 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530305 isFileCreated = file.createNewFile();
306 if (!isFileCreated) {
307 throw new IOException("Failed to create " + file.getName() + " class file.");
308 }
sangyun-han19f8d352016-05-30 19:33:27 +0900309 appendContents(file, className, genType, imports, pkg, pluginConfig);
Bharat saraswale2d51d62016-03-23 19:40:35 +0530310 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530311 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswale2d51d62016-03-23 19:40:35 +0530312 }
313 }
314
315 /**
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530316 * Initiates generation of file based on generated file type.
317 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530318 * @param file generated file
319 * @param genType generated file type
320 * @param imports imports for the file
321 * @param curNode current YANG node
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530322 * @param className class name
323 * @throws IOException when fails to generate a file
324 */
sangyun-han19f8d352016-05-30 19:33:27 +0900325 public static void initiateJavaFileGeneration(File file, int genType, List<String> imports,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530326 YangNode curNode, String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530327 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530328
Bharat saraswald50c6382016-07-14 21:57:13 +0530329 boolean isFileCreated;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530330 try {
Bharat saraswald50c6382016-07-14 21:57:13 +0530331 isFileCreated = file.createNewFile();
332 if (!isFileCreated) {
333 throw new IOException("Failed to create " + file.getName() + " class file.");
334 }
sangyun-han19f8d352016-05-30 19:33:27 +0900335 appendContents(file, genType, imports, curNode, className);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530336 } catch (IOException e) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530337 throw new IOException("Failed to append contents in " + file.getName() + " class file.");
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530338 }
339 }
340
341 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530342 * Appends all the contents into a generated java file.
343 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530344 * @param file generated file
345 * @param genType generated file type
sangyun-han19f8d352016-05-30 19:33:27 +0900346 * @param importsList list of java imports
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530347 * @param curNode current YANG node
348 * @param className class name
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530349 * @throws IOException when fails to do IO operations
Bharat saraswale2d51d62016-03-23 19:40:35 +0530350 */
sangyun-han19f8d352016-05-30 19:33:27 +0900351 private static void appendContents(File file, int genType, List<String> importsList, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530352 String className)
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530353 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530354
355 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
356
Bharat saraswal33dfa012016-05-17 19:59:16 +0530357 String name = javaFileInfo.getJavaName();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530358 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530359
Bharat saraswald50c6382016-07-14 21:57:13 +0530360 String pkgString;
sangyun-han19f8d352016-05-30 19:33:27 +0900361 if (genType == GENERATE_EVENT_CLASS
362 || genType == GENERATE_EVENT_LISTENER_INTERFACE
363 || genType == GENERATE_EVENT_SUBJECT_CLASS) {
janani bdd1314f2016-05-19 17:39:50 +0530364 pkgString = parsePackageString((path + PERIOD + name).toLowerCase(), importsList);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530365 } else {
366 pkgString = parsePackageString(path, importsList);
367 }
sangyun-han19f8d352016-05-30 19:33:27 +0900368 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530369 case INTERFACE_MASK:
Bharat saraswald50c6382016-07-14 21:57:13 +0530370 appendHeaderContents(file, pkgString, importsList);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530371 write(file, genType, INTERFACE, curNode, className);
372 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530373 case IMPL_CLASS_MASK:
374 appendHeaderContents(file, pkgString, importsList);
375 write(file, genType, IMPL_CLASS, curNode, className);
376 break;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530377 case OPERATION_CLASS_MASK:
378 appendHeaderContents(file, pkgString, importsList);
379 write(file, genType, OPERATION_CLASS, curNode, className);
380 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530381 case BUILDER_CLASS_MASK:
382 write(file, genType, BUILDER_CLASS, curNode, className);
383 break;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530384 case OPERATION_BUILDER_CLASS_MASK:
385 write(file, genType, BUILDER_CLASS, curNode, className);
386 break;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530387 case BUILDER_INTERFACE_MASK:
388 write(file, genType, BUILDER_INTERFACE, curNode, className);
389 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530390 case GENERATE_SERVICE_AND_MANAGER:
391 appendHeaderContents(file, pkgString, importsList);
392 write(file, genType, RPC_INTERFACE, curNode, className);
393 break;
394 case GENERATE_EVENT_CLASS:
395 appendHeaderContents(file, pkgString, importsList);
396 write(file, genType, EVENT, curNode, className);
397 break;
398 case GENERATE_EVENT_LISTENER_INTERFACE:
399 appendHeaderContents(file, pkgString, importsList);
400 write(file, genType, EVENT_LISTENER, curNode, className);
401 break;
402 case GENERATE_EVENT_SUBJECT_CLASS:
403 appendHeaderContents(file, pkgString, importsList);
404 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
405 break;
Shankara-Huaweidf7b9ca2016-07-14 11:35:34 +0530406 case GENERATE_IDENTITY_CLASS:
407 appendHeaderContents(file, pkgString, importsList);
408 write(file, genType, EVENT_SUBJECT_CLASS, curNode, className);
409 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
410 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530411 default:
412 break;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530413 }
414 }
415
416 /**
417 * Appends all the contents into a generated java file.
418 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530419 * @param file generated file
420 * @param fileName generated file name
421 * @param genType generated file type
422 * @param importsList list of java imports
423 * @param pkg generated file package
sangyun-han19f8d352016-05-30 19:33:27 +0900424 * @param pluginConfig plugin configurations
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530425 * @throws IOException when fails to append contents
426 */
sangyun-han19f8d352016-05-30 19:33:27 +0900427 private static void appendContents(File file, String fileName, int genType, List<String> importsList, String pkg,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530428 YangPluginConfig pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530429 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530430
431 String pkgString = parsePackageString(pkg, importsList);
432
sangyun-han19f8d352016-05-30 19:33:27 +0900433 switch (genType) {
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530434 case GENERATE_TYPEDEF_CLASS:
435 appendHeaderContents(file, pkgString, importsList);
436 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
437 break;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530438 case GENERATE_UNION_CLASS:
439 appendHeaderContents(file, pkgString, importsList);
440 write(file, fileName, genType, IMPL_CLASS, pluginConfig);
441 break;
442 case GENERATE_ENUM_CLASS:
443 appendHeaderContents(file, pkgString, importsList);
444 write(file, fileName, genType, ENUM_CLASS, pluginConfig);
445 break;
446 default:
447 break;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530448 }
449 }
450
451 /**
452 * Removes base directory path from package and generates package string for file.
453 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530454 * @param javaPkg generated java package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530455 * @param importsList list of imports
456 * @return package string
457 */
458 private static String parsePackageString(String javaPkg, List<String> importsList) {
459
Bharat saraswal33dfa012016-05-17 19:59:16 +0530460 javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530461 if (importsList != null) {
462 if (!importsList.isEmpty()) {
463 return PACKAGE + SPACE + javaPkg + SEMI_COLAN + NEW_LINE;
464 } else {
465 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
466 }
467 } else {
468 return PACKAGE + SPACE + javaPkg + SEMI_COLAN;
469 }
470 }
471
472 /**
Bharat saraswald50c6382016-07-14 21:57:13 +0530473 * Appends other contents to interface, impl and typedef classes. for example : ONOS copyright, imports and
474 * package.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530475 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530476 * @param file generated file
477 * @param pkg generated package
Bharat saraswale2d51d62016-03-23 19:40:35 +0530478 * @param importsList list of imports
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530479 * @throws IOException when fails to append contents
Bharat saraswale2d51d62016-03-23 19:40:35 +0530480 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530481 private static void appendHeaderContents(File file, String pkg, List<String> importsList)
482 throws IOException {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530483
484 insertDataIntoJavaFile(file, CopyrightHeader.getCopyrightHeader());
485 insertDataIntoJavaFile(file, pkg);
486
487 /*
Bharat saraswald50c6382016-07-14 21:57:13 +0530488 * TODO: add the file header using comments for snippet of yang file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530489 * JavaCodeSnippetGen.getFileHeaderComment
490 */
491
492 if (importsList != null) {
493 insertDataIntoJavaFile(file, NEW_LINE);
494 for (String imports : importsList) {
495 insertDataIntoJavaFile(file, imports);
496 }
497 }
498 }
499
500 /**
Bharat saraswald9822e92016-04-05 15:13:44 +0530501 * Writes data to the specific generated file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530502 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530503 * @param file generated file
504 * @param genType generated file type
Bharat saraswale2d51d62016-03-23 19:40:35 +0530505 * @param javaDocType java doc type
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530506 * @param curNode current YANG node
507 * @param fileName file name
Bharat saraswale2d51d62016-03-23 19:40:35 +0530508 * @throws IOException when fails to write into a file
509 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530510 private static void write(File file, int genType, JavaDocType javaDocType, YangNode curNode, String fileName)
Bharat saraswale2d51d62016-03-23 19:40:35 +0530511 throws IOException {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530512
Bharat saraswal33dfa012016-05-17 19:59:16 +0530513 YangPluginConfig pluginConfig = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPluginConfig();
Bharat saraswalc0e04842016-05-12 13:16:57 +0530514 if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
janani bdd1314f2016-05-19 17:39:50 +0530515 if (!fileName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
516 insertDataIntoJavaFile(file, getJavaDoc(RPC_MANAGER, fileName, false, pluginConfig));
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530517 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addComponentString());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530518 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530519 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530520 }
521 } else {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530522 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalc0e04842016-05-12 13:16:57 +0530523 }
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530524 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName, curNode));
525 }
526
527 /**
528 * Writes data to the specific generated file.
529 *
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530530 * @param file generated file
531 * @param fileName file name
532 * @param genType generated file type
533 * @param javaDocType java doc type
sangyun-han19f8d352016-05-30 19:33:27 +0900534 * @param pluginConfig plugin configurations
sangyun-han38201bb2016-06-01 14:12:07 +0900535 * @throws IOException when fails to write into a file
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530536 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530537 private static void write(File file, String fileName, int genType, JavaDocType javaDocType,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530538 YangPluginConfig pluginConfig)
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530539 throws IOException {
Bharat saraswal33dfa012016-05-17 19:59:16 +0530540 insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false, pluginConfig));
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530541 insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530542 }
543
Bharat saraswalb551aae2016-07-14 15:18:20 +0530544 /**
Bharat saraswalb551aae2016-07-14 15:18:20 +0530545 * Returns set of node identifiers.
546 *
547 * @param parent parent node
548 * @return set of node identifiers
549 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530550 static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530551
552 List<YangAtomicPath> targets = new ArrayList<>();
553 YangNodeIdentifier nodeId;
554 List<YangAugment> augments = getListOfAugments(parent);
555 for (YangAugment augment : augments) {
556 nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
557
558 if (validateNodeIdentifierInSet(nodeId, targets)) {
559 targets.add(augment.getTargetNode().get(0));
560 }
561 }
562 return targets;
563 }
564
565 /* Returns list of augments.*/
566 private static List<YangAugment> getListOfAugments(YangNode parent) {
567 List<YangAugment> augments = new ArrayList<>();
568 YangNode child = parent.getChild();
569 while (child != null) {
570 if (child instanceof YangAugment) {
571 augments.add((YangAugment) child);
572 }
573 child = child.getNextSibling();
574 }
575 return augments;
576 }
577
578 /*Validates the set for duplicate names of node identifiers.*/
579 private static boolean validateNodeIdentifierInSet(YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
580 boolean isPresent = true;
581 for (YangAtomicPath target : targets) {
582 if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
583 if (target.getNodeIdentifier().getPrefix() != null) {
584 isPresent = !target.getNodeIdentifier().getPrefix().equals(nodeId.getPrefix());
585 } else {
586 isPresent = nodeId.getPrefix() != null;
587 }
588 }
589 }
590 return isPresent;
591 }
592
593 /**
594 * Adds resolved augmented node imports to manager class.
595 *
596 * @param parent parent node
597 */
598 public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530599 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
600 TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = ((JavaCodeGeneratorInfo) parent)
601 .getTempJavaCodeFragmentFiles();
602 YangNode augmentedNode;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530603 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530604 String curNodeName;
605 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
606 for (YangAtomicPath nodeId : targets) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530607 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530608 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
609 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
610 } else {
611 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), parentInfo.getPluginConfig()
612 .getConflictResolver()));
613 }
614
615 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode, getCapitalCase(curNodeName),
616 parentInfo.getPluginConfig());
617 tempJavaCodeFragmentFiles.getServiceTempFiles().getJavaImportData().addImportInfo(javaQualifiedTypeInfo,
618 parentInfo.getJavaName(), parentInfo.getPackage());
619
620 }
621 }
622
623 /**
624 * Returns qualified type info of augmented node.
625 *
626 * @param augmentedNode augmented node
627 * @param curNodeName current node name
628 * @param pluginConfig plugin configurations
629 * @return qualified type info of augmented node
630 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530631 private static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfAugmentedNode(YangNode augmentedNode,
632 String curNodeName,
633 YangPluginConfig pluginConfig) {
634 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(augmentedNode,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530635 getCapitalCase(curNodeName));
636 if (javaQualifiedTypeInfo.getPkgInfo() == null) {
637 javaQualifiedTypeInfo.setPkgInfo(getAugmentedNodesPackage(augmentedNode,
638 pluginConfig));
639 }
640 return javaQualifiedTypeInfo;
641 }
642
643 /**
644 * Validates if augmented node is imported in parent node.
645 *
646 * @param javaQualifiedTypeInfo qualified type info
647 * @param importData import data
648 * @return true if present in imports
649 */
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530650 private static boolean validateQualifiedInfoOfAugmentedNode(JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
Bharat saraswalb551aae2016-07-14 15:18:20 +0530651 JavaImportData importData) {
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530652 for (JavaQualifiedTypeInfoTranslator curImportInfo : importData.getImportSet()) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530653 if (curImportInfo.getClassInfo()
654 .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
655 return curImportInfo.getPkgInfo()
656 .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
657 }
658 }
659 return true;
660 }
661
662 /**
663 * Return augmented class name for data methods in manager and service.
664 *
665 * @param augmentedNode augmented node
666 * @param parent parent node
667 * @return augmented class name for data methods in manager and service
668 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530669 static String getAugmentedClassNameForDataMethods(YangNode augmentedNode, YangNode parent) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530670 String curNodeName;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530671 JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530672 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
673 YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
674 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) parent)
675 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
676 if (((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName() != null) {
677 curNodeName = ((JavaFileInfoContainer) augmentedNode).getJavaFileInfo().getJavaName();
678 } else {
679 curNodeName = getCapitalCase(getCamelCase(augmentedNode.getName(), pluginConfig
680 .getConflictResolver()));
681 }
682
683 javaQualifiedTypeInfo = getQualifiedTypeInfoOfAugmentedNode(augmentedNode,
684 getCapitalCase(curNodeName),
685 parentInfo.getPluginConfig());
686 if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
687 tempJavaServiceFragmentFiles.getJavaImportData())) {
688 return javaQualifiedTypeInfo.getClassInfo();
689 } else {
690 return javaQualifiedTypeInfo.getPkgInfo() + PERIOD + javaQualifiedTypeInfo.getClassInfo();
691 }
692 }
693
694 /**
695 * Returns parent node name for data methods in manager and service.
696 *
697 * @param parent parent node
698 * @param pluginConfig plugin configurations
699 * @return parent node name for data methods in manager and service
700 */
Bharat saraswald50c6382016-07-14 21:57:13 +0530701 static String getParentNodeNameForDataMethods(YangNode parent, YangPluginConfig pluginConfig) {
Bharat saraswalb551aae2016-07-14 15:18:20 +0530702 JavaFileInfo parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
703 if (parentInfo.getJavaName() != null) {
704 return getCapitalCase(parentInfo.getJavaName());
705 }
706 return getCapitalCase(getCamelCase(parent.getName(), pluginConfig
707 .getConflictResolver()));
708
709 }
710
janani bf9819ff2016-08-03 16:40:01 +0530711 /**
712 * Checks if the type name is leafref and returns the effective type name.
713 *
714 * @param attributeName name of the current type
715 * @param attributeType effective type
716 * @return name of the effective type
717 */
718 public static String isTypeNameLeafref(String attributeName, YangType<?> attributeType) {
719 if (attributeName.equalsIgnoreCase(LEAFREF)) {
720 return attributeType.getDataTypeName();
721 }
722 return attributeName;
723 }
724
725 /**
726 * Checks if the type is leafref and returns the effective type.
727 *
728 * @param attributeType current type
729 * @return effective type
730 */
731 public static YangType isTypeLeafref(YangType<?> attributeType) {
732 if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
733 YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
734 return leafRef.getEffectiveDataType();
735 }
736 return attributeType;
737 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530738}