blob: aba64549168092047fab932e1ea1e5ac37a8c872 [file] [log] [blame]
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
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 */
16package org.onosproject.yangutils.translator.tojava;
17
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053018import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Bharat saraswale50edca2016-08-05 01:58:25 +053019import org.onosproject.yangutils.datamodel.YangAugment;
Bharat saraswalaf413b82016-07-14 15:18:20 +053020import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053021import org.onosproject.yangutils.datamodel.YangCase;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053022import org.onosproject.yangutils.datamodel.YangChoice;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053023import org.onosproject.yangutils.datamodel.YangLeaf;
24import org.onosproject.yangutils.datamodel.YangLeafList;
25import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vidyashree Ramab3670472016-08-06 15:49:56 +053026import org.onosproject.yangutils.datamodel.YangList;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053027import org.onosproject.yangutils.datamodel.YangNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053028import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053029import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053030import org.onosproject.yangutils.translator.exception.TranslatorException;
31import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
Shankara-Huaweib7564772016-08-02 18:13:13 +053032import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053033import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053034import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053035
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053036import java.io.File;
37import java.io.IOException;
38import java.util.List;
39
Bharat saraswalc2d3be12016-06-16 00:29:12 +053040import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053043import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
Bharat saraswalaf413b82016-07-14 15:18:20 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
47import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
65import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053066import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
67import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053068import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Bharat saraswal8beac342016-08-04 02:00:03 +053069import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
70import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053071import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaClassDefClose;
Bharat saraswalaf413b82016-07-14 15:18:20 +053072import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.sortImports;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053073import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
74import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Bharat saraswal8beac342016-08-04 02:00:03 +053075import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053076import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053077import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswald14cbe82016-07-14 13:26:18 +053078import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Bharat saraswal8beac342016-08-04 02:00:03 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
83import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal250a7472016-05-12 13:16:57 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
86import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
87import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053088import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
91import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053092import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053093import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
94import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
95import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
96import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
97import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
98import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
99import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
100import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
101import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswal8beac342016-08-04 02:00:03 +0530102import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_IMPORT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530103import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530104import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530105import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
106import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530107import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530108import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION_IMPORT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530109import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530110import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
111import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_CLASS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530112import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530113import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530114import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
115import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530116import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530117import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530118import static org.onosproject.yangutils.utils.UtilConstants.YANG;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530119import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530120import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
Bharat saraswal8beac342016-08-04 02:00:03 +0530121import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530122import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswale304c252016-08-16 20:56:20 +0530123import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530124import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530125import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530126import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
127import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
128import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530129import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
130import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530131import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530132
133/**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530134 * Represents implementation of java code fragments temporary implementations.
135 * Manages the common temp file required for Java file(s) generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530136 */
137public class TempJavaFragmentFiles {
Bharat saraswal250a7472016-05-12 13:16:57 +0530138
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530139 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530140 * File type extension for java classes.
141 */
142 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswal250a7472016-05-12 13:16:57 +0530143
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530144 /**
145 * File type extension for temporary classes.
146 */
147 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswal250a7472016-05-12 13:16:57 +0530148
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530149 /**
150 * Folder suffix for temporary files folder.
151 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530152 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530153
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530154 /**
155 * File name for getter method.
156 */
157 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530158
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530159 /**
160 * File name for setter method.
161 */
162 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530163
164 /**
165 * File name for getter method implementation.
166 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530167 private static final String GETTER_METHOD_IMPL_FILE_NAME =
168 "GetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530169
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530170 /**
171 * File name for setter method implementation.
172 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530173 private static final String SETTER_METHOD_IMPL_FILE_NAME =
174 "SetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530175
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530176 /**
177 * File name for attributes.
178 */
179 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswal250a7472016-05-12 13:16:57 +0530180
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530181 /**
182 * File name for to string method.
183 */
184 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswal250a7472016-05-12 13:16:57 +0530185
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530186 /**
187 * File name for hash code method.
188 */
189 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswal250a7472016-05-12 13:16:57 +0530190
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530191 /**
192 * File name for equals method.
193 */
194 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530195
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530196 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530197 * File name for from string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530198 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530199 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530200
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530201 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530202 * File name for from add to list interface method.
203 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530204 private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
205 "addToList";
Bharat saraswal8beac342016-08-04 02:00:03 +0530206
207 /**
208 * File name for from add to list impl method.
209 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
211 "addToListImpl";
Bharat saraswal8beac342016-08-04 02:00:03 +0530212
213 /**
214 * File name for from leaf identifier attributes.
215 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530216 private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
217 "leafIdentifierAtr";
Bharat saraswal8beac342016-08-04 02:00:03 +0530218
219 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530220 * File name for is filter content leaf match.
221 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
223 "isFilterContentMatchLeafMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530224
225 /**
226 * File name for is filter content leaf-list match.
227 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530228 private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
229 "isFilterContentMatchLeafListMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530230
231 /**
232 * File name for is filter content node match.
233 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530234 private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
235 "isFilterContentMatchNodeMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530236
237 /**
238 * File name for edit content file.
239 */
240 private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
241
242 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530243 * File name for interface java file name suffix.
244 */
245 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswal250a7472016-05-12 13:16:57 +0530246
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530247 /**
248 * File name for builder interface file name suffix.
249 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530250 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
251 BUILDER + INTERFACE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530252
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530253 /**
254 * File name for builder class file name suffix.
255 */
256 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530257
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530258 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530259 * Information about the java files being generated.
260 */
Bharat saraswale50edca2016-08-05 01:58:25 +0530261 private JavaFileInfoTranslator javaFileInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530262
263 /**
264 * Imported class info.
265 */
266 private JavaImportData javaImportData;
267
268 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530269 * The variable which guides the types of temporary files generated using
270 * the temporary generated file types mask.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530271 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530272 private int tempFilesFlagSet;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530273
274 /**
275 * Absolute path where the target java file needs to be generated.
276 */
277 private String absoluteDirPath;
278
279 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530280 * Contains all the interface(s)/class name which will be extended by
281 * generated files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530282 */
283 private JavaExtendsListHolder javaExtendsListHolder;
284
Bharat saraswald14cbe82016-07-14 13:26:18 +0530285 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530286 * Java file handle for interface file.
287 */
288 private File interfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530289
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530290 /**
291 * Java file handle for builder interface file.
292 */
293 private File builderInterfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530294
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530295 /**
296 * Java file handle for builder class file.
297 */
298 private File builderClassJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530299
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530300 /**
301 * Java file handle for impl class file.
302 */
303 private File implClassJavaFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530304
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530305 /**
306 * Temporary file handle for attribute.
307 */
308 private File attributesTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530309
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530310 /**
311 * Temporary file handle for getter of interface.
312 */
313 private File getterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530314
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530315 /**
316 * Temporary file handle for setter of interface.
317 */
318 private File setterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530319
320 /**
321 * Temporary file handle for getter of class.
322 */
323 private File getterImplTempFileHandle;
324
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530325 /**
326 * Temporary file handle for setter of class.
327 */
328 private File setterImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530329
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530330 /**
331 * Temporary file handle for hash code method of class.
332 */
333 private File hashCodeImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530334
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530335 /**
336 * Temporary file handle for equals method of class.
337 */
338 private File equalsImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530339
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530340 /**
341 * Temporary file handle for to string method of class.
342 */
343 private File toStringImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530344
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530345 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530346 * Temporary file handle for from string method of class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530347 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530348 private File fromStringImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530349
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530350 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530351 * Temporary file handle for add to list interface method of class.
352 */
353 private File addToListInterfaceTempFileHandle;
354
355 /**
356 * Temporary file handle for add to list impl method of class.
357 */
358 private File addToListImplTempFileHandle;
359
360 /**
361 * Temporary file handle for leaf id attributes of enum.
362 */
363 private File leafIdAttributeTempFileHandle;
364
365 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530366 * Temporary file handle for is content match method for leaf-list.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530367 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530368 private File getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530369
370 /**
371 * Temporary file handle for is content match method for node.
372 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530373 private File getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530374
375 /**
376 * Temporary file handle for is content match method for leaf.
377 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530378 private File subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530379
380 /**
381 * Temporary file handle for edit content file.
382 */
383 private File editContentTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530384
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530385 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530386 * Leaf count.
387 */
388 private int leafCount = 0;
389
390 /**
391 * If current node is root node.
392 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530393 private boolean rootNode;
Bharat saraswal8beac342016-08-04 02:00:03 +0530394
395 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530396 * Is attribute added.
397 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530398 private boolean isAttributePresent;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530399
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530400 /**
401 * Creates an instance of temp JAVA fragment files.
402 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530403 TempJavaFragmentFiles() {
404 }
405
406 /**
407 * Creates an instance of temporary java code fragment.
408 *
409 * @param javaFileInfo generated java file information
410 * @throws IOException when fails to create new file handle
411 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530412 protected TempJavaFragmentFiles(JavaFileInfoTranslator javaFileInfo)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530413 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530414 javaExtendsListHolder = new JavaExtendsListHolder();
415 javaImportData = new JavaImportData();
416 this.javaFileInfo = javaFileInfo;
417 absoluteDirPath =
418 getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(),
419 javaFileInfo.getPackageFilePath());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530420 /*
421 * Initialize getter when generation file type matches to interface
422 * mask.
423 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530424 if (javaFlagSet(INTERFACE_MASK)) {
425 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
426 ADD_TO_LIST_INTERFACE_MASK |
427 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530428 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530429 /*
430 * Initialize getter and setter when generation file type matches to
431 * builder interface mask.
432 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530433 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
434 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
435 SETTER_FOR_INTERFACE_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530436 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530437 /*
438 * Initialize getterImpl, setterImpl and attributes when generation file
439 * type matches to builder class mask.
440 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530441 if (javaFlagSet(BUILDER_CLASS_MASK)) {
442 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
443 SETTER_FOR_CLASS_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530444 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530445 /*
446 * Initialize getterImpl, attributes, constructor, hash code, equals and
447 * to strings when generation file type matches to impl class mask.
448 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530449 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
450 addGeneratedTempFile(
451 ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
452 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
453 TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
454 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
455 FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
456 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530457 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530458 /*
459 * Initialize temp files to generate type class.
460 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530461 if (javaFlagSet(GENERATE_TYPE_CLASS)) {
462 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
463 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
464 TO_STRING_IMPL_MASK |
465 FROM_STRING_IMPL_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530466 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530467 //Initialize temp files to generate enum class.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530468 if (javaFlagSet(GENERATE_ENUM_CLASS)) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530469 addGeneratedTempFile(FROM_STRING_IMPL_MASK);
470 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530471 //Set temporary file handles
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530472 if (tempFlagSet(ATTRIBUTES_MASK)) {
473 attributesTempFileHandle =
474 getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530475 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530476 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
477 getterInterfaceTempFileHandle =
478 getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530479 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530480 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
481 setterInterfaceTempFileHandle =
482 getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530483 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530484 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
485 getterImplTempFileHandle =
486 getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530487 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530488 if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
489 setterImplTempFileHandle =
490 getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530491 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530492 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
493 hashCodeImplTempFileHandle =
494 getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530495 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530496 if (tempFlagSet(EQUALS_IMPL_MASK)) {
497 equalsImplTempFileHandle =
498 getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530499 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530500 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
501 toStringImplTempFileHandle =
502 getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530503 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530504 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
505 fromStringImplTempFileHandle =
506 getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530507 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530508 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
509 addToListInterfaceTempFileHandle =
510 getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530511 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530512 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
513 addToListImplTempFileHandle =
514 getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530515 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530516 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
517 leafIdAttributeTempFileHandle =
518 getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530519 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530520 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
521 subtreeFilteringForLeafTempFileHandle =
522 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530523 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530524 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
525 getSubtreeFilteringForListTempFileHandle =
526 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530527 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530528 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
529 getSubtreeFilteringForChildNodeTempFileHandle =
530 getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530531 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530532 if (tempFlagSet(EDIT_CONTENT_MASK)) {
533 editContentTempFileHandle =
534 getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530535 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530536 }
537
538 /**
539 * Adds current node info as and attribute to the parent generated file.
540 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530541 * @param curNode current node
542 * @param isList is list construct
543 * @param config plugin configurations
Bharat saraswalaf413b82016-07-14 15:18:20 +0530544 * @throws IOException IO operation exception
545 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530546 protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
547 boolean isList,
548 YangPluginConfig config)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530549 throws IOException {
550 YangNode parent = getParentNodeInGenCode(curNode);
551 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530552 throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
553 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530554 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530555 if (parent instanceof YangJavaGroupingTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530556 /*
557 * In case of grouping, there is no need to add the information, it
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530558 * will be taken care in uses.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530559 */
560 return;
561 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530562 TempJavaBeanFragmentFiles tempFiles =
563 getBeanFiles((JavaCodeGeneratorInfo) parent);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530564
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530565 JavaAttributeInfo attr =
566 getCurNodeAsAttributeInTarget(curNode, parent, isList,
567 tempFiles);
568 tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530569 }
570
571 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 * Creates an attribute info object corresponding to a data model node
573 * and return it.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530574 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530575 * @param curNode current node
576 * @param targetNode target node
577 * @param listNode flag indicating if a node is a list node
578 * @param tempFiles temp java fragment files
579 * @return java attribute info
Bharat saraswalaf413b82016-07-14 15:18:20 +0530580 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530581 public static JavaAttributeInfo
582 getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
583 boolean listNode,
584 TempJavaFragmentFiles tempFiles) {
585 JavaFileInfoTranslator translator =
586 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
587 String curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530588 if (curNodeName == null) {
589 updateJavaFileInfo(curNode, null);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530590 curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530591 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530592 /*
593 * Get the import info corresponding to the attribute for import in
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530594 * generated java files or qualified access.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530595 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530596 JavaQualifiedTypeInfoTranslator typeInfo =
597 getQualifiedTypeInfoOfCurNode(curNode,
598 getCapitalCase(curNodeName));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530599 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530600 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
601 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530602 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530603 JavaImportData parentImportData = tempFiles.getJavaImportData();
604 JavaFileInfoTranslator fileInfo =
605 ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530606
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530607 boolean qualified;
608 if ((tempFiles instanceof TempJavaServiceFragmentFiles) &&
609 (typeInfo.getClassInfo().contentEquals(SERVICE)) ||
610 typeInfo.getClassInfo()
611 .contentEquals(getCapitalCase(fileInfo.getJavaName() +
612 SERVICE))) {
613 qualified = true;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530614 } else {
615 String className;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530616 if (tempFiles instanceof TempJavaServiceFragmentFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530617 className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530618 } else {
619 className = getCapitalCase(fileInfo.getJavaName());
620 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530621 qualified = parentImportData.addImportInfo(typeInfo, className,
622 fileInfo.getPackage());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530623 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530624 boolean collectionSet = false;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530625 if (curNode instanceof YangList) {
626 YangList yangList = (YangList) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530627 if (yangList.getCompilerAnnotation() != null &&
628 yangList.getCompilerAnnotation()
629 .getYangAppDataStructure() != null) {
630 switch (yangList.getCompilerAnnotation()
631 .getYangAppDataStructure().getDataStructure()) {
Vidyashree Ramab3670472016-08-06 15:49:56 +0530632 case QUEUE: {
633 parentImportData.setQueueToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530634 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530635 break;
636 }
637 case SET: {
638 parentImportData.setSetToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530639 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530640 break;
641 }
642 default: {
643 // TODO : to be implemented
644 }
645 }
646 }
647 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530648 if (listNode && !(collectionSet)) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530649 parentImportData.setIfListImported(true);
650 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530651 if (curNode instanceof YangList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530652 return getAttributeInfoForTheData(typeInfo, curNodeName,
653 null, qualified, listNode,
654 ((YangList) curNode)
655 .getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530656 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530657 return getAttributeInfoForTheData(typeInfo, curNodeName, null,
658 qualified, listNode);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530659 }
660
661 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530662 * Returns java attribute for leaf.
663 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530664 * @param tempFiles temporary generated file
665 * @param container JAVA leaf info container
666 * @param config plugin configurations
667 * @param leafList flag indicating if it's leaf list
668 * @return java attribute info
Bharat saraswal64e7e232016-07-14 23:33:55 +0530669 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530670 private static JavaAttributeInfo
671 getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
672 JavaLeafInfoContainer container,
673 YangPluginConfig config, boolean leafList) {
674 if (leafList) {
675 tempFiles.getJavaImportData().setIfListImported(true);
676 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
677 true);
678 }
679 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
680 false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530681 }
682
683 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530684 * Returns java attribute for leaf container.
Bharat saraswal64e7e232016-07-14 23:33:55 +0530685 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530686 * @param tempFiles temporary generated file
687 * @param container JAVA leaf info container
688 * @param config plugin configurations
689 * @param listAttribute flag indicating if list attribute
690 * @return JAVA attribute information
Bharat saraswal64e7e232016-07-14 23:33:55 +0530691 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530692 private static JavaAttributeInfo
693 getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
694 JavaLeafInfoContainer container,
695 YangPluginConfig config,
696 boolean listAttribute) {
697 container.setConflictResolveConfig(config.getConflictResolver());
698 container.updateJavaQualifiedInfo();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530699 return getAttributeInfoForTheData(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530700 container.getJavaQualifiedInfo(),
701 container.getJavaName(config.getConflictResolver()),
702 container.getDataType(),
703 tempFiles.getIsQualifiedAccessOrAddToImportList(
704 container.getJavaQualifiedInfo()), listAttribute);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530705 }
706
707 /**
708 * Sets absolute path where the file needs to be generated.
709 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530710 * @param absoluteDirPath absolute path where the file needs to be
711 * generated
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530712 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530713 protected void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530714 this.absoluteDirPath = absoluteDirPath;
715 }
716
717 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530718 * Returns the generated java file information.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530719 *
720 * @return generated java file information
721 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530722 protected JavaFileInfoTranslator getJavaFileInfo() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530723 return javaFileInfo;
724 }
725
726 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530727 * Sets the generated java file information.
728 *
729 * @param javaFileInfo generated java file information
730 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530731 protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530732 this.javaFileInfo = javaFileInfo;
733 }
734
735 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530736 * Returns the flag-set for generated temp files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530737 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530738 * @return flag-set
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530739 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530740 protected int getGeneratedTempFiles() {
741 return tempFilesFlagSet;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530742 }
743
744 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530745 * Adds to the flag-set for generated temp files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530746 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530747 * @param flags generated temp files flag-set
Bharat saraswalaf413b82016-07-14 15:18:20 +0530748 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530749 protected void addGeneratedTempFile(int flags) {
750 tempFilesFlagSet |= flags;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530751 }
752
753 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530754 * Returns the generated Java files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530755 *
756 * @return generated Java files
757 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530758 protected int getGeneratedJavaFiles() {
759 return javaFileInfo.getGeneratedFileTypes();
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530760 }
761
762 /**
763 * Retrieves the mapped Java class name.
764 *
765 * @return mapped Java class name
766 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530767 protected String getGeneratedJavaClassName() {
768 return getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530769 }
770
771 /**
772 * Retrieves the import data for the generated Java file.
773 *
774 * @return import data for the generated Java file
775 */
776 public JavaImportData getJavaImportData() {
777 return javaImportData;
778 }
779
780 /**
781 * Sets import data for the generated Java file.
782 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530783 * @param data import data for the generated Java file
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530784 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530785 protected void setJavaImportData(JavaImportData data) {
786 javaImportData = data;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530787 }
788
789 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530790 * Retrieves the status of any attributes added.
791 *
792 * @return status of any attributes added
793 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530794 protected boolean isAttributePresent() {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530795 return isAttributePresent;
796 }
797
798 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530799 * Returns getter methods's temporary file handle.
800 *
801 * @return temporary file handle
802 */
803 public File getGetterInterfaceTempFileHandle() {
804 return getterInterfaceTempFileHandle;
805 }
806
807 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530808 * Returns setter method's temporary file handle.
809 *
810 * @return temporary file handle
811 */
812 public File getSetterInterfaceTempFileHandle() {
813 return setterInterfaceTempFileHandle;
814 }
815
816 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530817 * Returns setter method's impl's temporary file handle.
818 *
819 * @return temporary file handle
820 */
821 public File getSetterImplTempFileHandle() {
822 return setterImplTempFileHandle;
823 }
824
825 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530826 * Returns from string method's temporary file handle.
827 *
828 * @return from string method's temporary file handle
829 */
830 public File getFromStringImplTempFileHandle() {
831 return fromStringImplTempFileHandle;
832 }
833
834 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530835 * Returns attribute's temporary file handle.
836 *
837 * @return temporary file handle
838 */
839 public File getAttributesTempFileHandle() {
840 return attributesTempFileHandle;
841 }
842
843 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530844 * Returns getter method's impl's temporary file handle.
845 *
846 * @return temporary file handle
847 */
848 public File getGetterImplTempFileHandle() {
849 return getterImplTempFileHandle;
850 }
851
852 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530853 * Returns hash code method's temporary file handle.
854 *
855 * @return temporary file handle
856 */
857 public File getHashCodeImplTempFileHandle() {
858 return hashCodeImplTempFileHandle;
859 }
860
861 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530862 * Returns equals method's temporary file handle.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530863 *
864 * @return temporary file handle
865 */
866 public File getEqualsImplTempFileHandle() {
867 return equalsImplTempFileHandle;
868 }
869
870 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530871 * Returns to string method's temporary file handle.
872 *
873 * @return temporary file handle
874 */
875 public File getToStringImplTempFileHandle() {
876 return toStringImplTempFileHandle;
877 }
878
879 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530880 * Returns java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530881 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530882 * @return java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530883 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530884 public JavaExtendsListHolder getJavaExtendsListHolder() {
885 return javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530886 }
887
888 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530889 * Sets java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530890 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530891 * @param holder java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530892 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530893 protected void setJavaExtendsListHolder(JavaExtendsListHolder
894 holder) {
895 javaExtendsListHolder = holder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530896 }
897
898 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530899 * Adds is filter content match for leaf.
900 *
901 * @param attr java attribute
902 * @throws IOException when fails to do IO operations
903 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530904 private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +0530905 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530906 appendToFile(subtreeFilteringForLeafTempFileHandle,
907 getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
908 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530909 }
910
911 /**
912 * Adds is filter content match for leaf-list.
913 *
914 * @param attr java attribute
915 * @throws IOException when fails to do IO operations
916 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530917 private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +0530918 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530919 appendToFile(getSubtreeFilteringForListTempFileHandle,
Bharat saraswal1edde622016-09-06 10:18:04 +0530920 getSubtreeFilteringForLeafList(attr) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530921 }
922
923 /**
924 * Adds is filter content match for nodes.
925 *
926 * @param attr java attribute
927 * @throws IOException when fails to do IO operations
928 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530929 private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +0530930 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530931 appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
Bharat saraswal1edde622016-09-06 10:18:04 +0530932 getSubtreeFilteringForNode(attr) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530933 }
934
935 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530936 * Adds attribute for class.
937 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530938 * @param attr attribute info
939 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530940 * @throws IOException when fails to append to temporary file
941 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530942 private void addAttribute(JavaAttributeInfo attr,
943 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530944 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530945 appendToFile(attributesTempFileHandle, parseAttribute(attr, config) +
946 FOUR_SPACE_INDENTATION);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530947 }
948
949 /**
950 * Adds getter for interface.
951 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530952 * @param attr attribute info
953 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530954 * @throws IOException when fails to append to temporary file
955 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530956 private void addGetterForInterface(JavaAttributeInfo attr,
957 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530958 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530959 appendToFile(getterInterfaceTempFileHandle,
960 getGetterString(attr, getGeneratedJavaFiles(), config) +
961 NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530962 }
963
964 /**
965 * Adds setter for interface.
966 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530967 * @param attr attribute info
968 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530969 * @throws IOException when fails to append to temporary file
970 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530971 private void addSetterForInterface(JavaAttributeInfo attr,
972 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530973 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530974 appendToFile(setterInterfaceTempFileHandle,
975 getSetterString(attr, getGeneratedJavaClassName(),
976 getGeneratedJavaFiles(), config) +
977 NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530978 }
979
980 /**
981 * Adds setter's implementation for class.
982 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530983 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530984 * @throws IOException when fails to append to temporary file
985 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530986 private void addSetterImpl(JavaAttributeInfo attr,
987 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530988 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530989 String setter =
990 getSetterForClass(attr, getGeneratedJavaClassName(),
991 getGeneratedJavaFiles()) + NEW_LINE;
992 if (rootNode) {
993 appendToFile(setterImplTempFileHandle,
994 getJavaDoc(SETTER_METHOD, attr.getAttributeName(),
995 attr.isListAttr(), config, null) + setter);
Bharat saraswal8beac342016-08-04 02:00:03 +0530996 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530997 appendToFile(setterImplTempFileHandle, getOverRideString() + setter);
Bharat saraswal8beac342016-08-04 02:00:03 +0530998 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530999 }
1000
1001 /**
1002 * Adds getter method's impl for class.
1003 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301004 * @param attr attribute info
1005 * @param config plugin configurations
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301006 * @throws IOException when fails to append to temporary file
1007 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301008 protected void addGetterImpl(JavaAttributeInfo attr,
1009 YangPluginConfig config)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301010 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301011 String getter =
1012 getGetterForClass(attr, getGeneratedJavaFiles()) + NEW_LINE;
1013 if (javaFlagSet(BUILDER_CLASS_MASK | GENERATE_SERVICE_AND_MANAGER)) {
1014 if (!rootNode) {
1015 appendToFile(getterImplTempFileHandle, getOverRideString() +
1016 getter);
Bharat saraswal8beac342016-08-04 02:00:03 +05301017 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301018 appendToFile(getterImplTempFileHandle, getter);
Bharat saraswal8beac342016-08-04 02:00:03 +05301019 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301020 } else {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301021 String appDataStructure = null;
1022 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301023 appDataStructure = attr.getCompilerAnnotation()
1024 .getYangAppDataStructure().getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301025 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301026 appendToFile(getterImplTempFileHandle,
1027 getJavaDoc(GETTER_METHOD,
1028 getCapitalCase(attr.getAttributeName()),
1029 false, config, appDataStructure) + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301030 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301031 }
1032
1033 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301034 * Adds add to list interface method.
1035 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301036 * @param attr attribute
1037 * @param config plugin configurations
Bharat saraswal8beac342016-08-04 02:00:03 +05301038 * @throws IOException when fails to do IO operations
1039 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301040 private void addAddToListInterface(JavaAttributeInfo attr,
1041 YangPluginConfig config)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301042 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301043 appendToFile(addToListInterfaceTempFileHandle,
1044 getJavaDoc(ADD_TO_LIST,
1045 getCapitalCase(attr.getAttributeName()), false,
1046 config, null) + getAddToListMethodInterface(
1047 attr, getGeneratedJavaClassName()) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301048 }
1049
1050 /**
1051 * Adds add to list interface method.
1052 *
1053 * @param attr attribute
1054 * @throws IOException when fails to do IO operations
1055 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301056 private void addAddToListImpl(JavaAttributeInfo attr)
1057 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301058 appendToFile(addToListImplTempFileHandle,
1059 getAddToListMethodImpl(attr, getGeneratedJavaClassName(),
1060 rootNode) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301061 }
1062
1063 /**
1064 * Adds leaf identifier enum attributes.
1065 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301066 * @param attr attribute
1067 * @param value value
Bharat saraswal8beac342016-08-04 02:00:03 +05301068 * @throws IOException when fails to do IO operations
1069 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301070 private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
Bharat saraswal8beac342016-08-04 02:00:03 +05301071 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301072 appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
1073 generateEnumAttributeString(attr.getAttributeName(), value));
Bharat saraswal8beac342016-08-04 02:00:03 +05301074 }
1075
1076 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301077 * Adds build method for interface.
1078 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301079 * @param config plugin configurations
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301080 * @return build method for interface
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301081 * @throws IOException when fails to append to temporary file
1082 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301083 protected String addBuildMethodForInterface(YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301084 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301085 return parseBuilderInterfaceBuildMethodString(getGeneratedJavaClassName(),
1086 config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301087 }
1088
1089 /**
1090 * Adds build method's implementation for class.
1091 *
1092 * @return build method implementation for class
1093 * @throws IOException when fails to append to temporary file
1094 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301095 protected String addBuildMethodImpl()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301096 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301097 return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301098 }
1099
1100 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301101 * Adds default constructor for class.
1102 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301103 * @param modifier modifier for constructor
1104 * @param toAppend string which need to be appended with the class name
1105 * @param config plugin configurations
1106 * @param suffix is value need to be appended as suffix
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301107 * @return default constructor for class
1108 * @throws IOException when fails to append to file
1109 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301110 protected String addDefaultConstructor(String modifier, String toAppend,
1111 YangPluginConfig config,
1112 boolean suffix)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301113 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301114 StringBuilder name = new StringBuilder();
1115 name.append(getGeneratedJavaClassName());
1116 String constructor = NEW_LINE +
1117 getDefaultConstructorString(name.toString(), modifier, config);
1118 if (rootNode && !toAppend.equals(BUILDER)) {
1119 name.append(OP_PARAM);
1120 return constructor;
Bharat saraswal8beac342016-08-04 02:00:03 +05301121 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301122 if (suffix) {
1123 name.append(toAppend);
1124 return constructor;
Bharat saraswal8beac342016-08-04 02:00:03 +05301125 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301126 StringBuilder appended = new StringBuilder();
Bharat saraswal8beac342016-08-04 02:00:03 +05301127 if (toAppend.equals(DEFAULT)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301128 appended.append(getCapitalCase(toAppend));
Bharat saraswal8beac342016-08-04 02:00:03 +05301129 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301130 appended.append(toAppend);
Bharat saraswal8beac342016-08-04 02:00:03 +05301131 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301132 return NEW_LINE + getDefaultConstructorString(appended.append(
1133 name.toString()).toString(), modifier, config);
1134 // TODO getDefaultConstructorString to handle new line.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301135 }
1136
1137 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301138 * Adds hash code method for class.
1139 *
1140 * @param attr attribute info
1141 * @throws IOException when fails to append to temporary file
1142 */
1143 private void addHashCodeMethod(JavaAttributeInfo attr)
1144 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301145 appendToFile(hashCodeImplTempFileHandle,
1146 getHashCodeMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301147 }
1148
1149 /**
1150 * Adds equals method for class.
1151 *
1152 * @param attr attribute info
1153 * @throws IOException when fails to append to temporary file
1154 */
1155 private void addEqualsMethod(JavaAttributeInfo attr)
1156 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301157 appendToFile(equalsImplTempFileHandle,
1158 getEqualsMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301159 }
1160
1161 /**
1162 * Adds ToString method for class.
1163 *
1164 * @param attr attribute info
1165 * @throws IOException when fails to append to temporary file
1166 */
1167 private void addToStringMethod(JavaAttributeInfo attr)
1168 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301169 appendToFile(toStringImplTempFileHandle,
1170 getToStringMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301171 }
1172
1173 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301174 * Adds from string method for union class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301175 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301176 * @param attr type attribute info
1177 * @param fromStringAttr from string attribute info
Bharat saraswal250a7472016-05-12 13:16:57 +05301178 * @throws IOException when fails to append to temporary file
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301179 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301180 void addFromStringMethod(JavaAttributeInfo attr,
1181 JavaAttributeInfo fromStringAttr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301182 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301183 appendToFile(fromStringImplTempFileHandle,
1184 getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301185 }
1186
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301187 /**
1188 * Returns a temporary file handle for the specific file type.
1189 *
1190 * @param fileName file name
1191 * @return temporary file handle
1192 * @throws IOException when fails to create new file handle
1193 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301194 protected File getTemporaryFileHandle(String fileName)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301195 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301196 String path = getTempDirPath(absoluteDirPath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301197 File dir = new File(path);
Bharat saraswal8beac342016-08-04 02:00:03 +05301198 boolean isCreated;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301199 if (!dir.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301200 isCreated = dir.mkdirs();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301201 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301202 throw new IOException("failed to create temporary directory " +
1203 "for " + fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301204 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301205 }
1206 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1207 if (!file.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301208 isCreated = file.createNewFile();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301209 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301210 throw new IOException("failed to create temporary file for " +
1211 fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301212 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301213 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301214 throw new IOException(fileName + " is reused due to YANG naming. " +
1215 "probably your previous build " +
1216 "would have failed");
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301217 }
1218 return file;
1219 }
1220
1221 /**
1222 * Returns a temporary file handle for the specific file type.
1223 *
1224 * @param fileName file name
1225 * @return temporary file handle
1226 * @throws IOException when fails to create new file handle
1227 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301228 protected File getJavaFileHandle(String fileName)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301229 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301230 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
1231 javaFileInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301232 }
1233
1234 /**
1235 * Returns data from the temporary files.
1236 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301237 * @param file temporary file handle
Bharat saraswald14cbe82016-07-14 13:26:18 +05301238 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301239 * @return stored data from temporary files
1240 * @throws IOException when failed to get data from the given file
1241 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301242 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301243 throws IOException {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301244 String path = getTempDirPath(absolutePath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301245 if (new File(path + file.getName()).exists()) {
1246 return readAppendFile(path + file.getName(), EMPTY_STRING);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301247 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301248 throw new IOException("Unable to get data from the given " +
1249 file.getName() + " file for " +
1250 getGeneratedJavaClassName() + PERIOD);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301251 }
1252
1253 /**
1254 * Returns temporary directory path.
1255 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301256 * @param path absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301257 * @return directory path
1258 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301259 private String getTempDirPath(String path) {
1260 return getPackageDirPathFromJavaJPackage(path) + SLASH +
1261 getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301262 }
1263
1264 /**
1265 * Parses attribute to get the attribute string.
1266 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301267 * @param attr attribute info
1268 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301269 * @return attribute string
1270 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301271 protected String parseAttribute(JavaAttributeInfo attr,
1272 YangPluginConfig config) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301273 /*
1274 * TODO: check if this utility needs to be called or move to the caller
1275 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301276 String attrName = getCamelCase(attr.getAttributeName(),
1277 config.getConflictResolver());
1278 String attrAccessType = PRIVATE;
1279 if ((javaFileInfo.getGeneratedFileTypes() &
1280 GENERATE_INTERFACE_WITH_BUILDER) != 0) {
1281 attrAccessType = PROTECTED;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301282 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301283 String pkg = null;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301284 if (attr.isQualifiedName()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301285 pkg = attr.getImportInfo().getPkgInfo();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301286 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301287 return getJavaAttributeDefinition(
1288 pkg, attr.getImportInfo().getClassInfo(), attrName,
1289 attr.isListAttr(), attrAccessType, attr.getCompilerAnnotation());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301290 }
1291
1292 /**
1293 * Appends content to temporary file.
1294 *
1295 * @param file temporary file
1296 * @param data data to be appended
1297 * @throws IOException when fails to append to file
1298 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301299 protected void appendToFile(File file, String data)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301300 throws IOException {
1301 try {
1302 insertDataIntoJavaFile(file, data);
1303 } catch (IOException ex) {
1304 throw new IOException("failed to write in temp file.");
1305 }
1306 }
1307
1308 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301309 * Adds parent's info to current node import list.
1310 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301311 * @param curNode current node
1312 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301313 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301314 protected void addParentInfoInCurNodeTempFile(YangNode curNode,
1315 YangPluginConfig config) {
1316 JavaQualifiedTypeInfoTranslator caseImportInfo =
1317 new JavaQualifiedTypeInfoTranslator();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301318 YangNode parent = getParentNodeInGenCode(curNode);
Bharat saraswale50edca2016-08-05 01:58:25 +05301319 if (curNode instanceof YangCase && parent instanceof YangAugment) {
1320 return;
1321 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301322 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301323 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301324 }
1325 if (!(curNode instanceof JavaFileInfoContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301326 throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301327 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301328 caseImportInfo.setClassInfo(
1329 getCapitalCase(getCamelCase(parent.getName(),
1330 config.getConflictResolver())));
1331 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
1332 .getPackage());
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301333
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301334 JavaFileInfoTranslator fileInfo =
1335 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301336
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301337 getBeanFiles(curNode).getJavaImportData().addImportInfo(
1338 caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
1339 fileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301340 }
1341
1342 /**
1343 * Adds leaf attributes in generated files.
1344 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301345 * @param entry JAVA leaf info container
1346 * @param config plugin config
1347 * @param curNode current node
1348 * @param leafList flag indicating whether leaf container is leafList
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301349 * @throws IOException IO operation fail
1350 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301351 private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
1352 YangPluginConfig config,
1353 YangNode curNode,
1354 boolean leafList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301355 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301356 if (entry != null) {
1357 if (curNode instanceof RpcNotificationContainer) {
1358 TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
1359 addJavaSnippetInfoToApplicableTempFiles(
1360 getJavaAttributeOfLeaf(tempFiles, entry,
1361 config, leafList), config);
1362 } else {
1363 addJavaSnippetInfoToApplicableTempFiles(
1364 getJavaAttributeOfLeaf(this, entry,
1365 config, leafList), config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301366 }
1367 }
1368 }
1369
1370 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301371 * Adds all the leaves in the current data model node as part of the
1372 * generated temporary file.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301373 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301374 * @param curNode current node
1375 * @param config plugin config
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301376 * @throws IOException IO operation fail
1377 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301378 protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
1379 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301380 throws IOException {
1381 if (!(curNode instanceof YangLeavesHolder)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301382 throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
1383 curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301384 }
1385 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301386
1387 for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
1388 addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
1389 curNode, false);
1390 }
1391
1392 for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
1393 addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
1394 curNode, true);
1395 }
1396 }
1397
1398 /**
1399 * Adds operation type to temp files.
1400 *
1401 * @param curNode current YANG node
1402 * @param config YANG plugin config
1403 * @throws IOException IO exception
1404 */
1405 protected void addOperationTypeToTempFiles(YangNode curNode,
1406 YangPluginConfig config)
1407 throws IOException {
1408 JavaQualifiedTypeInfoTranslator typeInfo =
1409 new JavaQualifiedTypeInfoTranslator();
1410 typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
1411 typeInfo.setPkgInfo(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1412 .getPackage());
1413 JavaAttributeInfo attributeInfo =
1414 getAttributeInfoForTheData(typeInfo, YANG + getCapitalCase(
1415 curNode.getJavaClassNameOrBuiltInType()) +
1416 OPERATION_TYPE_ATTRIBUTE, null, false, false);
1417 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301418 }
1419
1420 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301421 * Adds the new attribute info to the target generated temporary files.
1422 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301423 * @param newAttrInfo new attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301424 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301425 * @throws IOException IO operation fail
1426 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301427 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
1428 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301429 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301430 isAttributePresent = true;
1431 if (tempFlagSet(ATTRIBUTES_MASK)) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301432 addAttribute(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301433 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301434 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301435 addGetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301436 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301437 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301438 addSetterForInterface(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301439 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301440 if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
Bharat saraswale304c252016-08-16 20:56:20 +05301441 addSetterImpl(newAttrInfo, pluginConfig);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301442 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301443 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301444 addHashCodeMethod(newAttrInfo);
1445 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301446 if (tempFlagSet(EQUALS_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301447 addEqualsMethod(newAttrInfo);
1448 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301449 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301450 addToStringMethod(newAttrInfo);
1451 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301452 if (tempFlagSet(EDIT_CONTENT_MASK)) {
Bharat saraswale50edca2016-08-05 01:58:25 +05301453 //TODO: add implementation for edit content match.
1454 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301455 boolean listAttr = newAttrInfo.isListAttr();
1456 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301457 addAddToListImpl(newAttrInfo);
1458 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301459 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301460 addAddToListInterface(newAttrInfo, pluginConfig);
1461 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301462 YangType attrType = newAttrInfo.getAttributeType();
1463 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
1464 attrType == null && !newAttrInfo.getAttributeName()
1465 .equals(OPERATION_TYPE_ATTRIBUTE)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301466 addSubtreeFilteringForChildNode(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301467 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301468 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
1469 !listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301470 addSubTreeFilteringForLeaf(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301471 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301472 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
1473 listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301474 addSubtreeFilteringForLeafList(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301475 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301476 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
1477 !listAttr && attrType != null) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301478 leafCount++;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301479 addLeafIdAttributes(newAttrInfo, leafCount);
Bharat saraswal8beac342016-08-04 02:00:03 +05301480 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301481 if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
1482 !newAttrInfo.isShortConflict()) {
1483 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301484 addGetterImpl(newAttrInfo, pluginConfig);
1485 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301486 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1487 JavaQualifiedTypeInfoTranslator typeInfo =
1488 getQualifiedInfoOfFromString(newAttrInfo,
1489 pluginConfig.getConflictResolver());
Bharat saraswal250a7472016-05-12 13:16:57 +05301490 /*
1491 * Create a new java attribute info with qualified information of
1492 * wrapper classes.
1493 */
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301494 JavaAttributeInfo fromStringAttributeInfo =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301495 getAttributeInfoForTheData(
1496 typeInfo, newAttrInfo.getAttributeName(),
1497 attrType, getIsQualifiedAccessOrAddToImportList(
1498 typeInfo), false);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301499 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
1500 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301501 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301502 }
1503
1504 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301505 * Returns JAVA class name for non implementation classes.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301506 *
1507 * @param suffix for the class name based on the file type
1508 * @return java class name
1509 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301510 protected String getJavaClassName(String suffix) {
1511 return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301512 }
1513
1514 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301515 * Returns class name for implementation classes.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301516 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301517 * @param node YANG node
Bharat saraswald14cbe82016-07-14 13:26:18 +05301518 * @return java class name
1519 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301520 private String getImplClassName(YangNode node) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301521 if (node instanceof RpcNotificationContainer) {
1522 return getCapitalCase(javaFileInfo.getJavaName()) + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +05301523 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301524 return getCapitalCase(DEFAULT) +
1525 getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301526 }
1527
1528 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301529 * Returns the directory path.
1530 *
1531 * @return directory path
1532 */
1533 private String getDirPath() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301534 return javaFileInfo.getPackageFilePath();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301535 }
1536
1537 /**
1538 * Constructs java code exit.
1539 *
1540 * @param fileType generated file type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301541 * @param curNode current YANG node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301542 * @throws IOException when fails to generate java files
1543 */
1544 public void generateJavaFile(int fileType, YangNode curNode)
1545 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301546 List<String> imports =
1547 getBeanFiles(curNode).getJavaImportData().getImports();
Bharat saraswal8beac342016-08-04 02:00:03 +05301548 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301549 addImportsForAugmentableClass(imports, true, true, curNode);
Bharat saraswal8beac342016-08-04 02:00:03 +05301550 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301551 createPackage(curNode);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301552
1553 //Generate java code.
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301554 if ((fileType & INTERFACE_MASK) != 0 || (fileType &
1555 BUILDER_INTERFACE_MASK) != 0) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301556
1557 //Create interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301558 interfaceJavaFileHandle =
1559 getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
1560 interfaceJavaFileHandle =
1561 generateInterfaceFile(interfaceJavaFileHandle, imports,
1562 curNode, isAttributePresent);
1563 if (!(curNode instanceof RpcNotificationContainer)) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301564
1565 //Create builder interface file.
Bharat saraswal8beac342016-08-04 02:00:03 +05301566 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301567 builderInterfaceJavaFileHandle =
1568 getJavaFileHandle(getJavaClassName(
1569 BUILDER_INTERFACE_FILE_NAME_SUFFIX));
1570 builderInterfaceJavaFileHandle =
1571 generateBuilderInterfaceFile(
1572 builderInterfaceJavaFileHandle,
1573 curNode, isAttributePresent);
1574 /*
1575 * Append builder interface file to interface file and
1576 * close it.
1577 */
1578 mergeJavaFiles(builderInterfaceJavaFileHandle,
1579 interfaceJavaFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301580 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301581 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301582 insertDataIntoJavaFile(interfaceJavaFileHandle,
1583 getJavaClassDefClose());
1584 validateLineLength(interfaceJavaFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301585 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301586 addImportsForAugmentableClass(imports, false, true, curNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301587 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301588 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301589 if ((fileType & BUILDER_CLASS_MASK) != 0 ||
1590 (fileType & DEFAULT_CLASS_MASK) != 0) {
1591 if (isAttributePresent) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301592 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswal8beac342016-08-04 02:00:03 +05301593 addArrayListImport(imports);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301594 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301595
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301596 boolean leavesPresent;
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301597 if (curNode instanceof YangLeavesHolder) {
1598 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301599 leavesPresent = leavesHolder.getListOfLeaf() != null &&
1600 !leavesHolder.getListOfLeaf().isEmpty() ||
1601 leavesHolder.getListOfLeafList() != null &&
1602 !leavesHolder.getListOfLeafList().isEmpty();
1603 if (leavesPresent) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301604 addBitsetImport(imports);
1605 }
1606 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301607 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301608 addImportsForAugmentableClass(imports, true, false, curNode);
Bharat saraswale50edca2016-08-05 01:58:25 +05301609 addInvocationExceptionImport(imports);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301610 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301611 sortImports(imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301612
1613 //Create impl class file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301614 implClassJavaFileHandle =
1615 getJavaFileHandle(getImplClassName(curNode));
1616 implClassJavaFileHandle =
1617 generateDefaultClassFile(implClassJavaFileHandle,
1618 curNode, isAttributePresent,
1619 imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301620
1621 //Create builder class file.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301622 if ((fileType & BUILDER_CLASS_MASK) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301623 builderClassJavaFileHandle =
1624 getJavaFileHandle(getJavaClassName(
1625 BUILDER_CLASS_FILE_NAME_SUFFIX));
1626 builderClassJavaFileHandle =
1627 generateBuilderClassFile(builderClassJavaFileHandle,
1628 curNode,
1629 isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301630
1631 //Append impl class to builder class and close it.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301632 mergeJavaFiles(builderClassJavaFileHandle,
1633 implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301634 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301635 insertDataIntoJavaFile(implClassJavaFileHandle,
1636 getJavaClassDefClose());
1637 validateLineLength(implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301638 }
Vidyashree Ramab3670472016-08-06 15:49:56 +05301639 //Close all the file handles.
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301640 freeTemporaryResources(false);
1641 }
1642
Vidyashree Ramab3670472016-08-06 15:49:56 +05301643 //Adds import for array list.
Bharat saraswal8beac342016-08-04 02:00:03 +05301644 private void addArrayListImport(List<String> imports) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301645 if (imports.contains(javaImportData.getImportForList())) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301646 imports.add(ARRAY_LIST_IMPORT);
1647 }
1648 }
1649
Bharat saraswal8beac342016-08-04 02:00:03 +05301650 private void addBitsetImport(List<String> imports) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301651 imports.add(javaImportData.getImportForToBitSet());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301652 }
1653
1654 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301655 * Adds imports for ToString and HashCodeMethod.
1656 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301657 * @param imports import list
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301658 * @param operation add or remove
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301659 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301660 protected void addImportsToStringAndHasCodeMethods(List<String> imports,
1661 boolean operation) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301662 if (operation) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301663 imports.add(javaImportData.getImportForHashAndEquals());
1664 imports.add(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301665 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301666 imports.remove(javaImportData.getImportForHashAndEquals());
1667 imports.remove(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301668 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301669 // TODO change boolean to OPERATION, in all related places.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301670 }
1671
1672 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301673 * Adds import for map and hash map.
1674 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301675 * @param imports import list
1676 * @param operations true for adding and false for deletion
1677 * @param isInterfaceFile if need to add in interface file
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301678 * @param curNode current node
Bharat saraswalaf413b82016-07-14 15:18:20 +05301679 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301680 private void addImportsForAugmentableClass(List<String> imports,
1681 boolean operations,
1682 boolean isInterfaceFile,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301683 YangNode curNode) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301684 if (operations) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301685 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301686 imports.add(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05301687 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301688 // Add import for hash map only if node is not a YANG choice.
1689 if (!(curNode instanceof YangChoice)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301690 imports.add(javaImportData.getMapImport());
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301691 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05301692 } else {
Bharat saraswal8beac342016-08-04 02:00:03 +05301693 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301694 imports.remove(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05301695 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301696 imports.remove(javaImportData.getMapImport());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301697 }
Bharat saraswal8beac342016-08-04 02:00:03 +05301698 sortImports(imports);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301699 }
1700
1701 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301702 * Adds invocation exception import.
Bharat saraswal039f59c2016-07-14 21:57:13 +05301703 *
1704 * @param imports list of imports
Bharat saraswal039f59c2016-07-14 21:57:13 +05301705 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301706 private void addInvocationExceptionImport(List<String> imports) {
1707 imports.add(INVOCATION_TARGET_EXCEPTION_IMPORT);
Bharat saraswal039f59c2016-07-14 21:57:13 +05301708 }
1709
1710 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301711 * Removes all temporary file handles.
1712 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301713 * @param errorOccurred flag indicating if error occurred
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301714 * @throws IOException when failed to delete the temporary files
1715 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301716 public void freeTemporaryResources(boolean errorOccurred)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301717 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301718 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301719 * Close all java file handles and when error occurs delete the files.
1720 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301721 if (javaFlagSet(INTERFACE_MASK)) {
1722 closeFile(interfaceJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301723 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301724 if (javaFlagSet(BUILDER_CLASS_MASK)) {
1725 closeFile(builderClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301726 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301727 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
1728 closeFile(builderInterfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301729 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301730 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
1731 closeFile(implClassJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301732 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301733 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301734 * Close all temporary file handles and delete the files.
1735 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301736 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
1737 closeFile(getterImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301738 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301739 if (tempFlagSet(ATTRIBUTES_MASK)) {
1740 closeFile(attributesTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301741 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301742 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
1743 closeFile(hashCodeImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301744 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301745 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
1746 closeFile(toStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301747 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301748 if (tempFlagSet(EQUALS_IMPL_MASK)) {
1749 closeFile(equalsImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301750 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301751 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1752 closeFile(fromStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301753 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301754 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
1755 closeFile(addToListImplTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301756 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301757 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
1758 closeFile(addToListInterfaceTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301759 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301760 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
1761 closeFile(leafIdAttributeTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301762 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301763 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
1764 closeFile(subtreeFilteringForLeafTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301765 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301766 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
1767 closeFile(getSubtreeFilteringForListTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301768 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301769 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
1770 closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301771 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301772 if (tempFlagSet(EDIT_CONTENT_MASK)) {
1773 closeFile(editContentTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301774 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301775 }
1776
1777 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301778 * Returns if the attribute needs to be accessed in a qualified manner or
1779 * not, if it needs to be imported, then the same needs to be done.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301780 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301781 * @param importInfo import info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301782 * @return status of the qualified access to the attribute
1783 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301784 protected boolean getIsQualifiedAccessOrAddToImportList(JavaQualifiedTypeInfo
1785 importInfo) {
1786 return javaImportData
1787 .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
1788 getGeneratedJavaClassName(),
1789 javaFileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301790 }
1791
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301792 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301793 * Returns temp file handle for add to list interface.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301794 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301795 * @return temp file handle for add to list interface
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301796 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301797 public File getAddToListInterfaceTempFileHandle() {
1798 return addToListInterfaceTempFileHandle;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301799 }
1800
1801 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301802 * Returns temp file handle for add to list impl.
1803 *
1804 * @return temp file handle for add to list impl
1805 */
1806 public File getAddToListImplTempFileHandle() {
1807 return addToListImplTempFileHandle;
1808 }
1809
1810 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301811 * Returns temp file handle for leaf identifier attributes.
1812 *
1813 * @return temp file handle for leaf identifier attributes
1814 */
1815 public File getLeafIdAttributeTempFileHandle() {
1816 return leafIdAttributeTempFileHandle;
1817 }
1818
1819 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301820 * Sets true if root node.
1821 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301822 * @param rootNode true if root node
Bharat saraswal8beac342016-08-04 02:00:03 +05301823 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301824 void setRootNode(boolean rootNode) {
1825 this.rootNode = rootNode;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301826 }
Bharat saraswale50edca2016-08-05 01:58:25 +05301827
1828 /**
1829 * Returns temp file for is content match.
1830 *
1831 * @return temp file for is content match
1832 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301833 public File getSubtreeFilteringForLeafTempFileHandle() {
1834 return subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05301835 }
1836
1837 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301838 * Returns temp file for edit content file.
1839 *
1840 * @return temp file for edit content file
1841 */
1842 public File getEditContentTempFileHandle() {
1843 return editContentTempFileHandle;
1844 }
1845
1846 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301847 * Returns temp file for is content match.
1848 *
1849 * @return temp file for is content match
1850 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301851 public File getGetSubtreeFilteringForListTempFileHandle() {
1852 return getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05301853 }
1854
1855 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301856 * Returns temp file for is content match.
1857 *
1858 * @return temp file for is content match
1859 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301860 public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
1861 return getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05301862 }
1863
1864 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301865 * Checks if a given flag is set in generated java files.
1866 * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
1867 * <pre>
1868 * javaFlagSet(FOO | BAR)
1869 * </pre>
1870 * returns true if either FOO flag or BAR flag is set.
Bharat saraswale50edca2016-08-05 01:58:25 +05301871 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301872 * @param flag input flag mask value
1873 * @return true if set, else false
Bharat saraswale50edca2016-08-05 01:58:25 +05301874 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301875 private boolean javaFlagSet(int flag) {
1876 return (getGeneratedJavaFiles() & flag) != 0;
1877 }
1878
1879 /**
1880 * Checks if a given flag is set in temp files.
1881 *
1882 * @param flag input flag mask value
1883 * @return true if set, else false
1884 */
1885 private boolean tempFlagSet(int flag) {
1886 return (tempFilesFlagSet & flag) != 0;
Bharat saraswale50edca2016-08-05 01:58:25 +05301887 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301888}