blob: b1c45e6152a9ce0c984e7f693abb46f0da9c2396 [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;
Bharat saraswala5c28512016-11-10 21:09:23 +053023import org.onosproject.yangutils.datamodel.YangDataStructure;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053024import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangLeafList;
26import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vidyashree Ramab3670472016-08-06 15:49:56 +053027import org.onosproject.yangutils.datamodel.YangList;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053028import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb41904b2016-10-20 19:22:36 +053029import org.onosproject.yangutils.datamodel.YangSchemaNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053030import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal94844d62016-10-13 13:28:03 +053031import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053032import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053033import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053034import org.onosproject.yangutils.translator.exception.TranslatorException;
35import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
Shankara-Huaweib7564772016-08-02 18:13:13 +053036import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
Bharat saraswala5c28512016-11-10 21:09:23 +053037import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeafTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053038import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053039import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053040
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053041import java.io.File;
42import java.io.IOException;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053043import java.util.ArrayList;
Bharat saraswala5c28512016-11-10 21:09:23 +053044import java.util.Iterator;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053045import java.util.List;
46
Bharat saraswalc2d3be12016-06-16 00:29:12 +053047import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Bharat saraswala5c28512016-11-10 21:09:23 +053048import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswalaf413b82016-07-14 15:18:20 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
57import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
72import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053073import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
74import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal0663aff2016-10-18 23:16:14 +053075import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateBitsFile;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053076import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Bharat saraswal8beac342016-08-04 02:00:03 +053077import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
78import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Bharat saraswalaf413b82016-07-14 15:18:20 +053079import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.sortImports;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053080import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
81import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Bharat saraswal8beac342016-08-04 02:00:03 +053082import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053083import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Bharat saraswala5c28512016-11-10 21:09:23 +053084import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateKeyClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053085import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswald14cbe82016-07-14 13:26:18 +053086import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Bharat saraswal8beac342016-08-04 02:00:03 +053087import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
88import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053090import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
91import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal250a7472016-05-12 13:16:57 +053092import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
94import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
98import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Bharat saraswala5c28512016-11-10 21:09:23 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
Bharat saraswal94844d62016-10-13 13:28:03 +0530101import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530102import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530103import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
104import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
105import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
106import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
107import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
108import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
109import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
110import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
111import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswal8beac342016-08-04 02:00:03 +0530112import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_IMPORT;
Bharat saraswal94844d62016-10-13 13:28:03 +0530113import static org.onosproject.yangutils.utils.UtilConstants.AUGMENT_MAP_TYPE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530114import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530115import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530116import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswala5c28512016-11-10 21:09:23 +0530117import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530118import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530119import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530120import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswala5c28512016-11-10 21:09:23 +0530121import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
122import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530123import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswala5c28512016-11-10 21:09:23 +0530124import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530125import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530126import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530127import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
Bharat saraswal8beac342016-08-04 02:00:03 +0530128import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION_IMPORT;
janani b110f7f72016-10-27 19:04:18 +0530129import static org.onosproject.yangutils.utils.UtilConstants.ITR_IMPORT;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530130import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
Bharat saraswala5c28512016-11-10 21:09:23 +0530131import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530132import static org.onosproject.yangutils.utils.UtilConstants.METHOD;
janani b110f7f72016-10-27 19:04:18 +0530133import static org.onosproject.yangutils.utils.UtilConstants.METHOD_IMPORT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530134import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530135import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
136import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_CLASS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530137import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530138import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530139import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
140import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswala5c28512016-11-10 21:09:23 +0530141import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530142import static org.onosproject.yangutils.utils.UtilConstants.REFLECT_IMPORTS;
Bharat saraswal94844d62016-10-13 13:28:03 +0530143import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530144import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
janani b110f7f72016-10-27 19:04:18 +0530145import static org.onosproject.yangutils.utils.UtilConstants.SET_IMPORT;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530146import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswala5c28512016-11-10 21:09:23 +0530147import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530148import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal94844d62016-10-13 13:28:03 +0530149import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.YANG;
Bharat saraswal94844d62016-10-13 13:28:03 +0530151import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530152import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530153import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
Bharat saraswal8beac342016-08-04 02:00:03 +0530154import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530155import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530156import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530157import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530158import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530159import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
160import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
161import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530162import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
163import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530164import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530165
166/**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530167 * Represents implementation of java code fragments temporary implementations.
168 * Manages the common temp file required for Java file(s) generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530169 */
170public class TempJavaFragmentFiles {
Bharat saraswal250a7472016-05-12 13:16:57 +0530171
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530172 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530173 * File type extension for java classes.
174 */
175 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswal250a7472016-05-12 13:16:57 +0530176
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530177 /**
178 * File type extension for temporary classes.
179 */
180 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswal250a7472016-05-12 13:16:57 +0530181
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530182 /**
183 * Folder suffix for temporary files folder.
184 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530185 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530186
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530187 /**
188 * File name for getter method.
189 */
190 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530191
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530192 /**
193 * File name for setter method.
194 */
195 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530196
197 /**
198 * File name for getter method implementation.
199 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530200 private static final String GETTER_METHOD_IMPL_FILE_NAME =
201 "GetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530202
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530203 /**
204 * File name for setter method implementation.
205 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530206 private static final String SETTER_METHOD_IMPL_FILE_NAME =
207 "SetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530208
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530209 /**
210 * File name for attributes.
211 */
212 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswal250a7472016-05-12 13:16:57 +0530213
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530214 /**
215 * File name for to string method.
216 */
217 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswal250a7472016-05-12 13:16:57 +0530218
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530219 /**
220 * File name for hash code method.
221 */
222 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswal250a7472016-05-12 13:16:57 +0530223
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530224 /**
225 * File name for equals method.
226 */
227 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530228
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530229 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530230 * File name for from string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530231 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530232 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530233
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530234 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530235 * File name for from add to list interface method.
236 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530237 private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
238 "addToList";
Bharat saraswal8beac342016-08-04 02:00:03 +0530239
240 /**
241 * File name for from add to list impl method.
242 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530243 private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
244 "addToListImpl";
Bharat saraswal8beac342016-08-04 02:00:03 +0530245
246 /**
247 * File name for from leaf identifier attributes.
248 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530249 private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
250 "leafIdentifierAtr";
Bharat saraswal8beac342016-08-04 02:00:03 +0530251
252 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530253 * File name for is filter content leaf match.
254 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530255 private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
256 "isFilterContentMatchLeafMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530257
258 /**
259 * File name for is filter content leaf-list match.
260 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530261 private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
262 "isFilterContentMatchLeafListMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530263
264 /**
265 * File name for is filter content node match.
266 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530267 private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
268 "isFilterContentMatchNodeMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530269
270 /**
271 * File name for edit content file.
272 */
273 private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
274
275 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530276 * File name for interface java file name suffix.
277 */
278 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswal250a7472016-05-12 13:16:57 +0530279
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530280 /**
281 * File name for builder interface file name suffix.
282 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530283 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
284 BUILDER + INTERFACE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530285
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530286 /**
287 * File name for builder class file name suffix.
288 */
289 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530290
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530291 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530292 * File name for list key class file name suffix.
293 */
294 private static final String KEY_CLASS_FILE_NAME_SUFFIX = KEYS;
295
296 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530297 * if type is binary.
Bharat saraswal94844d62016-10-13 13:28:03 +0530298 */
299 private boolean isBinary;
300
301 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530302 * Current attributes YANG node
303 */
304 private YangNode attrNode;
305
306 /**
307 * Sub tree filtering requires child class imports for type cast.
308 */
309 private final List<JavaQualifiedTypeInfoTranslator> subTreeImports = new ArrayList<>();
310 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530311 * Information about the java files being generated.
312 */
Bharat saraswale50edca2016-08-05 01:58:25 +0530313 private JavaFileInfoTranslator javaFileInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530314
315 /**
316 * Imported class info.
317 */
318 private JavaImportData javaImportData;
319
320 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530321 * The variable which guides the types of temporary files generated using
322 * the temporary generated file types mask.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530323 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530324 private int tempFilesFlagSet;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530325
326 /**
327 * Absolute path where the target java file needs to be generated.
328 */
329 private String absoluteDirPath;
330
331 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530332 * Contains all the interface(s)/class name which will be extended by
333 * generated files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530334 */
335 private JavaExtendsListHolder javaExtendsListHolder;
336
Bharat saraswald14cbe82016-07-14 13:26:18 +0530337 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530338 * Java file handle for interface file.
339 */
340 private File interfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530341
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530342 /**
343 * Java file handle for builder interface file.
344 */
345 private File builderInterfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530346
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530347 /**
348 * Java file handle for builder class file.
349 */
350 private File builderClassJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530351
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530352 /**
353 * Java file handle for impl class file.
354 */
355 private File implClassJavaFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530356
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530357 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530358 * Returns java file handle for key class.
359 *
360 * @return java file handle for key class
361 */
362 public File getKeyClassJavaFileHandle() {
363 return keyClassJavaFileHandle;
364 }
365
366 /**
367 * Sets java file handle for key class.
368 *
369 * @param keyClassJavaFileHandle java file handle for key class
370 */
371 public void setKeyClassJavaFileHandle(File keyClassJavaFileHandle) {
372 this.keyClassJavaFileHandle = keyClassJavaFileHandle;
373 }
374
375 /**
376 * Java file handle for impl class file.
377 */
378 private File keyClassJavaFileHandle;
379
380 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530381 * Temporary file handle for attribute.
382 */
383 private File attributesTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530384
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530385 /**
386 * Temporary file handle for getter of interface.
387 */
388 private File getterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530389
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530390 /**
391 * Temporary file handle for setter of interface.
392 */
393 private File setterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530394
395 /**
396 * Temporary file handle for getter of class.
397 */
398 private File getterImplTempFileHandle;
399
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530400 /**
401 * Temporary file handle for setter of class.
402 */
403 private File setterImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530404
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530405 /**
406 * Temporary file handle for hash code method of class.
407 */
408 private File hashCodeImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530409
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530410 /**
411 * Temporary file handle for equals method of class.
412 */
413 private File equalsImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530414
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530415 /**
416 * Temporary file handle for to string method of class.
417 */
418 private File toStringImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530419
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530420 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530421 * Temporary file handle for from string method of class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530422 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530423 private File fromStringImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530424
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530425 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530426 * Temporary file handle for add to list interface method of class.
427 */
428 private File addToListInterfaceTempFileHandle;
429
430 /**
431 * Temporary file handle for add to list impl method of class.
432 */
433 private File addToListImplTempFileHandle;
434
435 /**
436 * Temporary file handle for leaf id attributes of enum.
437 */
438 private File leafIdAttributeTempFileHandle;
439
440 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530441 * Temporary file handle for is content match method for leaf-list.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530442 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530443 private File getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530444
445 /**
446 * Temporary file handle for is content match method for node.
447 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530448 private File getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530449
450 /**
451 * Temporary file handle for is content match method for leaf.
452 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530453 private File subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530454
455 /**
456 * Temporary file handle for edit content file.
457 */
458 private File editContentTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530459
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530460 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530461 * Leaf count.
462 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530463 private int leafCount;
Bharat saraswal8beac342016-08-04 02:00:03 +0530464
465 /**
466 * If current node is root node.
467 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530468 private boolean rootNode;
Bharat saraswal8beac342016-08-04 02:00:03 +0530469
470 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530471 * Is attribute added.
472 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530473 private boolean isAttributePresent;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530474
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530475 /**
476 * Creates an instance of temp JAVA fragment files.
477 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530478 TempJavaFragmentFiles() {
479 }
480
481 /**
482 * Creates an instance of temporary java code fragment.
483 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530484 * @param fileInfo generated java file information
Bharat saraswalaf413b82016-07-14 15:18:20 +0530485 * @throws IOException when fails to create new file handle
486 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530487 protected TempJavaFragmentFiles(JavaFileInfoTranslator fileInfo)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530488 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530489 javaExtendsListHolder = new JavaExtendsListHolder();
490 javaImportData = new JavaImportData();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530491 javaFileInfo = fileInfo;
492 absoluteDirPath = getAbsolutePackagePath(fileInfo.getBaseCodeGenPath(),
493 fileInfo.getPackageFilePath());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530494 /*
495 * Initialize getter when generation file type matches to interface
496 * mask.
497 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530498 if (javaFlagSet(INTERFACE_MASK)) {
499 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
500 ADD_TO_LIST_INTERFACE_MASK |
501 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530502 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530503 /*
504 * Initialize getter and setter when generation file type matches to
505 * builder interface mask.
506 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530507 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
508 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
509 SETTER_FOR_INTERFACE_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530510 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530511 /*
512 * Initialize getterImpl, setterImpl and attributes when generation file
513 * type matches to builder class mask.
514 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530515 if (javaFlagSet(BUILDER_CLASS_MASK)) {
516 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
517 SETTER_FOR_CLASS_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530518 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530519 /*
520 * Initialize getterImpl, attributes, constructor, hash code, equals and
521 * to strings when generation file type matches to impl class mask.
522 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530523 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
524 addGeneratedTempFile(
525 ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
526 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
527 TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
528 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
529 FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
530 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530531 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530532 /*
533 * Initialize temp files to generate type class.
534 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530535 if (javaFlagSet(GENERATE_TYPE_CLASS)) {
536 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
537 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530538 FROM_STRING_IMPL_MASK);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530539
540 if (getGeneratedJavaFiles() != GENERATE_UNION_CLASS) {
541 addGeneratedTempFile(TO_STRING_IMPL_MASK);
542 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530543 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530544
Vidyashree Ramab3670472016-08-06 15:49:56 +0530545 //Set temporary file handles
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530546 if (tempFlagSet(ATTRIBUTES_MASK)) {
547 attributesTempFileHandle =
548 getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530549 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530550 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
551 getterInterfaceTempFileHandle =
552 getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530553 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530554 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
555 setterInterfaceTempFileHandle =
556 getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530557 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530558 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
559 getterImplTempFileHandle =
560 getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530561 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530562 if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
563 setterImplTempFileHandle =
564 getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530565 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530566 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
567 hashCodeImplTempFileHandle =
568 getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530569 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530570 if (tempFlagSet(EQUALS_IMPL_MASK)) {
571 equalsImplTempFileHandle =
572 getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530573 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530574 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
575 toStringImplTempFileHandle =
576 getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530577 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530578 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
579 fromStringImplTempFileHandle =
580 getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530581 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530582 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
583 addToListInterfaceTempFileHandle =
584 getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530585 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530586 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
587 addToListImplTempFileHandle =
588 getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530589 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530590 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
591 leafIdAttributeTempFileHandle =
592 getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530593 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530594 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
595 subtreeFilteringForLeafTempFileHandle =
596 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530597 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
599 getSubtreeFilteringForListTempFileHandle =
600 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530601 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530602 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
603 getSubtreeFilteringForChildNodeTempFileHandle =
604 getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530605 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530606 if (tempFlagSet(EDIT_CONTENT_MASK)) {
607 editContentTempFileHandle =
608 getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530609 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530610 }
611
612 /**
613 * Adds current node info as and attribute to the parent generated file.
614 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530615 * @param curNode current node
616 * @param isList is list construct
617 * @param config plugin configurations
Bharat saraswalaf413b82016-07-14 15:18:20 +0530618 * @throws IOException IO operation exception
619 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530620 protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
621 boolean isList,
622 YangPluginConfig config)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530623 throws IOException {
624 YangNode parent = getParentNodeInGenCode(curNode);
625 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
627 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530628 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530629 if (parent instanceof YangJavaGroupingTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530630 /*
631 * In case of grouping, there is no need to add the information, it
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530632 * will be taken care in uses.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530633 */
634 return;
635 }
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530636 addCurNodeInfoInParentTempFile(curNode, isList, config, parent);
637 }
638
639 /**
640 * Adds current node info as and attribute to a specified parent generated
641 * file. In case of grouping parent will be referred grouping node or
642 * referred node in grouping.
643 *
644 * @param curNode current node
645 * @param isList is list construct
646 * @param config plugin configurations
647 * @param parent parent node
648 * @throws IOException IO operation exception
649 */
650 protected static void addCurNodeInfoInParentTempFile(
651 YangNode curNode, boolean isList, YangPluginConfig config,
652 YangNode parent)
653 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530654 TempJavaBeanFragmentFiles tempFiles =
655 getBeanFiles((JavaCodeGeneratorInfo) parent);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530656 tempFiles.setAttrNode(curNode);
Bharat saraswalb41904b2016-10-20 19:22:36 +0530657 if (curNode instanceof YangChoice) {
658 JavaQualifiedTypeInfoTranslator info = new
659 JavaQualifiedTypeInfoTranslator();
660 info.setClassInfo(INVOCATION_TARGET_EXCEPTION);
661 info.setPkgInfo(REFLECT_IMPORTS);
662 tempFiles.addToSubTreeImports(info);
663 info = new
664 JavaQualifiedTypeInfoTranslator();
665 info.setClassInfo(METHOD);
666 info.setPkgInfo(REFLECT_IMPORTS);
667 tempFiles.addToSubTreeImports(info);
668 }
669 JavaAttributeInfo attr = getCurNodeAsAttributeInTarget(
670 curNode, parent, isList, tempFiles);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530671 tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530672 }
673
674 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530675 * Creates an attribute info object corresponding to a data model node
676 * and return it.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530677 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530678 * @param curNode current node
679 * @param targetNode target node
680 * @param listNode flag indicating if a node is a list node
681 * @param tempFiles temp java fragment files
682 * @return java attribute info
Bharat saraswalaf413b82016-07-14 15:18:20 +0530683 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530684 public static JavaAttributeInfo
685 getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
686 boolean listNode,
687 TempJavaFragmentFiles tempFiles) {
688 JavaFileInfoTranslator translator =
689 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
690 String curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530691 if (curNodeName == null) {
692 updateJavaFileInfo(curNode, null);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530693 curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530694 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530695 /*
696 * Get the import info corresponding to the attribute for import in
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530697 * generated java files or qualified access.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530698 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530699 JavaQualifiedTypeInfoTranslator typeInfo =
700 getQualifiedTypeInfoOfCurNode(curNode,
701 getCapitalCase(curNodeName));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530702 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530703 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
704 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530705 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530706 JavaImportData parentImportData = tempFiles.getJavaImportData();
707 JavaFileInfoTranslator fileInfo =
708 ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530709
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530710 boolean qualified;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530711 if (tempFiles instanceof TempJavaServiceFragmentFiles &&
712 typeInfo.getClassInfo().contentEquals(SERVICE) ||
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530713 typeInfo.getClassInfo()
714 .contentEquals(getCapitalCase(fileInfo.getJavaName() +
715 SERVICE))) {
716 qualified = true;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530717 } else {
718 String className;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530719 if (tempFiles instanceof TempJavaServiceFragmentFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530720 className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530721 } else {
722 className = getCapitalCase(fileInfo.getJavaName());
723 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530724 qualified = parentImportData.addImportInfo(typeInfo, className,
725 fileInfo.getPackage());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530726 if (!qualified && !(curNode instanceof YangChoice)) {
727 addChildDefaultClassImportForSubTreeFilter(typeInfo.getPkgInfo(),
728 typeInfo.getClassInfo(),
729 tempFiles);
730 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530731 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530732 boolean collectionSet = false;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530733 if (curNode instanceof YangList) {
734 YangList yangList = (YangList) curNode;
Bharat saraswala5c28512016-11-10 21:09:23 +0530735 YangDataStructure ds = getYangDataStructure(
736 yangList.getCompilerAnnotation());
737 if (ds != null) {
738 switch (ds) {
739 case QUEUE:
Vidyashree Ramab3670472016-08-06 15:49:56 +0530740 parentImportData.setQueueToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530741 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530742 break;
Bharat saraswala5c28512016-11-10 21:09:23 +0530743
744 case SET:
Vidyashree Ramab3670472016-08-06 15:49:56 +0530745 parentImportData.setSetToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530746 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530747 break;
Bharat saraswala5c28512016-11-10 21:09:23 +0530748
749 case MAP:
750 parentImportData.setMapToImport(true);
751 collectionSet = true;
752 break;
753
Vidyashree Ramab3670472016-08-06 15:49:56 +0530754 default: {
Bharat saraswala5c28512016-11-10 21:09:23 +0530755 parentImportData.setIfListImported(true);
756 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530757 }
758 }
759 }
760 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530761 if (listNode && !collectionSet) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530762 parentImportData.setIfListImported(true);
763 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530764 if (curNode instanceof YangList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530765 return getAttributeInfoForTheData(typeInfo, curNodeName,
766 null, qualified, listNode,
767 ((YangList) curNode)
768 .getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530769 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530770 return getAttributeInfoForTheData(typeInfo, curNodeName, null,
771 qualified, listNode);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530772 }
773
Bharat saraswal0663aff2016-10-18 23:16:14 +0530774 private static void addChildDefaultClassImportForSubTreeFilter(
775 String pkg, String className, TempJavaFragmentFiles tempFile) {
776 className = DEFAULT_CAPS + getCapitalCase(className);
777 JavaQualifiedTypeInfoTranslator info = new
778 JavaQualifiedTypeInfoTranslator();
779 info.setClassInfo(className);
780 info.setPkgInfo(pkg);
781 tempFile.subTreeImports.add(info);
782 }
783
Bharat saraswalaf413b82016-07-14 15:18:20 +0530784 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530785 * Returns java attribute for leaf.
786 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530787 * @param tempFiles temporary generated file
788 * @param container JAVA leaf info container
789 * @param config plugin configurations
790 * @param leafList flag indicating if it's leaf list
791 * @return java attribute info
Bharat saraswal64e7e232016-07-14 23:33:55 +0530792 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530793 private static JavaAttributeInfo
794 getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
795 JavaLeafInfoContainer container,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530796 YangPluginConfig config, boolean leafList) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530797 if (leafList) {
798 tempFiles.getJavaImportData().setIfListImported(true);
799 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
800 true);
801 }
802 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
803 false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530804 }
805
806 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530807 * Returns java attribute for leaf container.
Bharat saraswal64e7e232016-07-14 23:33:55 +0530808 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530809 * @param tempFiles temporary generated file
810 * @param container JAVA leaf info container
811 * @param config plugin configurations
812 * @param listAttribute flag indicating if list attribute
813 * @return JAVA attribute information
Bharat saraswala5c28512016-11-10 21:09:23 +0530814 * @throws IOException when fails to do IO operations
Bharat saraswal64e7e232016-07-14 23:33:55 +0530815 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530816 private static JavaAttributeInfo
817 getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
818 JavaLeafInfoContainer container,
819 YangPluginConfig config,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530820 boolean listAttribute) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530821 container.setConflictResolveConfig(config.getConflictResolver());
822 container.updateJavaQualifiedInfo();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530823 addImportForLeafInfo(tempFiles, container);
824 JavaAttributeInfo attr = getAttributeInfoForTheData(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530825 container.getJavaQualifiedInfo(),
826 container.getJavaName(config.getConflictResolver()),
827 container.getDataType(),
828 tempFiles.getIsQualifiedAccessOrAddToImportList(
829 container.getJavaQualifiedInfo()), listAttribute);
Bharat saraswalb41904b2016-10-20 19:22:36 +0530830 boolean condition =
831 ((YangSchemaNode) container).getReferredSchema() == null &&
832 container.getDataType().getDataType() == YangDataTypes.BITS;
833 if (condition) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530834 addBitsHandler(attr, container.getDataType(), tempFiles);
835 }
836 return attr;
837 }
838
839 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530840 * Returns list of java attribute for keys of list node.
841 *
842 * @param curNode current list node
843 * @return attribute list
844 * @throws IOException when fails to do IO operations
845 */
846 public static List<JavaAttributeInfo> getListOfAttributesForKey(
847 YangNode curNode) throws IOException {
848 List<String> keys = ((YangList) curNode).getKeyList();
849
850 JavaFileInfoTranslator fileInfo =
851 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
852 YangLeavesHolder holder = (YangLeavesHolder) curNode;
853 Iterator<String> keyIt = keys.iterator();
854 Iterator<YangLeaf> leafIt;
855 String key;
856 YangJavaLeafTranslator leaf;
857 TempJavaBeanFragmentFiles beanFile = getBeanFiles(curNode);
858 List<JavaAttributeInfo> attrs = new ArrayList<>();
859 while (keyIt.hasNext()) {
860 key = keyIt.next();
861 leafIt = holder.getListOfLeaf().iterator();
862 while (leafIt.hasNext()) {
863 leaf = (YangJavaLeafTranslator) leafIt.next();
864 if (key.equals(leaf.getName())) {
865 attrs.add(getAttributeOfLeafInfoContainer(
866 beanFile, leaf,
867 fileInfo.getPluginConfig(), false));
868 }
869 }
870 }
871 return attrs;
872 }
873
874 /**
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530875 * Adds bits handler attribute for bits to string method.
876 *
877 * @param attr attribute
878 * @param type type
879 * @param tempFiles temp fragment file
880 */
881 static void addBitsHandler(JavaAttributeInfo attr, YangType type,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530882 TempJavaFragmentFiles tempFiles)
883 throws IOException {
884 generateBitsFile(attr, type, tempFiles.getJavaFileInfo(), tempFiles);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530885 }
886
887 /**
888 * Adds attribute types import to leaf info container's parent.
889 *
890 * @param tempFiles temp java file
891 * @param container leaf info container
892 */
893 private static void addImportForLeafInfo(TempJavaFragmentFiles tempFiles,
894 JavaLeafInfoContainer container) {
895 String containedInCls = getCapitalCase(tempFiles.getJavaFileInfo()
896 .getJavaName());
897 String containedInPkg = tempFiles.getJavaFileInfo().getPackage();
Bharat saraswal94844d62016-10-13 13:28:03 +0530898 JavaQualifiedTypeInfoTranslator info;
899 if (container.getDataType().getDataType() == YangDataTypes.BINARY) {
900 tempFiles.setBinary(true);
901 } else if (container.getDataType().getDataType() == YangDataTypes.BITS) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530902 //Add bitset import for type and leaf value flags.
903 info = new JavaQualifiedTypeInfoTranslator();
904 info.setClassInfo(BIT_SET);
905 info.setPkgInfo(JAVA_UTIL_PKG);
906 tempFiles.getJavaImportData().addImportInfo(info, containedInCls,
907 containedInPkg);
908 }
909 tempFiles.getJavaImportData().addImportInfo(
910 (JavaQualifiedTypeInfoTranslator) container
911 .getJavaQualifiedInfo(), containedInCls, containedInPkg);
912
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530913 }
914
915 /**
916 * Sets absolute path where the file needs to be generated.
917 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530918 * @param absoluteDirPath absolute path where the file needs to be
919 * generated
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530920 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530921 protected void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530922 this.absoluteDirPath = absoluteDirPath;
923 }
924
925 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530926 * Returns the generated java file information.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530927 *
928 * @return generated java file information
929 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530930 protected JavaFileInfoTranslator getJavaFileInfo() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530931 return javaFileInfo;
932 }
933
934 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530935 * Sets the generated java file information.
936 *
937 * @param javaFileInfo generated java file information
938 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530939 protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530940 this.javaFileInfo = javaFileInfo;
941 }
942
943 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530944 * Returns the flag-set for generated temp files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530945 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530946 * @return flag-set
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530947 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530948 protected int getGeneratedTempFiles() {
949 return tempFilesFlagSet;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530950 }
951
952 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530953 * Adds to the flag-set for generated temp files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530954 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530955 * @param flags generated temp files flag-set
Bharat saraswalaf413b82016-07-14 15:18:20 +0530956 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530957 protected void addGeneratedTempFile(int flags) {
958 tempFilesFlagSet |= flags;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530959 }
960
961 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530962 * Returns the generated Java files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530963 *
964 * @return generated Java files
965 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530966 protected int getGeneratedJavaFiles() {
967 return javaFileInfo.getGeneratedFileTypes();
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530968 }
969
970 /**
971 * Retrieves the mapped Java class name.
972 *
973 * @return mapped Java class name
974 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530975 protected String getGeneratedJavaClassName() {
976 return getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530977 }
978
979 /**
980 * Retrieves the import data for the generated Java file.
981 *
982 * @return import data for the generated Java file
983 */
984 public JavaImportData getJavaImportData() {
985 return javaImportData;
986 }
987
988 /**
989 * Sets import data for the generated Java file.
990 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530991 * @param data import data for the generated Java file
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530992 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530993 protected void setJavaImportData(JavaImportData data) {
994 javaImportData = data;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530995 }
996
997 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530998 * Retrieves the status of any attributes added.
999 *
1000 * @return status of any attributes added
1001 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301002 protected boolean isAttributePresent() {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301003 return isAttributePresent;
1004 }
1005
1006 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301007 * Returns getter methods's temporary file handle.
1008 *
1009 * @return temporary file handle
1010 */
1011 public File getGetterInterfaceTempFileHandle() {
1012 return getterInterfaceTempFileHandle;
1013 }
1014
1015 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301016 * Returns setter method's temporary file handle.
1017 *
1018 * @return temporary file handle
1019 */
1020 public File getSetterInterfaceTempFileHandle() {
1021 return setterInterfaceTempFileHandle;
1022 }
1023
1024 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301025 * Returns setter method's impl's temporary file handle.
1026 *
1027 * @return temporary file handle
1028 */
1029 public File getSetterImplTempFileHandle() {
1030 return setterImplTempFileHandle;
1031 }
1032
1033 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301034 * Returns from string method's temporary file handle.
1035 *
1036 * @return from string method's temporary file handle
1037 */
1038 public File getFromStringImplTempFileHandle() {
1039 return fromStringImplTempFileHandle;
1040 }
1041
1042 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301043 * Returns attribute's temporary file handle.
1044 *
1045 * @return temporary file handle
1046 */
1047 public File getAttributesTempFileHandle() {
1048 return attributesTempFileHandle;
1049 }
1050
1051 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301052 * Returns getter method's impl's temporary file handle.
1053 *
1054 * @return temporary file handle
1055 */
1056 public File getGetterImplTempFileHandle() {
1057 return getterImplTempFileHandle;
1058 }
1059
1060 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301061 * Returns hash code method's temporary file handle.
1062 *
1063 * @return temporary file handle
1064 */
1065 public File getHashCodeImplTempFileHandle() {
1066 return hashCodeImplTempFileHandle;
1067 }
1068
1069 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301070 * Returns equals method's temporary file handle.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301071 *
1072 * @return temporary file handle
1073 */
1074 public File getEqualsImplTempFileHandle() {
1075 return equalsImplTempFileHandle;
1076 }
1077
1078 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301079 * Returns to string method's temporary file handle.
1080 *
1081 * @return temporary file handle
1082 */
1083 public File getToStringImplTempFileHandle() {
1084 return toStringImplTempFileHandle;
1085 }
1086
1087 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301088 * Returns java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301089 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301090 * @return java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301091 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301092 public JavaExtendsListHolder getJavaExtendsListHolder() {
1093 return javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301094 }
1095
1096 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301097 * Sets java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301098 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301099 * @param holder java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301100 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301101 protected void setJavaExtendsListHolder(
1102 JavaExtendsListHolder holder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301103 javaExtendsListHolder = holder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301104 }
1105
1106 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301107 * Adds is filter content match for leaf.
1108 *
1109 * @param attr java attribute
1110 * @throws IOException when fails to do IO operations
1111 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301112 private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301113 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301114 appendToFile(subtreeFilteringForLeafTempFileHandle,
1115 getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
1116 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301117 }
1118
1119 /**
1120 * Adds is filter content match for leaf-list.
1121 *
1122 * @param attr java attribute
1123 * @throws IOException when fails to do IO operations
1124 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301125 private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301126 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301127 appendToFile(getSubtreeFilteringForListTempFileHandle,
Bharat saraswal1edde622016-09-06 10:18:04 +05301128 getSubtreeFilteringForLeafList(attr) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301129 }
1130
1131 /**
1132 * Adds is filter content match for nodes.
1133 *
1134 * @param attr java attribute
1135 * @throws IOException when fails to do IO operations
1136 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301137 private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301138 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301139 appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301140 getSubtreeFilteringForNode(attr, attrNode) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301141 }
1142
1143 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301144 * Adds attribute for class.
1145 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301146 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301147 * @throws IOException when fails to append to temporary file
1148 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301149 private void addAttribute(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301150 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301151 appendToFile(attributesTempFileHandle, parseAttribute(attr));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301152 }
1153
1154 /**
1155 * Adds getter for interface.
1156 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301157 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301158 * @throws IOException when fails to append to temporary file
1159 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301160 private void addGetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301161 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301162 appendToFile(getterInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301163 getGetterString(attr, getGeneratedJavaFiles()) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301164 NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301165 }
1166
1167 /**
1168 * Adds setter for interface.
1169 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301170 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301171 * @throws IOException when fails to append to temporary file
1172 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301173 private void addSetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301174 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301175 appendToFile(setterInterfaceTempFileHandle,
1176 getSetterString(attr, getGeneratedJavaClassName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +05301177 getGeneratedJavaFiles()) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301178 }
1179
1180 /**
1181 * Adds setter's implementation for class.
1182 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301183 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301184 * @throws IOException when fails to append to temporary file
1185 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301186 private void addSetterImpl(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301187 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301188 String setter = getSetterForClass(attr, getGeneratedJavaClassName(),
1189 getGeneratedJavaFiles());
Bharat saraswalb41904b2016-10-20 19:22:36 +05301190 String javadoc = getOverRideString();
1191 if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
1192 javadoc = getJavaDoc(SETTER_METHOD, attr.getAttributeName(),
1193 false, null);
1194 }
1195 appendToFile(setterImplTempFileHandle, javadoc + setter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301196 }
1197
1198 /**
1199 * Adds getter method's impl for class.
1200 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301201 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301202 * @throws IOException when fails to append to temporary file
1203 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301204 protected void addGetterImpl(JavaAttributeInfo attr)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301205 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301206 String getter = getGetterForClass(attr, getGeneratedJavaFiles());
Bharat saraswalb41904b2016-10-20 19:22:36 +05301207 String javadoc = getOverRideString();
Bharat saraswala5c28512016-11-10 21:09:23 +05301208 YangDataStructure ds = getYangDataStructure(
1209 attr.getCompilerAnnotation());
1210 String annotation = null;
1211 if (ds != null) {
1212 annotation = ds.name();
1213 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301214 if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
1215 javadoc = getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
Bharat saraswala5c28512016-11-10 21:09:23 +05301216 false, annotation);
Bharat saraswalb41904b2016-10-20 19:22:36 +05301217 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301218 if (javaFlagSet(BUILDER_CLASS_MASK)) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05301219 appendToFile(getterImplTempFileHandle, javadoc + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301220 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301221 appendToFile(getterImplTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301222 getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
Bharat saraswala5c28512016-11-10 21:09:23 +05301223 false, annotation) + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301224 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301225 }
1226
1227 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301228 * Adds add to list interface method.
1229 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301230 * @param attr attribute
Bharat saraswal8beac342016-08-04 02:00:03 +05301231 * @throws IOException when fails to do IO operations
1232 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301233 private void addAddToListInterface(JavaAttributeInfo attr)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301234 throws IOException {
Bharat saraswala5c28512016-11-10 21:09:23 +05301235 YangDataStructure ds = getYangDataStructure(
1236 attr.getCompilerAnnotation());
1237 String annotation = null;
1238 if (ds != null) {
1239 annotation = ds.name();
1240 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301241 appendToFile(addToListInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301242 getJavaDoc(ADD_TO_LIST, attr.getAttributeName(), false,
Bharat saraswala5c28512016-11-10 21:09:23 +05301243 annotation) + getAddToListMethodInterface(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301244 attr, getGeneratedJavaClassName()) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301245 }
1246
1247 /**
1248 * Adds add to list interface method.
1249 *
1250 * @param attr attribute
1251 * @throws IOException when fails to do IO operations
1252 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301253 private void addAddToListImpl(JavaAttributeInfo attr)
1254 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301255 appendToFile(addToListImplTempFileHandle,
Bharat saraswal94844d62016-10-13 13:28:03 +05301256 getAddToListMethodImpl(attr, getGeneratedJavaClassName()
1257 ) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301258 }
1259
1260 /**
1261 * Adds leaf identifier enum attributes.
1262 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301263 * @param attr attribute
1264 * @param value value
Bharat saraswal8beac342016-08-04 02:00:03 +05301265 * @throws IOException when fails to do IO operations
1266 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301267 private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
Bharat saraswal8beac342016-08-04 02:00:03 +05301268 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301269 appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
1270 generateEnumAttributeString(attr.getAttributeName(), value));
Bharat saraswal8beac342016-08-04 02:00:03 +05301271 }
1272
1273 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301274 * Adds build method for interface.
1275 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301276 * @return build method for interface
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301277 * @throws IOException when fails to append to temporary file
1278 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301279 protected String addBuildMethodForInterface()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301280 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301281 return parseBuilderInterfaceBuildMethodString(
1282 getGeneratedJavaClassName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301283 }
1284
1285 /**
1286 * Adds build method's implementation for class.
1287 *
1288 * @return build method implementation for class
1289 * @throws IOException when fails to append to temporary file
1290 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301291 protected String addBuildMethodImpl()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301292 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301293 return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301294 }
1295
1296 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301297 * Adds default constructor for class.
1298 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301299 * @param modifier modifier for constructor
1300 * @param toAppend string which need to be appended with the class name
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301301 * @param suffix is value need to be appended as suffix
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301302 * @return default constructor for class
1303 * @throws IOException when fails to append to file
1304 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301305 protected String addDefaultConstructor(String modifier, String toAppend,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301306 boolean suffix)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301307 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301308 StringBuilder name = new StringBuilder();
1309 name.append(getGeneratedJavaClassName());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301310 if (rootNode && !toAppend.equals(BUILDER)) {
1311 name.append(OP_PARAM);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301312 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301313 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301314 if (suffix) {
1315 name.append(toAppend);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301316 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301317 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301318 StringBuilder appended = new StringBuilder();
Bharat saraswal8beac342016-08-04 02:00:03 +05301319 if (toAppend.equals(DEFAULT)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301320 appended.append(getCapitalCase(toAppend));
Bharat saraswal8beac342016-08-04 02:00:03 +05301321 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301322 appended.append(toAppend);
Bharat saraswal8beac342016-08-04 02:00:03 +05301323 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301324 return NEW_LINE + getDefaultConstructorString(appended.append(
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301325 name).toString(), modifier);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301326 // TODO getDefaultConstructorString to handle new line.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301327 }
1328
1329 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301330 * Adds hash code method for class.
1331 *
1332 * @param attr attribute info
1333 * @throws IOException when fails to append to temporary file
1334 */
1335 private void addHashCodeMethod(JavaAttributeInfo attr)
1336 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301337 appendToFile(hashCodeImplTempFileHandle,
1338 getHashCodeMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301339 }
1340
1341 /**
1342 * Adds equals method for class.
1343 *
1344 * @param attr attribute info
1345 * @throws IOException when fails to append to temporary file
1346 */
1347 private void addEqualsMethod(JavaAttributeInfo attr)
1348 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301349 appendToFile(equalsImplTempFileHandle,
1350 getEqualsMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301351 }
1352
1353 /**
1354 * Adds ToString method for class.
1355 *
1356 * @param attr attribute info
1357 * @throws IOException when fails to append to temporary file
1358 */
1359 private void addToStringMethod(JavaAttributeInfo attr)
1360 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301361 appendToFile(toStringImplTempFileHandle,
1362 getToStringMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301363 }
1364
1365 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301366 * Adds from string method for union class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301367 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301368 * @param attr type attribute info
1369 * @param fromStringAttr from string attribute info
Bharat saraswal250a7472016-05-12 13:16:57 +05301370 * @throws IOException when fails to append to temporary file
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301371 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301372 void addFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301373 JavaAttributeInfo fromStringAttr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301374 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301375 appendToFile(fromStringImplTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301376 getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301377 }
1378
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301379 /**
1380 * Returns a temporary file handle for the specific file type.
1381 *
1382 * @param fileName file name
1383 * @return temporary file handle
1384 * @throws IOException when fails to create new file handle
1385 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301386 protected File getTemporaryFileHandle(String fileName)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301387 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301388 String path = getTempDirPath(absoluteDirPath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301389 File dir = new File(path);
Bharat saraswal8beac342016-08-04 02:00:03 +05301390 boolean isCreated;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301391 if (!dir.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301392 isCreated = dir.mkdirs();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301393 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301394 throw new IOException("failed to create temporary directory " +
1395 "for " + fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301396 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301397 }
1398 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1399 if (!file.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301400 isCreated = file.createNewFile();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301401 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301402 throw new IOException("failed to create temporary file for " +
1403 fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301404 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301405 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301406 throw new IOException(fileName + " is reused due to YANG naming. " +
1407 "probably your previous build " +
1408 "would have failed");
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301409 }
1410 return file;
1411 }
1412
1413 /**
1414 * Returns a temporary file handle for the specific file type.
1415 *
1416 * @param fileName file name
1417 * @return temporary file handle
1418 * @throws IOException when fails to create new file handle
1419 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301420 public File getJavaFileHandle(String fileName)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301421 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301422 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
1423 javaFileInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301424 }
1425
1426 /**
1427 * Returns data from the temporary files.
1428 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301429 * @param file temporary file handle
Bharat saraswald14cbe82016-07-14 13:26:18 +05301430 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301431 * @return stored data from temporary files
1432 * @throws IOException when failed to get data from the given file
1433 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301434 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301435 throws IOException {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301436 String path = getTempDirPath(absolutePath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301437 if (new File(path + file.getName()).exists()) {
1438 return readAppendFile(path + file.getName(), EMPTY_STRING);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301439 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301440 throw new IOException("Unable to get data from the given " +
1441 file.getName() + " file for " +
1442 getGeneratedJavaClassName() + PERIOD);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301443 }
1444
1445 /**
1446 * Returns temporary directory path.
1447 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301448 * @param path absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301449 * @return directory path
1450 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301451 private String getTempDirPath(String path) {
1452 return getPackageDirPathFromJavaJPackage(path) + SLASH +
1453 getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301454 }
1455
1456 /**
1457 * Parses attribute to get the attribute string.
1458 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301459 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301460 * @return attribute string
1461 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301462 protected String parseAttribute(JavaAttributeInfo attr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301463 /*
1464 * TODO: check if this utility needs to be called or move to the caller
1465 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301466 String attrName = attr.getAttributeName();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301467 String attrAccessType = PRIVATE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301468 if ((getGeneratedJavaFiles() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301469 attrAccessType = PROTECTED;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301470 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301471 String pkg = null;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301472 if (attr.isQualifiedName()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301473 pkg = attr.getImportInfo().getPkgInfo();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301474 }
Bharat saraswala5c28512016-11-10 21:09:23 +05301475 String attrType = attr.getImportInfo().getClassInfo();
1476 if (attr.getAttributeType() != null &&
1477 attr.getAttributeType().getDataType() == IDENTITYREF) {
1478 attrType = CLASS_STRING + DIAMOND_OPEN_BRACKET +
1479 QUESTION_MARK + SPACE + EXTEND + SPACE +
1480 attrType + DIAMOND_CLOSE_BRACKET;
1481 }
1482
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301483 return getJavaAttributeDefinition(
Bharat saraswala5c28512016-11-10 21:09:23 +05301484 pkg, attrType, attrName, attr.isListAttr(), attrAccessType,
1485 attr.getCompilerAnnotation());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301486 }
1487
1488 /**
1489 * Appends content to temporary file.
1490 *
1491 * @param file temporary file
1492 * @param data data to be appended
1493 * @throws IOException when fails to append to file
1494 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301495 protected void appendToFile(File file, String data)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301496 throws IOException {
1497 try {
1498 insertDataIntoJavaFile(file, data);
1499 } catch (IOException ex) {
1500 throw new IOException("failed to write in temp file.");
1501 }
1502 }
1503
1504 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301505 * Adds parent's info to current node import list.
1506 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301507 * @param curNode current node
1508 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301509 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301510 protected void addParentInfoInCurNodeTempFile(YangNode curNode,
1511 YangPluginConfig config) {
1512 JavaQualifiedTypeInfoTranslator caseImportInfo =
1513 new JavaQualifiedTypeInfoTranslator();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301514 YangNode parent = getParentNodeInGenCode(curNode);
Bharat saraswale50edca2016-08-05 01:58:25 +05301515 if (curNode instanceof YangCase && parent instanceof YangAugment) {
1516 return;
1517 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301518 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301519 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301520 }
1521 if (!(curNode instanceof JavaFileInfoContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301522 throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301523 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301524 caseImportInfo.setClassInfo(
1525 getCapitalCase(getCamelCase(parent.getName(),
1526 config.getConflictResolver())));
1527 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
1528 .getPackage());
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301529
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301530 JavaFileInfoTranslator fileInfo =
1531 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301532
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301533 getBeanFiles(curNode).getJavaImportData().addImportInfo(
1534 caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
1535 fileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301536 }
1537
1538 /**
1539 * Adds leaf attributes in generated files.
1540 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301541 * @param entry JAVA leaf info container
1542 * @param config plugin config
1543 * @param curNode current node
1544 * @param leafList flag indicating whether leaf container is leafList
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301545 * @throws IOException IO operation fail
1546 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301547 private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
1548 YangPluginConfig config,
1549 YangNode curNode,
1550 boolean leafList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301551 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301552 if (entry != null) {
1553 if (curNode instanceof RpcNotificationContainer) {
1554 TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
1555 addJavaSnippetInfoToApplicableTempFiles(
1556 getJavaAttributeOfLeaf(tempFiles, entry,
1557 config, leafList), config);
1558 } else {
1559 addJavaSnippetInfoToApplicableTempFiles(
1560 getJavaAttributeOfLeaf(this, entry,
1561 config, leafList), config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301562 }
1563 }
1564 }
1565
1566 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301567 * Adds all the leaves in the current data model node as part of the
1568 * generated temporary file.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301569 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301570 * @param curNode current node
1571 * @param config plugin config
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301572 * @throws IOException IO operation fail
1573 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301574 protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
1575 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301576 throws IOException {
1577 if (!(curNode instanceof YangLeavesHolder)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301578 throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
1579 curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301580 }
1581 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301582
1583 for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
1584 addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
1585 curNode, false);
1586 }
1587
1588 for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
1589 addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
1590 curNode, true);
1591 }
1592 }
1593
1594 /**
1595 * Adds operation type to temp files.
1596 *
1597 * @param curNode current YANG node
1598 * @param config YANG plugin config
1599 * @throws IOException IO exception
1600 */
1601 protected void addOperationTypeToTempFiles(YangNode curNode,
1602 YangPluginConfig config)
1603 throws IOException {
1604 JavaQualifiedTypeInfoTranslator typeInfo =
1605 new JavaQualifiedTypeInfoTranslator();
1606 typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
Bharat saraswal94844d62016-10-13 13:28:03 +05301607 JavaFileInfo curInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1608 JavaFileInfo info;
1609 if (curNode instanceof RpcNotificationContainer) {
1610 info = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1611 } else {
1612 info = ((JavaFileInfoContainer) getModuleNode(curNode))
1613 .getJavaFileInfo();
1614 }
1615
1616 typeInfo.setPkgInfo(info.getPackage().toLowerCase() + PERIOD +
1617 getCapitalCase(info.getJavaName()));
1618 String curNodeName = getCapitalCase(curInfo.getJavaName());
1619 if (!(curNode instanceof RpcNotificationContainer)) {
1620 javaImportData.addImportInfo(typeInfo, curNodeName, curInfo
1621 .getPackage());
1622 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301623 JavaAttributeInfo attributeInfo =
Bharat saraswal94844d62016-10-13 13:28:03 +05301624 getAttributeInfoForTheData(typeInfo, YANG + curNodeName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301625 OPERATION_TYPE_ATTRIBUTE, null, false, false);
1626 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301627 }
1628
Bharat saraswal94844d62016-10-13 13:28:03 +05301629 private YangNode getModuleNode(YangNode curNode) {
1630 YangNode tempNode = curNode.getParent();
1631 while (!(tempNode instanceof RpcNotificationContainer)) {
1632 tempNode = tempNode.getParent();
1633 }
1634 return tempNode;
1635 }
1636
1637 /**
1638 * Adds value leaf flag to temp files.
1639 *
1640 * @param config YANG plugin config
1641 * @param node YANG node
1642 * @throws IOException IO exception
1643 */
1644 protected void addValueLeafFlag(YangPluginConfig config, YangNode node)
1645 throws IOException {
1646 JavaFileInfo info = ((JavaFileInfoContainer) node).getJavaFileInfo();
1647 JavaQualifiedTypeInfoTranslator typeInfo =
1648 new JavaQualifiedTypeInfoTranslator();
1649 typeInfo.setClassInfo(BIT_SET);
1650 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
Bharat saraswalb41904b2016-10-20 19:22:36 +05301651 getJavaImportData().addImportInfo(typeInfo, info.getJavaName(),
1652 info.getPackage());
Bharat saraswal94844d62016-10-13 13:28:03 +05301653 JavaAttributeInfo attributeInfo =
1654 getAttributeInfoForTheData(typeInfo, VALUE_LEAF, null, false, false);
1655 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1656 }
1657
1658 /**
1659 * Adds value leaf flag to temp files.
1660 *
1661 * @param config YANG plugin config
1662 * @throws IOException IO exception
1663 */
1664 protected void addSelectLeafFlag(YangPluginConfig config)
1665 throws IOException {
1666 JavaQualifiedTypeInfoTranslator typeInfo =
1667 new JavaQualifiedTypeInfoTranslator();
1668 typeInfo.setClassInfo(BIT_SET);
1669 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
1670 JavaAttributeInfo attributeInfo =
1671 getAttributeInfoForTheData(typeInfo, SELECT_LEAF, null, false, false);
1672 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1673 }
1674
1675 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +05301676 * Adds sub tree filtering to temp files.
1677 *
1678 * @param config YANG plugin config
1679 * @throws IOException IO exception
1680 */
1681 protected void addIsSubTreeFilteredFlag(YangPluginConfig config)
1682 throws IOException {
1683 JavaQualifiedTypeInfoTranslator typeInfo =
1684 new JavaQualifiedTypeInfoTranslator();
1685 typeInfo.setClassInfo(BOOLEAN_DATA_TYPE);
1686 typeInfo.setPkgInfo(null);
1687 JavaAttributeInfo attributeInfo =
1688 getAttributeInfoForTheData(typeInfo, SUBTREE_FILTERED, null, false, false);
1689 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1690 }
1691
1692 /**
Bharat saraswal94844d62016-10-13 13:28:03 +05301693 * Adds value leaf flag to temp files.
1694 *
1695 * @param config YANG plugin config
1696 * @throws IOException IO exception
1697 */
1698 protected void addYangAugmentedMap(YangPluginConfig config)
1699 throws IOException {
1700 JavaQualifiedTypeInfoTranslator typeInfo =
1701 new JavaQualifiedTypeInfoTranslator();
1702 typeInfo.setClassInfo(AUGMENT_MAP_TYPE);
1703 //Fix for add yangAugmentedInfo in equals/hashcode/and to string method.
1704 typeInfo.setPkgInfo(null);
1705 JavaAttributeInfo attributeInfo =
1706 getAttributeInfoForTheData(typeInfo, YANG_AUGMENTED_INFO_MAP,
1707 null, false, false);
1708 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1709 }
1710
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301711 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301712 * Adds the new attribute info to the target generated temporary files.
1713 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301714 * @param newAttrInfo new attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301715 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301716 * @throws IOException IO operation fail
1717 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301718 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
1719 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301720 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301721 isAttributePresent = true;
Bharat saraswal94844d62016-10-13 13:28:03 +05301722 String attrName = newAttrInfo.getAttributeName();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301723 //Boolean flag for operation type attr info generation control.
Bharat saraswal94844d62016-10-13 13:28:03 +05301724 boolean required = !attrName.equals(VALUE_LEAF) &&
1725 !attrName.equals(SELECT_LEAF) &&
1726 !attrName.equals(YANG_AUGMENTED_INFO_MAP);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301727 //Boolean flag for subtree for nodes info generation control.
1728 boolean subTreeForChild =
1729 tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
1730 newAttrInfo.getAttributeType() == null &&
1731 !attrName.contains(OPERATION_TYPE_ATTRIBUTE) &&
1732 required && !attrName.equals(SUBTREE_FILTERED);
1733 ;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301734 if (tempFlagSet(ATTRIBUTES_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301735 addAttribute(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301736 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301737 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK) &&
1738 !attrName.equals(SUBTREE_FILTERED)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301739 addGetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301740 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301741 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK) && required &&
1742 !attrName.equals(SUBTREE_FILTERED)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301743 addSetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301744 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301745 if (tempFlagSet(SETTER_FOR_CLASS_MASK) && required) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301746 addSetterImpl(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301747 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301748 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301749 addHashCodeMethod(newAttrInfo);
1750 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301751 if (tempFlagSet(EQUALS_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301752 addEqualsMethod(newAttrInfo);
1753 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301754 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301755 addToStringMethod(newAttrInfo);
1756 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301757 if (tempFlagSet(EDIT_CONTENT_MASK)) {
Bharat saraswale50edca2016-08-05 01:58:25 +05301758 //TODO: add implementation for edit content match.
1759 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301760 boolean listAttr = newAttrInfo.isListAttr();
1761 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301762 addAddToListImpl(newAttrInfo);
1763 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301764 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301765 addAddToListInterface(newAttrInfo);
Bharat saraswal8beac342016-08-04 02:00:03 +05301766 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301767 YangType attrType = newAttrInfo.getAttributeType();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301768 if (subTreeForChild) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301769 addSubtreeFilteringForChildNode(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301770 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301771 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
1772 !listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301773 addSubTreeFilteringForLeaf(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301774 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301775 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
1776 listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301777 addSubtreeFilteringForLeafList(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301778 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301779 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
1780 !listAttr && attrType != null) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301781 leafCount++;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301782 addLeafIdAttributes(newAttrInfo, leafCount);
Bharat saraswal8beac342016-08-04 02:00:03 +05301783 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301784 if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
1785 !newAttrInfo.isShortConflict()) {
1786 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301787 addGetterImpl(newAttrInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301788 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301789 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1790 JavaQualifiedTypeInfoTranslator typeInfo =
1791 getQualifiedInfoOfFromString(newAttrInfo,
1792 pluginConfig.getConflictResolver());
Bharat saraswal250a7472016-05-12 13:16:57 +05301793 /*
1794 * Create a new java attribute info with qualified information of
1795 * wrapper classes.
1796 */
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301797 JavaAttributeInfo fromStringAttributeInfo =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301798 getAttributeInfoForTheData(
1799 typeInfo, newAttrInfo.getAttributeName(),
1800 attrType, getIsQualifiedAccessOrAddToImportList(
1801 typeInfo), false);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301802 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301803 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301804 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301805 }
1806
1807 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301808 * Returns JAVA class name for non implementation classes.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301809 *
1810 * @param suffix for the class name based on the file type
1811 * @return java class name
1812 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301813 protected String getJavaClassName(String suffix) {
1814 return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301815 }
1816
1817 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301818 * Returns class name for implementation classes.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301819 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301820 * @param node YANG node
Bharat saraswald14cbe82016-07-14 13:26:18 +05301821 * @return java class name
1822 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301823 private String getImplClassName(YangNode node) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301824 if (node instanceof RpcNotificationContainer) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301825 return getGeneratedJavaClassName() + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +05301826 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301827 return DEFAULT_CAPS + getGeneratedJavaClassName();
Bharat saraswald14cbe82016-07-14 13:26:18 +05301828 }
1829
1830 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301831 * Returns the directory path.
1832 *
1833 * @return directory path
1834 */
1835 private String getDirPath() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301836 return javaFileInfo.getPackageFilePath();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301837 }
1838
1839 /**
1840 * Constructs java code exit.
1841 *
1842 * @param fileType generated file type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301843 * @param curNode current YANG node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301844 * @throws IOException when fails to generate java files
1845 */
1846 public void generateJavaFile(int fileType, YangNode curNode)
1847 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301848 List<String> imports =
1849 getBeanFiles(curNode).getJavaImportData().getImports();
Bharat saraswal8beac342016-08-04 02:00:03 +05301850 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301851 addImportsForAugmentableClass(imports, true, true, curNode);
Bharat saraswal8beac342016-08-04 02:00:03 +05301852 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301853 createPackage(curNode);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301854
1855 //Generate java code.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301856 if ((fileType & INTERFACE_MASK) != 0 ||
1857 (fileType & BUILDER_INTERFACE_MASK) != 0) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301858
1859 //Create interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301860 interfaceJavaFileHandle =
1861 getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
1862 interfaceJavaFileHandle =
1863 generateInterfaceFile(interfaceJavaFileHandle, imports,
1864 curNode, isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301865
Bharat saraswal94844d62016-10-13 13:28:03 +05301866 //Create builder interface file.
1867 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1868 builderInterfaceJavaFileHandle =
1869 getJavaFileHandle(getJavaClassName(
1870 BUILDER_INTERFACE_FILE_NAME_SUFFIX));
1871 builderInterfaceJavaFileHandle =
1872 generateBuilderInterfaceFile(
1873 builderInterfaceJavaFileHandle,
1874 curNode, isAttributePresent);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301875 /*
1876 * Append builder interface file to interface file and
1877 * close it.
1878 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301879 mergeJavaFiles(builderInterfaceJavaFileHandle,
1880 interfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301881 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301882
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301883 insertDataIntoJavaFile(interfaceJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301884 validateLineLength(interfaceJavaFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301885 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301886 addImportsForAugmentableClass(imports, false, true, curNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301887 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301888 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301889
Bharat saraswal0663aff2016-10-18 23:16:14 +05301890 if (curNode.isOpTypeReq()) {
janani b110f7f72016-10-27 19:04:18 +05301891 if (curNode instanceof YangAugmentableNode) {
1892 addImportsForSubTreeFilterAug(imports);
1893 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05301894 addSubTreeImportStrings(imports);
Bharat saraswala5c28512016-11-10 21:09:23 +05301895 } else {
1896 removeCaseParentImport(curNode, imports);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301897 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301898
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301899 if ((fileType & BUILDER_CLASS_MASK) != 0 ||
1900 (fileType & DEFAULT_CLASS_MASK) != 0) {
1901 if (isAttributePresent) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301902 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswal8beac342016-08-04 02:00:03 +05301903 addArrayListImport(imports);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301904 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301905
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301906 addBitsAndBase64Imports(curNode, imports);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301907 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301908 addImportsForAugmentableClass(imports, true, false, curNode);
Bharat saraswal94844d62016-10-13 13:28:03 +05301909 if (curNode.isOpTypeReq()) {
1910 addInvocationExceptionImport(imports);
1911 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301912 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301913 sortImports(imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301914
1915 //Create impl class file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301916 implClassJavaFileHandle =
1917 getJavaFileHandle(getImplClassName(curNode));
1918 implClassJavaFileHandle =
1919 generateDefaultClassFile(implClassJavaFileHandle,
1920 curNode, isAttributePresent,
1921 imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301922
1923 //Create builder class file.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301924 if ((fileType & BUILDER_CLASS_MASK) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301925 builderClassJavaFileHandle =
1926 getJavaFileHandle(getJavaClassName(
1927 BUILDER_CLASS_FILE_NAME_SUFFIX));
1928 builderClassJavaFileHandle =
1929 generateBuilderClassFile(builderClassJavaFileHandle,
1930 curNode,
1931 isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301932
1933 //Append impl class to builder class and close it.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301934 mergeJavaFiles(builderClassJavaFileHandle,
1935 implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301936 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301937 insertDataIntoJavaFile(implClassJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301938 validateLineLength(implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301939 }
Bharat saraswala5c28512016-11-10 21:09:23 +05301940
1941 if (curNode instanceof YangList) {
1942 YangList list = (YangList) curNode;
1943 YangDataStructure data = getYangDataStructure(
1944 list.getCompilerAnnotation());
1945 if (list.isConfig() && data == YangDataStructure.MAP) {
1946 keyClassJavaFileHandle =
1947 getJavaFileHandle(getJavaClassName(
1948 KEY_CLASS_FILE_NAME_SUFFIX));
1949 keyClassJavaFileHandle =
1950 generateKeyClassFile(keyClassJavaFileHandle, curNode);
1951
1952 }
1953 }
Vidyashree Ramab3670472016-08-06 15:49:56 +05301954 //Close all the file handles.
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301955 freeTemporaryResources(false);
1956 }
1957
Bharat saraswala5c28512016-11-10 21:09:23 +05301958 //Removes case's parent import.
1959 private void removeCaseParentImport(YangNode node, List<String> imports) {
1960 YangNode parent = node.getParent();
1961 JavaFileInfo info = ((JavaFileInfoContainer) parent).getJavaFileInfo();
1962 String impt = getImportString(info.getPackage(),
1963 getCapitalCase(info.getJavaName()));
1964 imports.remove(impt);
1965 }
1966
janani b110f7f72016-10-27 19:04:18 +05301967 private void addImportsForSubTreeFilterAug(List<String> imports) {
1968 if (!imports.contains(SET_IMPORT)) {
1969 imports.add(SET_IMPORT);
1970 }
1971 if (!imports.contains(METHOD_IMPORT)) {
1972 imports.add(METHOD_IMPORT);
1973 }
1974 if (!imports.contains(ITR_IMPORT)) {
1975 imports.add(ITR_IMPORT);
1976 }
1977 }
1978
Vidyashree Ramab3670472016-08-06 15:49:56 +05301979 //Adds import for array list.
Bharat saraswal8beac342016-08-04 02:00:03 +05301980 private void addArrayListImport(List<String> imports) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301981 if (imports.contains(javaImportData.getImportForList())) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301982 imports.add(ARRAY_LIST_IMPORT);
1983 }
1984 }
1985
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301986 //Adds import for bitset and base64 list.
1987 private void addBitsAndBase64Imports(YangNode curNode, List<String> imports) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05301988 if (curNode.isOpTypeReq()) {
1989 String impt = getJavaImportData().getImportForToBitSet();
1990 if (!imports.contains(impt)) {
1991 imports.add(getJavaImportData().getImportForToBitSet());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301992 }
1993 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301994 }
1995
1996 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301997 * Adds imports for ToString and HashCodeMethod.
1998 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301999 * @param imports import list
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302000 * @param operation add or remove
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05302001 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302002 protected void addImportsToStringAndHasCodeMethods(List<String> imports,
2003 boolean operation) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302004 if (operation) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302005 imports.add(javaImportData.getImportForHashAndEquals());
2006 imports.add(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302007 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302008 imports.remove(javaImportData.getImportForHashAndEquals());
2009 imports.remove(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302010 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302011 // TODO change boolean to OPERATION, in all related places.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302012 }
2013
2014 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05302015 * Adds import for map and hash map.
2016 *
Bharat saraswal8beac342016-08-04 02:00:03 +05302017 * @param imports import list
2018 * @param operations true for adding and false for deletion
2019 * @param isInterfaceFile if need to add in interface file
Gaurav Agrawal8a147522016-08-10 13:43:01 +05302020 * @param curNode current node
Bharat saraswalaf413b82016-07-14 15:18:20 +05302021 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302022 private void addImportsForAugmentableClass(List<String> imports,
2023 boolean operations,
2024 boolean isInterfaceFile,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05302025 YangNode curNode) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05302026 if (operations) {
Bharat saraswal8beac342016-08-04 02:00:03 +05302027 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302028 imports.add(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05302029 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05302030 // Add import for hash map only if node is not a YANG choice.
2031 if (!(curNode instanceof YangChoice)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302032 imports.add(javaImportData.getMapImport());
Gaurav Agrawal8a147522016-08-10 13:43:01 +05302033 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05302034 } else {
Bharat saraswal8beac342016-08-04 02:00:03 +05302035 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302036 imports.remove(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05302037 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302038 imports.remove(javaImportData.getMapImport());
Bharat saraswald14cbe82016-07-14 13:26:18 +05302039 }
Bharat saraswal8beac342016-08-04 02:00:03 +05302040 sortImports(imports);
Bharat saraswald14cbe82016-07-14 13:26:18 +05302041 }
2042
2043 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302044 * Adds invocation exception import.
Bharat saraswal039f59c2016-07-14 21:57:13 +05302045 *
2046 * @param imports list of imports
Bharat saraswal039f59c2016-07-14 21:57:13 +05302047 */
Bharat saraswal8beac342016-08-04 02:00:03 +05302048 private void addInvocationExceptionImport(List<String> imports) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05302049 if (!imports.contains(INVOCATION_TARGET_EXCEPTION_IMPORT)) {
2050 imports.add(INVOCATION_TARGET_EXCEPTION_IMPORT);
2051 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05302052 }
2053
2054 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302055 * Removes all temporary file handles.
2056 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302057 * @param errorOccurred flag indicating if error occurred
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302058 * @throws IOException when failed to delete the temporary files
2059 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302060 public void freeTemporaryResources(boolean errorOccurred)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302061 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05302062 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302063 * Close all java file handles and when error occurs delete the files.
2064 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302065 if (javaFlagSet(INTERFACE_MASK)) {
2066 closeFile(interfaceJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302067 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302068 if (javaFlagSet(BUILDER_CLASS_MASK)) {
2069 closeFile(builderClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302070 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302071 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
2072 closeFile(builderInterfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302073 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302074 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
2075 closeFile(implClassJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302076 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05302077 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302078 * Close all temporary file handles and delete the files.
2079 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302080 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
2081 closeFile(getterImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302082 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302083 if (tempFlagSet(ATTRIBUTES_MASK)) {
2084 closeFile(attributesTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302085 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302086 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
2087 closeFile(hashCodeImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302088 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302089 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
2090 closeFile(toStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302091 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302092 if (tempFlagSet(EQUALS_IMPL_MASK)) {
2093 closeFile(equalsImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302094 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302095 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
2096 closeFile(fromStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302097 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302098 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
2099 closeFile(addToListImplTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302100 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302101 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
2102 closeFile(addToListInterfaceTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302103 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302104 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
2105 closeFile(leafIdAttributeTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302106 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302107 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
2108 closeFile(subtreeFilteringForLeafTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302109 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302110 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
2111 closeFile(getSubtreeFilteringForListTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302112 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302113 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
2114 closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302115 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302116 if (tempFlagSet(EDIT_CONTENT_MASK)) {
2117 closeFile(editContentTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302118 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302119 }
2120
2121 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302122 * Returns if the attribute needs to be accessed in a qualified manner or
2123 * not, if it needs to be imported, then the same needs to be done.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302124 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302125 * @param importInfo import info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302126 * @return status of the qualified access to the attribute
2127 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05302128 protected boolean getIsQualifiedAccessOrAddToImportList(
2129 JavaQualifiedTypeInfo importInfo) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302130 return javaImportData
2131 .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
2132 getGeneratedJavaClassName(),
2133 javaFileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302134 }
2135
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302136 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302137 * Returns temp file handle for add to list interface.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302138 *
Bharat saraswal8beac342016-08-04 02:00:03 +05302139 * @return temp file handle for add to list interface
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302140 */
Bharat saraswal8beac342016-08-04 02:00:03 +05302141 public File getAddToListInterfaceTempFileHandle() {
2142 return addToListInterfaceTempFileHandle;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302143 }
2144
2145 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302146 * Returns temp file handle for add to list impl.
2147 *
2148 * @return temp file handle for add to list impl
2149 */
2150 public File getAddToListImplTempFileHandle() {
2151 return addToListImplTempFileHandle;
2152 }
2153
2154 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302155 * Returns temp file handle for leaf identifier attributes.
2156 *
2157 * @return temp file handle for leaf identifier attributes
2158 */
2159 public File getLeafIdAttributeTempFileHandle() {
2160 return leafIdAttributeTempFileHandle;
2161 }
2162
2163 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302164 * Sets true if root node.
2165 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302166 * @param rootNode true if root node
Bharat saraswal8beac342016-08-04 02:00:03 +05302167 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302168 void setRootNode(boolean rootNode) {
2169 this.rootNode = rootNode;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302170 }
Bharat saraswale50edca2016-08-05 01:58:25 +05302171
2172 /**
2173 * Returns temp file for is content match.
2174 *
2175 * @return temp file for is content match
2176 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302177 public File getSubtreeFilteringForLeafTempFileHandle() {
2178 return subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302179 }
2180
2181 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302182 * Returns temp file for edit content file.
2183 *
2184 * @return temp file for edit content file
2185 */
2186 public File getEditContentTempFileHandle() {
2187 return editContentTempFileHandle;
2188 }
2189
2190 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302191 * Returns temp file for is content match.
2192 *
2193 * @return temp file for is content match
2194 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302195 public File getGetSubtreeFilteringForListTempFileHandle() {
2196 return getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302197 }
2198
2199 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302200 * Returns temp file for is content match.
2201 *
2202 * @return temp file for is content match
2203 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302204 public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
2205 return getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302206 }
2207
2208 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302209 * Checks if a given flag is set in generated java files.
2210 * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
2211 * <pre>
2212 * javaFlagSet(FOO | BAR)
2213 * </pre>
2214 * returns true if either FOO flag or BAR flag is set.
Bharat saraswale50edca2016-08-05 01:58:25 +05302215 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302216 * @param flag input flag mask value
2217 * @return true if set, else false
Bharat saraswale50edca2016-08-05 01:58:25 +05302218 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302219 private boolean javaFlagSet(int flag) {
2220 return (getGeneratedJavaFiles() & flag) != 0;
2221 }
2222
2223 /**
2224 * Checks if a given flag is set in temp files.
2225 *
2226 * @param flag input flag mask value
2227 * @return true if set, else false
2228 */
2229 private boolean tempFlagSet(int flag) {
2230 return (tempFilesFlagSet & flag) != 0;
Bharat saraswale50edca2016-08-05 01:58:25 +05302231 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +05302232
2233 /**
Bharat saraswal94844d62016-10-13 13:28:03 +05302234 * Sets true if binary type is there for leaf/leaf-list.
2235 *
2236 * @param binary true if binary type is there for leaf/leaf-list
2237 */
2238 public void setBinary(boolean binary) {
2239 isBinary = binary;
2240 }
2241
2242 /**
2243 * Returns true if binary type is there for leaf/leaf-list.
2244 *
2245 * @return true if binary type is there for leaf/leaf-list
2246 */
2247 public boolean isBinary() {
2248 return isBinary;
2249 }
2250
Bharat saraswal0663aff2016-10-18 23:16:14 +05302251 /**
2252 * Sets attribute's node.
2253 *
2254 * @param attrNode attribute's node
2255 */
2256 public void setAttrNode(YangNode attrNode) {
2257 this.attrNode = attrNode;
2258 }
2259
2260 /**
2261 * Adds info to sub tree import list.
2262 *
2263 * @param info import info
2264 */
2265 public void addToSubTreeImports(JavaQualifiedTypeInfoTranslator
2266 info) {
2267 boolean isAdded = false;
2268 for (JavaQualifiedTypeInfoTranslator imports : subTreeImports) {
2269 if (imports.getClassInfo().equals(info.getClassInfo())) {
2270 isAdded = true;
2271 }
2272 }
2273 if (!isAdded) {
2274 subTreeImports.add(info);
2275 }
2276 }
2277
2278 private void addSubTreeImportStrings(List<String> imports) {
2279 for (JavaQualifiedTypeInfoTranslator impt : subTreeImports) {
Bharat saraswala5c28512016-11-10 21:09:23 +05302280 String imp = getImportString(impt.getPkgInfo(), impt
2281 .getClassInfo());
2282 if (!imports.contains(imp)) {
2283 imports.add(imp);
2284 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05302285 }
2286 sortImports(imports);
2287 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +05302288
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302289}