blob: 00a7baf01f97a26b2d4eecb0764c2c5caf1382f2 [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 saraswal0663aff2016-10-18 23:16:14 +053023import org.onosproject.yangutils.datamodel.YangGrouping;
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;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053029import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal94844d62016-10-13 13:28:03 +053030import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
Bharat saraswal2da23bf2016-08-25 15:28:39 +053031import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053032import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053033import org.onosproject.yangutils.translator.exception.TranslatorException;
34import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
Shankara-Huaweib7564772016-08-02 18:13:13 +053035import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053036import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053037import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053038
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053039import java.io.File;
40import java.io.IOException;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053041import java.util.ArrayList;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053042import java.util.List;
43
Bharat saraswalc2d3be12016-06-16 00:29:12 +053044import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
46import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswalaf413b82016-07-14 15:18:20 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
58import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
68import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053069import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
70import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal0663aff2016-10-18 23:16:14 +053071import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateBitsFile;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053072import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Bharat saraswal8beac342016-08-04 02:00:03 +053073import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
74import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Bharat saraswalaf413b82016-07-14 15:18:20 +053075import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.sortImports;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053076import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
77import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Bharat saraswal8beac342016-08-04 02:00:03 +053078import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053079import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053080import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswald14cbe82016-07-14 13:26:18 +053081import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Bharat saraswal8beac342016-08-04 02:00:03 +053082import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
83import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
86import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal250a7472016-05-12 13:16:57 +053087import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053088import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
89import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
Bharat saraswal94844d62016-10-13 13:28:03 +053095import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053096import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053097import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
98import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
99import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
100import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
101import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
102import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
103import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
104import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
105import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswal8beac342016-08-04 02:00:03 +0530106import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_IMPORT;
Bharat saraswal94844d62016-10-13 13:28:03 +0530107import static org.onosproject.yangutils.utils.UtilConstants.AUGMENT_MAP_TYPE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530108import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530109import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530110import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530112import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530113import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530114import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
115import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530116import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530117import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION_IMPORT;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530118import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530119import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530120import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
121import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_CLASS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530122import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530123import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530124import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
125import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal94844d62016-10-13 13:28:03 +0530126import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530127import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530128import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530129import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal94844d62016-10-13 13:28:03 +0530130import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530131import static org.onosproject.yangutils.utils.UtilConstants.YANG;
Bharat saraswal94844d62016-10-13 13:28:03 +0530132import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530133import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530134import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
Bharat saraswal8beac342016-08-04 02:00:03 +0530135import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530136import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530137import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530138import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530139import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
140import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
141import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530142import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
143import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530144import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530145
146/**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530147 * Represents implementation of java code fragments temporary implementations.
148 * Manages the common temp file required for Java file(s) generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530149 */
150public class TempJavaFragmentFiles {
Bharat saraswal250a7472016-05-12 13:16:57 +0530151
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530152 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530153 * File type extension for java classes.
154 */
155 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswal250a7472016-05-12 13:16:57 +0530156
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530157 /**
158 * File type extension for temporary classes.
159 */
160 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswal250a7472016-05-12 13:16:57 +0530161
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530162 /**
163 * Folder suffix for temporary files folder.
164 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530165 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530166
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530167 /**
168 * File name for getter method.
169 */
170 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530171
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530172 /**
173 * File name for setter method.
174 */
175 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530176
177 /**
178 * File name for getter method implementation.
179 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530180 private static final String GETTER_METHOD_IMPL_FILE_NAME =
181 "GetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530182
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530183 /**
184 * File name for setter method implementation.
185 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530186 private static final String SETTER_METHOD_IMPL_FILE_NAME =
187 "SetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530188
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530189 /**
190 * File name for attributes.
191 */
192 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswal250a7472016-05-12 13:16:57 +0530193
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530194 /**
195 * File name for to string method.
196 */
197 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswal250a7472016-05-12 13:16:57 +0530198
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530199 /**
200 * File name for hash code method.
201 */
202 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswal250a7472016-05-12 13:16:57 +0530203
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530204 /**
205 * File name for equals method.
206 */
207 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530208
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530209 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530210 * File name for from string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530211 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530212 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530213
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530214 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530215 * File name for from add to list interface method.
216 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
218 "addToList";
Bharat saraswal8beac342016-08-04 02:00:03 +0530219
220 /**
221 * File name for from add to list impl method.
222 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530223 private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
224 "addToListImpl";
Bharat saraswal8beac342016-08-04 02:00:03 +0530225
226 /**
227 * File name for from leaf identifier attributes.
228 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530229 private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
230 "leafIdentifierAtr";
Bharat saraswal8beac342016-08-04 02:00:03 +0530231
232 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530233 * File name for is filter content leaf match.
234 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235 private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
236 "isFilterContentMatchLeafMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530237
238 /**
239 * File name for is filter content leaf-list match.
240 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530241 private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
242 "isFilterContentMatchLeafListMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530243
244 /**
245 * File name for is filter content node match.
246 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530247 private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
248 "isFilterContentMatchNodeMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530249
250 /**
251 * File name for edit content file.
252 */
253 private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
254
255 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530256 * File name for interface java file name suffix.
257 */
258 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswal250a7472016-05-12 13:16:57 +0530259
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530260 /**
261 * File name for builder interface file name suffix.
262 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530263 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
264 BUILDER + INTERFACE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530265
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530266 /**
267 * File name for builder class file name suffix.
268 */
269 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530270
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530271 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530272 * if type is binary.
Bharat saraswal94844d62016-10-13 13:28:03 +0530273 */
274 private boolean isBinary;
275
276 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530277 * Current attributes YANG node
278 */
279 private YangNode attrNode;
280
281 /**
282 * Sub tree filtering requires child class imports for type cast.
283 */
284 private final List<JavaQualifiedTypeInfoTranslator> subTreeImports = new ArrayList<>();
285 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530286 * Information about the java files being generated.
287 */
Bharat saraswale50edca2016-08-05 01:58:25 +0530288 private JavaFileInfoTranslator javaFileInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530289
290 /**
291 * Imported class info.
292 */
293 private JavaImportData javaImportData;
294
295 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530296 * The variable which guides the types of temporary files generated using
297 * the temporary generated file types mask.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530298 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530299 private int tempFilesFlagSet;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530300
301 /**
302 * Absolute path where the target java file needs to be generated.
303 */
304 private String absoluteDirPath;
305
306 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530307 * Contains all the interface(s)/class name which will be extended by
308 * generated files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530309 */
310 private JavaExtendsListHolder javaExtendsListHolder;
311
Bharat saraswald14cbe82016-07-14 13:26:18 +0530312 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530313 * Java file handle for interface file.
314 */
315 private File interfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530316
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530317 /**
318 * Java file handle for builder interface file.
319 */
320 private File builderInterfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530321
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530322 /**
323 * Java file handle for builder class file.
324 */
325 private File builderClassJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530326
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530327 /**
328 * Java file handle for impl class file.
329 */
330 private File implClassJavaFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530331
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530332 /**
333 * Temporary file handle for attribute.
334 */
335 private File attributesTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530336
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530337 /**
338 * Temporary file handle for getter of interface.
339 */
340 private File getterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530341
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530342 /**
343 * Temporary file handle for setter of interface.
344 */
345 private File setterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530346
347 /**
348 * Temporary file handle for getter of class.
349 */
350 private File getterImplTempFileHandle;
351
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530352 /**
353 * Temporary file handle for setter of class.
354 */
355 private File setterImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530356
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530357 /**
358 * Temporary file handle for hash code method of class.
359 */
360 private File hashCodeImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530361
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530362 /**
363 * Temporary file handle for equals method of class.
364 */
365 private File equalsImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530366
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530367 /**
368 * Temporary file handle for to string method of class.
369 */
370 private File toStringImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530371
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530372 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530373 * Temporary file handle for from string method of class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530374 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530375 private File fromStringImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530376
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530377 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530378 * Temporary file handle for add to list interface method of class.
379 */
380 private File addToListInterfaceTempFileHandle;
381
382 /**
383 * Temporary file handle for add to list impl method of class.
384 */
385 private File addToListImplTempFileHandle;
386
387 /**
388 * Temporary file handle for leaf id attributes of enum.
389 */
390 private File leafIdAttributeTempFileHandle;
391
392 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530393 * Temporary file handle for is content match method for leaf-list.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530394 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530395 private File getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530396
397 /**
398 * Temporary file handle for is content match method for node.
399 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530400 private File getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530401
402 /**
403 * Temporary file handle for is content match method for leaf.
404 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530405 private File subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530406
407 /**
408 * Temporary file handle for edit content file.
409 */
410 private File editContentTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530411
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530412 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530413 * Leaf count.
414 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530415 private int leafCount;
Bharat saraswal8beac342016-08-04 02:00:03 +0530416
417 /**
418 * If current node is root node.
419 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530420 private boolean rootNode;
Bharat saraswal8beac342016-08-04 02:00:03 +0530421
422 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530423 * Is attribute added.
424 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530425 private boolean isAttributePresent;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530426
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530427 /**
428 * Creates an instance of temp JAVA fragment files.
429 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530430 TempJavaFragmentFiles() {
431 }
432
433 /**
434 * Creates an instance of temporary java code fragment.
435 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530436 * @param fileInfo generated java file information
Bharat saraswalaf413b82016-07-14 15:18:20 +0530437 * @throws IOException when fails to create new file handle
438 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530439 protected TempJavaFragmentFiles(JavaFileInfoTranslator fileInfo)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530440 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530441 javaExtendsListHolder = new JavaExtendsListHolder();
442 javaImportData = new JavaImportData();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530443 javaFileInfo = fileInfo;
444 absoluteDirPath = getAbsolutePackagePath(fileInfo.getBaseCodeGenPath(),
445 fileInfo.getPackageFilePath());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530446 /*
447 * Initialize getter when generation file type matches to interface
448 * mask.
449 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530450 if (javaFlagSet(INTERFACE_MASK)) {
451 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
452 ADD_TO_LIST_INTERFACE_MASK |
453 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530454 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530455 /*
456 * Initialize getter and setter when generation file type matches to
457 * builder interface mask.
458 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530459 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
460 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
461 SETTER_FOR_INTERFACE_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530462 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530463 /*
464 * Initialize getterImpl, setterImpl and attributes when generation file
465 * type matches to builder class mask.
466 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530467 if (javaFlagSet(BUILDER_CLASS_MASK)) {
468 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
469 SETTER_FOR_CLASS_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530470 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530471 /*
472 * Initialize getterImpl, attributes, constructor, hash code, equals and
473 * to strings when generation file type matches to impl class mask.
474 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530475 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
476 addGeneratedTempFile(
477 ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
478 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
479 TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
480 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
481 FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
482 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530483 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530484 /*
485 * Initialize temp files to generate type class.
486 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530487 if (javaFlagSet(GENERATE_TYPE_CLASS)) {
488 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
489 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530490 FROM_STRING_IMPL_MASK);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530491
492 if (getGeneratedJavaFiles() != GENERATE_UNION_CLASS) {
493 addGeneratedTempFile(TO_STRING_IMPL_MASK);
494 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530495 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530496
Vidyashree Ramab3670472016-08-06 15:49:56 +0530497 //Set temporary file handles
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530498 if (tempFlagSet(ATTRIBUTES_MASK)) {
499 attributesTempFileHandle =
500 getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530501 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530502 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
503 getterInterfaceTempFileHandle =
504 getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530505 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530506 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
507 setterInterfaceTempFileHandle =
508 getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530509 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530510 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
511 getterImplTempFileHandle =
512 getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530513 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530514 if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
515 setterImplTempFileHandle =
516 getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530517 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530518 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
519 hashCodeImplTempFileHandle =
520 getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530521 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530522 if (tempFlagSet(EQUALS_IMPL_MASK)) {
523 equalsImplTempFileHandle =
524 getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530525 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530526 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
527 toStringImplTempFileHandle =
528 getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530529 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530530 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
531 fromStringImplTempFileHandle =
532 getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530533 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530534 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
535 addToListInterfaceTempFileHandle =
536 getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530537 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530538 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
539 addToListImplTempFileHandle =
540 getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530541 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530542 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
543 leafIdAttributeTempFileHandle =
544 getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530545 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530546 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
547 subtreeFilteringForLeafTempFileHandle =
548 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530549 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530550 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
551 getSubtreeFilteringForListTempFileHandle =
552 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530553 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530554 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
555 getSubtreeFilteringForChildNodeTempFileHandle =
556 getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530557 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530558 if (tempFlagSet(EDIT_CONTENT_MASK)) {
559 editContentTempFileHandle =
560 getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530561 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530562 }
563
564 /**
565 * Adds current node info as and attribute to the parent generated file.
566 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530567 * @param curNode current node
568 * @param isList is list construct
569 * @param config plugin configurations
Bharat saraswalaf413b82016-07-14 15:18:20 +0530570 * @throws IOException IO operation exception
571 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
573 boolean isList,
574 YangPluginConfig config)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530575 throws IOException {
576 YangNode parent = getParentNodeInGenCode(curNode);
577 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530578 throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
579 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530580 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530581 if (parent instanceof YangJavaGroupingTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530582 /*
583 * In case of grouping, there is no need to add the information, it
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530584 * will be taken care in uses.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530585 */
586 return;
587 }
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530588 addCurNodeInfoInParentTempFile(curNode, isList, config, parent);
589 }
590
591 /**
592 * Adds current node info as and attribute to a specified parent generated
593 * file. In case of grouping parent will be referred grouping node or
594 * referred node in grouping.
595 *
596 * @param curNode current node
597 * @param isList is list construct
598 * @param config plugin configurations
599 * @param parent parent node
600 * @throws IOException IO operation exception
601 */
602 protected static void addCurNodeInfoInParentTempFile(
603 YangNode curNode, boolean isList, YangPluginConfig config,
604 YangNode parent)
605 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530606 TempJavaBeanFragmentFiles tempFiles =
607 getBeanFiles((JavaCodeGeneratorInfo) parent);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530608 tempFiles.setAttrNode(curNode);
609
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530610 JavaAttributeInfo attr =
611 getCurNodeAsAttributeInTarget(curNode, parent, isList,
612 tempFiles);
613 tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530614 }
615
616 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530617 * Creates an attribute info object corresponding to a data model node
618 * and return it.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530619 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530620 * @param curNode current node
621 * @param targetNode target node
622 * @param listNode flag indicating if a node is a list node
623 * @param tempFiles temp java fragment files
624 * @return java attribute info
Bharat saraswalaf413b82016-07-14 15:18:20 +0530625 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530626 public static JavaAttributeInfo
627 getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
628 boolean listNode,
629 TempJavaFragmentFiles tempFiles) {
630 JavaFileInfoTranslator translator =
631 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
632 String curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530633 if (curNodeName == null) {
634 updateJavaFileInfo(curNode, null);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530635 curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530636 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530637 /*
638 * Get the import info corresponding to the attribute for import in
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530639 * generated java files or qualified access.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530640 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530641 JavaQualifiedTypeInfoTranslator typeInfo =
642 getQualifiedTypeInfoOfCurNode(curNode,
643 getCapitalCase(curNodeName));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530644 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
646 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530647 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530648 JavaImportData parentImportData = tempFiles.getJavaImportData();
649 JavaFileInfoTranslator fileInfo =
650 ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530651
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530652 boolean qualified;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530653 if (tempFiles instanceof TempJavaServiceFragmentFiles &&
654 typeInfo.getClassInfo().contentEquals(SERVICE) ||
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530655 typeInfo.getClassInfo()
656 .contentEquals(getCapitalCase(fileInfo.getJavaName() +
657 SERVICE))) {
658 qualified = true;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530659 } else {
660 String className;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530661 if (tempFiles instanceof TempJavaServiceFragmentFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530662 className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530663 } else {
664 className = getCapitalCase(fileInfo.getJavaName());
665 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530666 qualified = parentImportData.addImportInfo(typeInfo, className,
667 fileInfo.getPackage());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530668 if (!qualified && !(curNode instanceof YangChoice)) {
669 addChildDefaultClassImportForSubTreeFilter(typeInfo.getPkgInfo(),
670 typeInfo.getClassInfo(),
671 tempFiles);
672 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530673 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530674 boolean collectionSet = false;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530675 if (curNode instanceof YangList) {
676 YangList yangList = (YangList) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530677 if (yangList.getCompilerAnnotation() != null &&
678 yangList.getCompilerAnnotation()
679 .getYangAppDataStructure() != null) {
680 switch (yangList.getCompilerAnnotation()
681 .getYangAppDataStructure().getDataStructure()) {
Vidyashree Ramab3670472016-08-06 15:49:56 +0530682 case QUEUE: {
683 parentImportData.setQueueToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530684 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530685 break;
686 }
687 case SET: {
688 parentImportData.setSetToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530689 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530690 break;
691 }
692 default: {
693 // TODO : to be implemented
694 }
695 }
696 }
697 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530698 if (listNode && !collectionSet) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530699 parentImportData.setIfListImported(true);
700 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530701 if (curNode instanceof YangList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530702 return getAttributeInfoForTheData(typeInfo, curNodeName,
703 null, qualified, listNode,
704 ((YangList) curNode)
705 .getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530706 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530707 return getAttributeInfoForTheData(typeInfo, curNodeName, null,
708 qualified, listNode);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530709 }
710
Bharat saraswal0663aff2016-10-18 23:16:14 +0530711 private static void addChildDefaultClassImportForSubTreeFilter(
712 String pkg, String className, TempJavaFragmentFiles tempFile) {
713 className = DEFAULT_CAPS + getCapitalCase(className);
714 JavaQualifiedTypeInfoTranslator info = new
715 JavaQualifiedTypeInfoTranslator();
716 info.setClassInfo(className);
717 info.setPkgInfo(pkg);
718 tempFile.subTreeImports.add(info);
719 }
720
Bharat saraswalaf413b82016-07-14 15:18:20 +0530721 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530722 * Returns java attribute for leaf.
723 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530724 * @param tempFiles temporary generated file
725 * @param container JAVA leaf info container
726 * @param config plugin configurations
727 * @param leafList flag indicating if it's leaf list
728 * @return java attribute info
Bharat saraswal64e7e232016-07-14 23:33:55 +0530729 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530730 private static JavaAttributeInfo
731 getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
732 JavaLeafInfoContainer container,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530733 YangPluginConfig config, boolean leafList) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530734 if (leafList) {
735 tempFiles.getJavaImportData().setIfListImported(true);
736 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
737 true);
738 }
739 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
740 false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530741 }
742
743 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530744 * Returns java attribute for leaf container.
Bharat saraswal64e7e232016-07-14 23:33:55 +0530745 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530746 * @param tempFiles temporary generated file
747 * @param container JAVA leaf info container
748 * @param config plugin configurations
749 * @param listAttribute flag indicating if list attribute
750 * @return JAVA attribute information
Bharat saraswal64e7e232016-07-14 23:33:55 +0530751 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530752 private static JavaAttributeInfo
753 getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
754 JavaLeafInfoContainer container,
755 YangPluginConfig config,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530756 boolean listAttribute) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530757 container.setConflictResolveConfig(config.getConflictResolver());
758 container.updateJavaQualifiedInfo();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530759 addImportForLeafInfo(tempFiles, container);
760 JavaAttributeInfo attr = getAttributeInfoForTheData(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530761 container.getJavaQualifiedInfo(),
762 container.getJavaName(config.getConflictResolver()),
763 container.getDataType(),
764 tempFiles.getIsQualifiedAccessOrAddToImportList(
765 container.getJavaQualifiedInfo()), listAttribute);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530766 boolean isInGrouping;
767 if (container.isLeafList()) {
768 isInGrouping = !(((YangLeafList) container).getContainedIn()
769 instanceof YangGrouping);
770 } else {
771 isInGrouping = !(((YangLeaf) container).getContainedIn()
772 instanceof YangGrouping);
773 }
774 if (container.getDataType().getDataType() == YangDataTypes.BITS &&
775 isInGrouping) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530776 addBitsHandler(attr, container.getDataType(), tempFiles);
777 }
778 return attr;
779 }
780
781 /**
782 * Adds bits handler attribute for bits to string method.
783 *
784 * @param attr attribute
785 * @param type type
786 * @param tempFiles temp fragment file
787 */
788 static void addBitsHandler(JavaAttributeInfo attr, YangType type,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530789 TempJavaFragmentFiles tempFiles)
790 throws IOException {
791 generateBitsFile(attr, type, tempFiles.getJavaFileInfo(), tempFiles);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530792 }
793
794 /**
795 * Adds attribute types import to leaf info container's parent.
796 *
797 * @param tempFiles temp java file
798 * @param container leaf info container
799 */
800 private static void addImportForLeafInfo(TempJavaFragmentFiles tempFiles,
801 JavaLeafInfoContainer container) {
802 String containedInCls = getCapitalCase(tempFiles.getJavaFileInfo()
803 .getJavaName());
804 String containedInPkg = tempFiles.getJavaFileInfo().getPackage();
Bharat saraswal94844d62016-10-13 13:28:03 +0530805 JavaQualifiedTypeInfoTranslator info;
806 if (container.getDataType().getDataType() == YangDataTypes.BINARY) {
807 tempFiles.setBinary(true);
808 } else if (container.getDataType().getDataType() == YangDataTypes.BITS) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530809 //Add bitset import for type and leaf value flags.
810 info = new JavaQualifiedTypeInfoTranslator();
811 info.setClassInfo(BIT_SET);
812 info.setPkgInfo(JAVA_UTIL_PKG);
813 tempFiles.getJavaImportData().addImportInfo(info, containedInCls,
814 containedInPkg);
815 }
816 tempFiles.getJavaImportData().addImportInfo(
817 (JavaQualifiedTypeInfoTranslator) container
818 .getJavaQualifiedInfo(), containedInCls, containedInPkg);
819
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530820 }
821
822 /**
823 * Sets absolute path where the file needs to be generated.
824 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530825 * @param absoluteDirPath absolute path where the file needs to be
826 * generated
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530827 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530828 protected void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530829 this.absoluteDirPath = absoluteDirPath;
830 }
831
832 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530833 * Returns the generated java file information.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530834 *
835 * @return generated java file information
836 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530837 protected JavaFileInfoTranslator getJavaFileInfo() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530838 return javaFileInfo;
839 }
840
841 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530842 * Sets the generated java file information.
843 *
844 * @param javaFileInfo generated java file information
845 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530846 protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530847 this.javaFileInfo = javaFileInfo;
848 }
849
850 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530851 * Returns the flag-set for generated temp files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530852 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530853 * @return flag-set
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530854 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530855 protected int getGeneratedTempFiles() {
856 return tempFilesFlagSet;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530857 }
858
859 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530860 * Adds to the flag-set for generated temp files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530861 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530862 * @param flags generated temp files flag-set
Bharat saraswalaf413b82016-07-14 15:18:20 +0530863 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530864 protected void addGeneratedTempFile(int flags) {
865 tempFilesFlagSet |= flags;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530866 }
867
868 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530869 * Returns the generated Java files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530870 *
871 * @return generated Java files
872 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530873 protected int getGeneratedJavaFiles() {
874 return javaFileInfo.getGeneratedFileTypes();
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530875 }
876
877 /**
878 * Retrieves the mapped Java class name.
879 *
880 * @return mapped Java class name
881 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530882 protected String getGeneratedJavaClassName() {
883 return getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530884 }
885
886 /**
887 * Retrieves the import data for the generated Java file.
888 *
889 * @return import data for the generated Java file
890 */
891 public JavaImportData getJavaImportData() {
892 return javaImportData;
893 }
894
895 /**
896 * Sets import data for the generated Java file.
897 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530898 * @param data import data for the generated Java file
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530899 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530900 protected void setJavaImportData(JavaImportData data) {
901 javaImportData = data;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530902 }
903
904 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530905 * Retrieves the status of any attributes added.
906 *
907 * @return status of any attributes added
908 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530909 protected boolean isAttributePresent() {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530910 return isAttributePresent;
911 }
912
913 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530914 * Returns getter methods's temporary file handle.
915 *
916 * @return temporary file handle
917 */
918 public File getGetterInterfaceTempFileHandle() {
919 return getterInterfaceTempFileHandle;
920 }
921
922 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530923 * Returns setter method's temporary file handle.
924 *
925 * @return temporary file handle
926 */
927 public File getSetterInterfaceTempFileHandle() {
928 return setterInterfaceTempFileHandle;
929 }
930
931 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530932 * Returns setter method's impl's temporary file handle.
933 *
934 * @return temporary file handle
935 */
936 public File getSetterImplTempFileHandle() {
937 return setterImplTempFileHandle;
938 }
939
940 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530941 * Returns from string method's temporary file handle.
942 *
943 * @return from string method's temporary file handle
944 */
945 public File getFromStringImplTempFileHandle() {
946 return fromStringImplTempFileHandle;
947 }
948
949 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530950 * Returns attribute's temporary file handle.
951 *
952 * @return temporary file handle
953 */
954 public File getAttributesTempFileHandle() {
955 return attributesTempFileHandle;
956 }
957
958 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530959 * Returns getter method's impl's temporary file handle.
960 *
961 * @return temporary file handle
962 */
963 public File getGetterImplTempFileHandle() {
964 return getterImplTempFileHandle;
965 }
966
967 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530968 * Returns hash code method's temporary file handle.
969 *
970 * @return temporary file handle
971 */
972 public File getHashCodeImplTempFileHandle() {
973 return hashCodeImplTempFileHandle;
974 }
975
976 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530977 * Returns equals method's temporary file handle.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530978 *
979 * @return temporary file handle
980 */
981 public File getEqualsImplTempFileHandle() {
982 return equalsImplTempFileHandle;
983 }
984
985 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530986 * Returns to string method's temporary file handle.
987 *
988 * @return temporary file handle
989 */
990 public File getToStringImplTempFileHandle() {
991 return toStringImplTempFileHandle;
992 }
993
994 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530995 * Returns java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530996 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530997 * @return java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530998 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530999 public JavaExtendsListHolder getJavaExtendsListHolder() {
1000 return javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301001 }
1002
1003 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301004 * Sets java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301005 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301006 * @param holder java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301007 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301008 protected void setJavaExtendsListHolder(
1009 JavaExtendsListHolder holder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301010 javaExtendsListHolder = holder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301011 }
1012
1013 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301014 * Adds is filter content match for leaf.
1015 *
1016 * @param attr java attribute
1017 * @throws IOException when fails to do IO operations
1018 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301019 private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301020 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301021 appendToFile(subtreeFilteringForLeafTempFileHandle,
1022 getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
1023 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301024 }
1025
1026 /**
1027 * Adds is filter content match for leaf-list.
1028 *
1029 * @param attr java attribute
1030 * @throws IOException when fails to do IO operations
1031 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301032 private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301033 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301034 appendToFile(getSubtreeFilteringForListTempFileHandle,
Bharat saraswal1edde622016-09-06 10:18:04 +05301035 getSubtreeFilteringForLeafList(attr) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301036 }
1037
1038 /**
1039 * Adds is filter content match for nodes.
1040 *
1041 * @param attr java attribute
1042 * @throws IOException when fails to do IO operations
1043 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301044 private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301045 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301046 appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301047 getSubtreeFilteringForNode(attr, attrNode) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301048 }
1049
1050 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301051 * Adds attribute for class.
1052 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301053 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301054 * @throws IOException when fails to append to temporary file
1055 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301056 private void addAttribute(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301057 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301058 appendToFile(attributesTempFileHandle, parseAttribute(attr));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301059 }
1060
1061 /**
1062 * Adds getter for interface.
1063 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301064 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301065 * @throws IOException when fails to append to temporary file
1066 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301067 private void addGetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301068 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301069 appendToFile(getterInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301070 getGetterString(attr, getGeneratedJavaFiles()) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301071 NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301072 }
1073
1074 /**
1075 * Adds setter for interface.
1076 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301077 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301078 * @throws IOException when fails to append to temporary file
1079 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301080 private void addSetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301081 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301082 appendToFile(setterInterfaceTempFileHandle,
1083 getSetterString(attr, getGeneratedJavaClassName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +05301084 getGeneratedJavaFiles()) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301085 }
1086
1087 /**
1088 * Adds setter's implementation for class.
1089 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301090 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301091 * @throws IOException when fails to append to temporary file
1092 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301093 private void addSetterImpl(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301094 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301095 String setter = getSetterForClass(attr, getGeneratedJavaClassName(),
1096 getGeneratedJavaFiles());
Bharat saraswal94844d62016-10-13 13:28:03 +05301097 appendToFile(setterImplTempFileHandle, getOverRideString() + setter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301098 }
1099
1100 /**
1101 * Adds getter method's impl for class.
1102 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301103 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301104 * @throws IOException when fails to append to temporary file
1105 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301106 protected void addGetterImpl(JavaAttributeInfo attr)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301107 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301108 String getter = getGetterForClass(attr, getGeneratedJavaFiles());
1109 if (javaFlagSet(BUILDER_CLASS_MASK)) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301110 appendToFile(getterImplTempFileHandle, getOverRideString() +
1111 getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301112 } else {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301113 String appDataStructure = null;
1114 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301115 appDataStructure = attr.getCompilerAnnotation()
1116 .getYangAppDataStructure().getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301117 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301118 appendToFile(getterImplTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301119 getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
1120 false, appDataStructure) + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301121 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301122 }
1123
1124 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301125 * Adds add to list interface method.
1126 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301127 * @param attr attribute
Bharat saraswal8beac342016-08-04 02:00:03 +05301128 * @throws IOException when fails to do IO operations
1129 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301130 private void addAddToListInterface(JavaAttributeInfo attr)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301131 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301132 appendToFile(addToListInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301133 getJavaDoc(ADD_TO_LIST, attr.getAttributeName(), false,
1134 null) + getAddToListMethodInterface(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301135 attr, getGeneratedJavaClassName()) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301136 }
1137
1138 /**
1139 * Adds add to list interface method.
1140 *
1141 * @param attr attribute
1142 * @throws IOException when fails to do IO operations
1143 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301144 private void addAddToListImpl(JavaAttributeInfo attr)
1145 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301146 appendToFile(addToListImplTempFileHandle,
Bharat saraswal94844d62016-10-13 13:28:03 +05301147 getAddToListMethodImpl(attr, getGeneratedJavaClassName()
1148 ) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301149 }
1150
1151 /**
1152 * Adds leaf identifier enum attributes.
1153 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301154 * @param attr attribute
1155 * @param value value
Bharat saraswal8beac342016-08-04 02:00:03 +05301156 * @throws IOException when fails to do IO operations
1157 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301158 private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
Bharat saraswal8beac342016-08-04 02:00:03 +05301159 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301160 appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
1161 generateEnumAttributeString(attr.getAttributeName(), value));
Bharat saraswal8beac342016-08-04 02:00:03 +05301162 }
1163
1164 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301165 * Adds build method for interface.
1166 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301167 * @return build method for interface
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301168 * @throws IOException when fails to append to temporary file
1169 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301170 protected String addBuildMethodForInterface()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301171 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301172 return parseBuilderInterfaceBuildMethodString(
1173 getGeneratedJavaClassName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301174 }
1175
1176 /**
1177 * Adds build method's implementation for class.
1178 *
1179 * @return build method implementation for class
1180 * @throws IOException when fails to append to temporary file
1181 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301182 protected String addBuildMethodImpl()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301183 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301184 return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301185 }
1186
1187 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301188 * Adds default constructor for class.
1189 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301190 * @param modifier modifier for constructor
1191 * @param toAppend string which need to be appended with the class name
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301192 * @param suffix is value need to be appended as suffix
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301193 * @return default constructor for class
1194 * @throws IOException when fails to append to file
1195 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301196 protected String addDefaultConstructor(String modifier, String toAppend,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301197 boolean suffix)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301198 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301199 StringBuilder name = new StringBuilder();
1200 name.append(getGeneratedJavaClassName());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301201 if (rootNode && !toAppend.equals(BUILDER)) {
1202 name.append(OP_PARAM);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301203 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301204 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301205 if (suffix) {
1206 name.append(toAppend);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301207 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301208 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301209 StringBuilder appended = new StringBuilder();
Bharat saraswal8beac342016-08-04 02:00:03 +05301210 if (toAppend.equals(DEFAULT)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301211 appended.append(getCapitalCase(toAppend));
Bharat saraswal8beac342016-08-04 02:00:03 +05301212 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301213 appended.append(toAppend);
Bharat saraswal8beac342016-08-04 02:00:03 +05301214 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301215 return NEW_LINE + getDefaultConstructorString(appended.append(
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301216 name).toString(), modifier);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301217 // TODO getDefaultConstructorString to handle new line.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301218 }
1219
1220 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301221 * Adds hash code method for class.
1222 *
1223 * @param attr attribute info
1224 * @throws IOException when fails to append to temporary file
1225 */
1226 private void addHashCodeMethod(JavaAttributeInfo attr)
1227 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301228 appendToFile(hashCodeImplTempFileHandle,
1229 getHashCodeMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301230 }
1231
1232 /**
1233 * Adds equals method for class.
1234 *
1235 * @param attr attribute info
1236 * @throws IOException when fails to append to temporary file
1237 */
1238 private void addEqualsMethod(JavaAttributeInfo attr)
1239 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301240 appendToFile(equalsImplTempFileHandle,
1241 getEqualsMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301242 }
1243
1244 /**
1245 * Adds ToString method for class.
1246 *
1247 * @param attr attribute info
1248 * @throws IOException when fails to append to temporary file
1249 */
1250 private void addToStringMethod(JavaAttributeInfo attr)
1251 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301252 appendToFile(toStringImplTempFileHandle,
1253 getToStringMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301254 }
1255
1256 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301257 * Adds from string method for union class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301258 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301259 * @param attr type attribute info
1260 * @param fromStringAttr from string attribute info
Bharat saraswal250a7472016-05-12 13:16:57 +05301261 * @throws IOException when fails to append to temporary file
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301262 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301263 void addFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301264 JavaAttributeInfo fromStringAttr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301265 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301266 appendToFile(fromStringImplTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301267 getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301268 }
1269
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301270 /**
1271 * Returns a temporary file handle for the specific file type.
1272 *
1273 * @param fileName file name
1274 * @return temporary file handle
1275 * @throws IOException when fails to create new file handle
1276 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301277 protected File getTemporaryFileHandle(String fileName)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301278 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301279 String path = getTempDirPath(absoluteDirPath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301280 File dir = new File(path);
Bharat saraswal8beac342016-08-04 02:00:03 +05301281 boolean isCreated;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301282 if (!dir.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301283 isCreated = dir.mkdirs();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301284 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301285 throw new IOException("failed to create temporary directory " +
1286 "for " + fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301287 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301288 }
1289 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1290 if (!file.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301291 isCreated = file.createNewFile();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301292 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301293 throw new IOException("failed to create temporary file for " +
1294 fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301295 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301296 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301297 throw new IOException(fileName + " is reused due to YANG naming. " +
1298 "probably your previous build " +
1299 "would have failed");
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301300 }
1301 return file;
1302 }
1303
1304 /**
1305 * Returns a temporary file handle for the specific file type.
1306 *
1307 * @param fileName file name
1308 * @return temporary file handle
1309 * @throws IOException when fails to create new file handle
1310 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301311 public File getJavaFileHandle(String fileName)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301312 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301313 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
1314 javaFileInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301315 }
1316
1317 /**
1318 * Returns data from the temporary files.
1319 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301320 * @param file temporary file handle
Bharat saraswald14cbe82016-07-14 13:26:18 +05301321 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301322 * @return stored data from temporary files
1323 * @throws IOException when failed to get data from the given file
1324 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301325 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301326 throws IOException {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301327 String path = getTempDirPath(absolutePath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301328 if (new File(path + file.getName()).exists()) {
1329 return readAppendFile(path + file.getName(), EMPTY_STRING);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301330 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301331 throw new IOException("Unable to get data from the given " +
1332 file.getName() + " file for " +
1333 getGeneratedJavaClassName() + PERIOD);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301334 }
1335
1336 /**
1337 * Returns temporary directory path.
1338 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301339 * @param path absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301340 * @return directory path
1341 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301342 private String getTempDirPath(String path) {
1343 return getPackageDirPathFromJavaJPackage(path) + SLASH +
1344 getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301345 }
1346
1347 /**
1348 * Parses attribute to get the attribute string.
1349 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301350 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301351 * @return attribute string
1352 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301353 protected String parseAttribute(JavaAttributeInfo attr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301354 /*
1355 * TODO: check if this utility needs to be called or move to the caller
1356 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301357 String attrName = attr.getAttributeName();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301358 String attrAccessType = PRIVATE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301359 if ((getGeneratedJavaFiles() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301360 attrAccessType = PROTECTED;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301361 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301362 String pkg = null;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301363 if (attr.isQualifiedName()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301364 pkg = attr.getImportInfo().getPkgInfo();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301365 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301366 return getJavaAttributeDefinition(
1367 pkg, attr.getImportInfo().getClassInfo(), attrName,
1368 attr.isListAttr(), attrAccessType, attr.getCompilerAnnotation());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301369 }
1370
1371 /**
1372 * Appends content to temporary file.
1373 *
1374 * @param file temporary file
1375 * @param data data to be appended
1376 * @throws IOException when fails to append to file
1377 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301378 protected void appendToFile(File file, String data)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301379 throws IOException {
1380 try {
1381 insertDataIntoJavaFile(file, data);
1382 } catch (IOException ex) {
1383 throw new IOException("failed to write in temp file.");
1384 }
1385 }
1386
1387 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301388 * Adds parent's info to current node import list.
1389 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301390 * @param curNode current node
1391 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301392 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301393 protected void addParentInfoInCurNodeTempFile(YangNode curNode,
1394 YangPluginConfig config) {
1395 JavaQualifiedTypeInfoTranslator caseImportInfo =
1396 new JavaQualifiedTypeInfoTranslator();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301397 YangNode parent = getParentNodeInGenCode(curNode);
Bharat saraswale50edca2016-08-05 01:58:25 +05301398 if (curNode instanceof YangCase && parent instanceof YangAugment) {
1399 return;
1400 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301401 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301402 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301403 }
1404 if (!(curNode instanceof JavaFileInfoContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301405 throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301406 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301407 caseImportInfo.setClassInfo(
1408 getCapitalCase(getCamelCase(parent.getName(),
1409 config.getConflictResolver())));
1410 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
1411 .getPackage());
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301412
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301413 JavaFileInfoTranslator fileInfo =
1414 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301415
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301416 getBeanFiles(curNode).getJavaImportData().addImportInfo(
1417 caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
1418 fileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301419 }
1420
1421 /**
1422 * Adds leaf attributes in generated files.
1423 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301424 * @param entry JAVA leaf info container
1425 * @param config plugin config
1426 * @param curNode current node
1427 * @param leafList flag indicating whether leaf container is leafList
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301428 * @throws IOException IO operation fail
1429 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301430 private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
1431 YangPluginConfig config,
1432 YangNode curNode,
1433 boolean leafList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301434 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301435 if (entry != null) {
1436 if (curNode instanceof RpcNotificationContainer) {
1437 TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
1438 addJavaSnippetInfoToApplicableTempFiles(
1439 getJavaAttributeOfLeaf(tempFiles, entry,
1440 config, leafList), config);
1441 } else {
1442 addJavaSnippetInfoToApplicableTempFiles(
1443 getJavaAttributeOfLeaf(this, entry,
1444 config, leafList), config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301445 }
1446 }
1447 }
1448
1449 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301450 * Adds all the leaves in the current data model node as part of the
1451 * generated temporary file.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301452 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301453 * @param curNode current node
1454 * @param config plugin config
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301455 * @throws IOException IO operation fail
1456 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301457 protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
1458 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301459 throws IOException {
1460 if (!(curNode instanceof YangLeavesHolder)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301461 throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
1462 curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301463 }
1464 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301465
1466 for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
1467 addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
1468 curNode, false);
1469 }
1470
1471 for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
1472 addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
1473 curNode, true);
1474 }
1475 }
1476
1477 /**
1478 * Adds operation type to temp files.
1479 *
1480 * @param curNode current YANG node
1481 * @param config YANG plugin config
1482 * @throws IOException IO exception
1483 */
1484 protected void addOperationTypeToTempFiles(YangNode curNode,
1485 YangPluginConfig config)
1486 throws IOException {
1487 JavaQualifiedTypeInfoTranslator typeInfo =
1488 new JavaQualifiedTypeInfoTranslator();
1489 typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
Bharat saraswal94844d62016-10-13 13:28:03 +05301490 JavaFileInfo curInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1491 JavaFileInfo info;
1492 if (curNode instanceof RpcNotificationContainer) {
1493 info = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1494 } else {
1495 info = ((JavaFileInfoContainer) getModuleNode(curNode))
1496 .getJavaFileInfo();
1497 }
1498
1499 typeInfo.setPkgInfo(info.getPackage().toLowerCase() + PERIOD +
1500 getCapitalCase(info.getJavaName()));
1501 String curNodeName = getCapitalCase(curInfo.getJavaName());
1502 if (!(curNode instanceof RpcNotificationContainer)) {
1503 javaImportData.addImportInfo(typeInfo, curNodeName, curInfo
1504 .getPackage());
1505 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301506 JavaAttributeInfo attributeInfo =
Bharat saraswal94844d62016-10-13 13:28:03 +05301507 getAttributeInfoForTheData(typeInfo, YANG + curNodeName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301508 OPERATION_TYPE_ATTRIBUTE, null, false, false);
1509 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301510 }
1511
Bharat saraswal94844d62016-10-13 13:28:03 +05301512 private YangNode getModuleNode(YangNode curNode) {
1513 YangNode tempNode = curNode.getParent();
1514 while (!(tempNode instanceof RpcNotificationContainer)) {
1515 tempNode = tempNode.getParent();
1516 }
1517 return tempNode;
1518 }
1519
1520 /**
1521 * Adds value leaf flag to temp files.
1522 *
1523 * @param config YANG plugin config
1524 * @param node YANG node
1525 * @throws IOException IO exception
1526 */
1527 protected void addValueLeafFlag(YangPluginConfig config, YangNode node)
1528 throws IOException {
1529 JavaFileInfo info = ((JavaFileInfoContainer) node).getJavaFileInfo();
1530 JavaQualifiedTypeInfoTranslator typeInfo =
1531 new JavaQualifiedTypeInfoTranslator();
1532 typeInfo.setClassInfo(BIT_SET);
1533 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
1534 this.getJavaImportData().addImportInfo(typeInfo, info.getJavaName(),
1535 info.getPackage());
1536 JavaAttributeInfo attributeInfo =
1537 getAttributeInfoForTheData(typeInfo, VALUE_LEAF, null, false, false);
1538 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1539 }
1540
1541 /**
1542 * Adds value leaf flag to temp files.
1543 *
1544 * @param config YANG plugin config
1545 * @throws IOException IO exception
1546 */
1547 protected void addSelectLeafFlag(YangPluginConfig config)
1548 throws IOException {
1549 JavaQualifiedTypeInfoTranslator typeInfo =
1550 new JavaQualifiedTypeInfoTranslator();
1551 typeInfo.setClassInfo(BIT_SET);
1552 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
1553 JavaAttributeInfo attributeInfo =
1554 getAttributeInfoForTheData(typeInfo, SELECT_LEAF, null, false, false);
1555 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1556 }
1557
1558 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +05301559 * Adds sub tree filtering to temp files.
1560 *
1561 * @param config YANG plugin config
1562 * @throws IOException IO exception
1563 */
1564 protected void addIsSubTreeFilteredFlag(YangPluginConfig config)
1565 throws IOException {
1566 JavaQualifiedTypeInfoTranslator typeInfo =
1567 new JavaQualifiedTypeInfoTranslator();
1568 typeInfo.setClassInfo(BOOLEAN_DATA_TYPE);
1569 typeInfo.setPkgInfo(null);
1570 JavaAttributeInfo attributeInfo =
1571 getAttributeInfoForTheData(typeInfo, SUBTREE_FILTERED, null, false, false);
1572 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1573 }
1574
1575 /**
Bharat saraswal94844d62016-10-13 13:28:03 +05301576 * Adds value leaf flag to temp files.
1577 *
1578 * @param config YANG plugin config
1579 * @throws IOException IO exception
1580 */
1581 protected void addYangAugmentedMap(YangPluginConfig config)
1582 throws IOException {
1583 JavaQualifiedTypeInfoTranslator typeInfo =
1584 new JavaQualifiedTypeInfoTranslator();
1585 typeInfo.setClassInfo(AUGMENT_MAP_TYPE);
1586 //Fix for add yangAugmentedInfo in equals/hashcode/and to string method.
1587 typeInfo.setPkgInfo(null);
1588 JavaAttributeInfo attributeInfo =
1589 getAttributeInfoForTheData(typeInfo, YANG_AUGMENTED_INFO_MAP,
1590 null, false, false);
1591 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1592 }
1593
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301594 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301595 * Adds the new attribute info to the target generated temporary files.
1596 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301597 * @param newAttrInfo new attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301598 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301599 * @throws IOException IO operation fail
1600 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301601 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
1602 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301603 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301604 isAttributePresent = true;
Bharat saraswal94844d62016-10-13 13:28:03 +05301605 String attrName = newAttrInfo.getAttributeName();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301606 //Boolean flag for operation type attr info generation control.
Bharat saraswal94844d62016-10-13 13:28:03 +05301607 boolean required = !attrName.equals(VALUE_LEAF) &&
1608 !attrName.equals(SELECT_LEAF) &&
1609 !attrName.equals(YANG_AUGMENTED_INFO_MAP);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301610 //Boolean flag for subtree for nodes info generation control.
1611 boolean subTreeForChild =
1612 tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
1613 newAttrInfo.getAttributeType() == null &&
1614 !attrName.contains(OPERATION_TYPE_ATTRIBUTE) &&
1615 required && !attrName.equals(SUBTREE_FILTERED);
1616 ;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301617 if (tempFlagSet(ATTRIBUTES_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301618 addAttribute(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301619 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301620 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301621 addGetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301622 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301623 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK) && required) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301624 addSetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301625 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301626 if (tempFlagSet(SETTER_FOR_CLASS_MASK) && required) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301627 addSetterImpl(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301628 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301629 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301630 addHashCodeMethod(newAttrInfo);
1631 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301632 if (tempFlagSet(EQUALS_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301633 addEqualsMethod(newAttrInfo);
1634 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301635 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301636 addToStringMethod(newAttrInfo);
1637 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301638 if (tempFlagSet(EDIT_CONTENT_MASK)) {
Bharat saraswale50edca2016-08-05 01:58:25 +05301639 //TODO: add implementation for edit content match.
1640 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301641 boolean listAttr = newAttrInfo.isListAttr();
1642 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301643 addAddToListImpl(newAttrInfo);
1644 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301645 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301646 addAddToListInterface(newAttrInfo);
Bharat saraswal8beac342016-08-04 02:00:03 +05301647 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301648 YangType attrType = newAttrInfo.getAttributeType();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301649 if (subTreeForChild) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301650 addSubtreeFilteringForChildNode(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301651 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301652 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
1653 !listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301654 addSubTreeFilteringForLeaf(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301655 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301656 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
1657 listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301658 addSubtreeFilteringForLeafList(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301659 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301660 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
1661 !listAttr && attrType != null) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301662 leafCount++;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301663 addLeafIdAttributes(newAttrInfo, leafCount);
Bharat saraswal8beac342016-08-04 02:00:03 +05301664 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301665 if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
1666 !newAttrInfo.isShortConflict()) {
1667 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301668 addGetterImpl(newAttrInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301669 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301670 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1671 JavaQualifiedTypeInfoTranslator typeInfo =
1672 getQualifiedInfoOfFromString(newAttrInfo,
1673 pluginConfig.getConflictResolver());
Bharat saraswal250a7472016-05-12 13:16:57 +05301674 /*
1675 * Create a new java attribute info with qualified information of
1676 * wrapper classes.
1677 */
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301678 JavaAttributeInfo fromStringAttributeInfo =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301679 getAttributeInfoForTheData(
1680 typeInfo, newAttrInfo.getAttributeName(),
1681 attrType, getIsQualifiedAccessOrAddToImportList(
1682 typeInfo), false);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301683 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301684 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301685 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301686 }
1687
1688 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301689 * Returns JAVA class name for non implementation classes.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301690 *
1691 * @param suffix for the class name based on the file type
1692 * @return java class name
1693 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301694 protected String getJavaClassName(String suffix) {
1695 return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301696 }
1697
1698 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301699 * Returns class name for implementation classes.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301700 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301701 * @param node YANG node
Bharat saraswald14cbe82016-07-14 13:26:18 +05301702 * @return java class name
1703 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301704 private String getImplClassName(YangNode node) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301705 if (node instanceof RpcNotificationContainer) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301706 return getGeneratedJavaClassName() + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +05301707 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301708 return DEFAULT_CAPS + getGeneratedJavaClassName();
Bharat saraswald14cbe82016-07-14 13:26:18 +05301709 }
1710
1711 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301712 * Returns the directory path.
1713 *
1714 * @return directory path
1715 */
1716 private String getDirPath() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301717 return javaFileInfo.getPackageFilePath();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301718 }
1719
1720 /**
1721 * Constructs java code exit.
1722 *
1723 * @param fileType generated file type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301724 * @param curNode current YANG node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301725 * @throws IOException when fails to generate java files
1726 */
1727 public void generateJavaFile(int fileType, YangNode curNode)
1728 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301729 List<String> imports =
1730 getBeanFiles(curNode).getJavaImportData().getImports();
Bharat saraswal8beac342016-08-04 02:00:03 +05301731 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301732 addImportsForAugmentableClass(imports, true, true, curNode);
Bharat saraswal8beac342016-08-04 02:00:03 +05301733 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301734 createPackage(curNode);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301735
1736 //Generate java code.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301737 if ((fileType & INTERFACE_MASK) != 0 ||
1738 (fileType & BUILDER_INTERFACE_MASK) != 0) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301739
1740 //Create interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301741 interfaceJavaFileHandle =
1742 getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
1743 interfaceJavaFileHandle =
1744 generateInterfaceFile(interfaceJavaFileHandle, imports,
1745 curNode, isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301746
Bharat saraswal94844d62016-10-13 13:28:03 +05301747 //Create builder interface file.
1748 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1749 builderInterfaceJavaFileHandle =
1750 getJavaFileHandle(getJavaClassName(
1751 BUILDER_INTERFACE_FILE_NAME_SUFFIX));
1752 builderInterfaceJavaFileHandle =
1753 generateBuilderInterfaceFile(
1754 builderInterfaceJavaFileHandle,
1755 curNode, isAttributePresent);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301756 /*
1757 * Append builder interface file to interface file and
1758 * close it.
1759 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301760 mergeJavaFiles(builderInterfaceJavaFileHandle,
1761 interfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301762 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301763
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301764 insertDataIntoJavaFile(interfaceJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301765 validateLineLength(interfaceJavaFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301766 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301767 addImportsForAugmentableClass(imports, false, true, curNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301768 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301769 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301770
Bharat saraswal0663aff2016-10-18 23:16:14 +05301771 if (curNode.isOpTypeReq()) {
1772 addSubTreeImportStrings(imports);
1773 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301774
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301775 if ((fileType & BUILDER_CLASS_MASK) != 0 ||
1776 (fileType & DEFAULT_CLASS_MASK) != 0) {
1777 if (isAttributePresent) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301778 addImportsToStringAndHasCodeMethods(imports, true);
Bharat saraswal8beac342016-08-04 02:00:03 +05301779 addArrayListImport(imports);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301780 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301781
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301782 addBitsAndBase64Imports(curNode, imports);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301783 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301784 addImportsForAugmentableClass(imports, true, false, curNode);
Bharat saraswal94844d62016-10-13 13:28:03 +05301785 if (curNode.isOpTypeReq()) {
1786 addInvocationExceptionImport(imports);
1787 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301788 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301789 sortImports(imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301790
1791 //Create impl class file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301792 implClassJavaFileHandle =
1793 getJavaFileHandle(getImplClassName(curNode));
1794 implClassJavaFileHandle =
1795 generateDefaultClassFile(implClassJavaFileHandle,
1796 curNode, isAttributePresent,
1797 imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301798
1799 //Create builder class file.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301800 if ((fileType & BUILDER_CLASS_MASK) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301801 builderClassJavaFileHandle =
1802 getJavaFileHandle(getJavaClassName(
1803 BUILDER_CLASS_FILE_NAME_SUFFIX));
1804 builderClassJavaFileHandle =
1805 generateBuilderClassFile(builderClassJavaFileHandle,
1806 curNode,
1807 isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301808
1809 //Append impl class to builder class and close it.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301810 mergeJavaFiles(builderClassJavaFileHandle,
1811 implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301812 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301813 insertDataIntoJavaFile(implClassJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301814 validateLineLength(implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301815 }
Vidyashree Ramab3670472016-08-06 15:49:56 +05301816 //Close all the file handles.
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301817 freeTemporaryResources(false);
1818 }
1819
Vidyashree Ramab3670472016-08-06 15:49:56 +05301820 //Adds import for array list.
Bharat saraswal8beac342016-08-04 02:00:03 +05301821 private void addArrayListImport(List<String> imports) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301822 if (imports.contains(javaImportData.getImportForList())) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301823 imports.add(ARRAY_LIST_IMPORT);
1824 }
1825 }
1826
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301827 //Adds import for bitset and base64 list.
1828 private void addBitsAndBase64Imports(YangNode curNode, List<String> imports) {
1829 if (curNode instanceof YangLeavesHolder) {
1830 YangLeavesHolder holder = (YangLeavesHolder) curNode;
Bharat saraswal94844d62016-10-13 13:28:03 +05301831 String impt = getJavaImportData()
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301832 .getImportForToBitSet();
1833 if (!holder.getListOfLeaf().isEmpty() &&
1834 !imports.contains(impt)) {
1835 imports.add(impt);
1836 }
1837 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301838 }
1839
1840 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301841 * Adds imports for ToString and HashCodeMethod.
1842 *
Bharat saraswal039f59c2016-07-14 21:57:13 +05301843 * @param imports import list
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301844 * @param operation add or remove
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301845 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301846 protected void addImportsToStringAndHasCodeMethods(List<String> imports,
1847 boolean operation) {
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301848 if (operation) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301849 imports.add(javaImportData.getImportForHashAndEquals());
1850 imports.add(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301851 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301852 imports.remove(javaImportData.getImportForHashAndEquals());
1853 imports.remove(javaImportData.getImportForToString());
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301854 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301855 // TODO change boolean to OPERATION, in all related places.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301856 }
1857
1858 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301859 * Adds import for map and hash map.
1860 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301861 * @param imports import list
1862 * @param operations true for adding and false for deletion
1863 * @param isInterfaceFile if need to add in interface file
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301864 * @param curNode current node
Bharat saraswalaf413b82016-07-14 15:18:20 +05301865 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301866 private void addImportsForAugmentableClass(List<String> imports,
1867 boolean operations,
1868 boolean isInterfaceFile,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301869 YangNode curNode) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301870 if (operations) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301871 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301872 imports.add(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05301873 }
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301874 // Add import for hash map only if node is not a YANG choice.
1875 if (!(curNode instanceof YangChoice)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301876 imports.add(javaImportData.getMapImport());
Gaurav Agrawal8a147522016-08-10 13:43:01 +05301877 }
Bharat saraswal039f59c2016-07-14 21:57:13 +05301878 } else {
Bharat saraswal8beac342016-08-04 02:00:03 +05301879 if (!isInterfaceFile) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301880 imports.remove(javaImportData.getHashMapImport());
Bharat saraswal8beac342016-08-04 02:00:03 +05301881 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301882 imports.remove(javaImportData.getMapImport());
Bharat saraswald14cbe82016-07-14 13:26:18 +05301883 }
Bharat saraswal8beac342016-08-04 02:00:03 +05301884 sortImports(imports);
Bharat saraswald14cbe82016-07-14 13:26:18 +05301885 }
1886
1887 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301888 * Adds invocation exception import.
Bharat saraswal039f59c2016-07-14 21:57:13 +05301889 *
1890 * @param imports list of imports
Bharat saraswal039f59c2016-07-14 21:57:13 +05301891 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301892 private void addInvocationExceptionImport(List<String> imports) {
1893 imports.add(INVOCATION_TARGET_EXCEPTION_IMPORT);
Bharat saraswal039f59c2016-07-14 21:57:13 +05301894 }
1895
1896 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301897 * Removes all temporary file handles.
1898 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301899 * @param errorOccurred flag indicating if error occurred
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301900 * @throws IOException when failed to delete the temporary files
1901 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301902 public void freeTemporaryResources(boolean errorOccurred)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301903 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301904 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301905 * Close all java file handles and when error occurs delete the files.
1906 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301907 if (javaFlagSet(INTERFACE_MASK)) {
1908 closeFile(interfaceJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301909 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301910 if (javaFlagSet(BUILDER_CLASS_MASK)) {
1911 closeFile(builderClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301912 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301913 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
1914 closeFile(builderInterfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301915 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301916 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
1917 closeFile(implClassJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301918 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301919 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301920 * Close all temporary file handles and delete the files.
1921 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301922 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
1923 closeFile(getterImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301924 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301925 if (tempFlagSet(ATTRIBUTES_MASK)) {
1926 closeFile(attributesTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301927 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301928 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
1929 closeFile(hashCodeImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301930 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301931 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
1932 closeFile(toStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301933 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301934 if (tempFlagSet(EQUALS_IMPL_MASK)) {
1935 closeFile(equalsImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301936 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301937 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1938 closeFile(fromStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301939 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301940 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
1941 closeFile(addToListImplTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301942 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301943 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
1944 closeFile(addToListInterfaceTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301945 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301946 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
1947 closeFile(leafIdAttributeTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05301948 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301949 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
1950 closeFile(subtreeFilteringForLeafTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301951 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301952 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
1953 closeFile(getSubtreeFilteringForListTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301954 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301955 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
1956 closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301957 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301958 if (tempFlagSet(EDIT_CONTENT_MASK)) {
1959 closeFile(editContentTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05301960 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301961 }
1962
1963 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301964 * Returns if the attribute needs to be accessed in a qualified manner or
1965 * not, if it needs to be imported, then the same needs to be done.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301966 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301967 * @param importInfo import info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301968 * @return status of the qualified access to the attribute
1969 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301970 protected boolean getIsQualifiedAccessOrAddToImportList(
1971 JavaQualifiedTypeInfo importInfo) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301972 return javaImportData
1973 .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
1974 getGeneratedJavaClassName(),
1975 javaFileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301976 }
1977
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301978 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301979 * Returns temp file handle for add to list interface.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301980 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301981 * @return temp file handle for add to list interface
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301982 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301983 public File getAddToListInterfaceTempFileHandle() {
1984 return addToListInterfaceTempFileHandle;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301985 }
1986
1987 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301988 * Returns temp file handle for add to list impl.
1989 *
1990 * @return temp file handle for add to list impl
1991 */
1992 public File getAddToListImplTempFileHandle() {
1993 return addToListImplTempFileHandle;
1994 }
1995
1996 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301997 * Returns temp file handle for leaf identifier attributes.
1998 *
1999 * @return temp file handle for leaf identifier attributes
2000 */
2001 public File getLeafIdAttributeTempFileHandle() {
2002 return leafIdAttributeTempFileHandle;
2003 }
2004
2005 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302006 * Sets true if root node.
2007 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302008 * @param rootNode true if root node
Bharat saraswal8beac342016-08-04 02:00:03 +05302009 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302010 void setRootNode(boolean rootNode) {
2011 this.rootNode = rootNode;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302012 }
Bharat saraswale50edca2016-08-05 01:58:25 +05302013
2014 /**
2015 * Returns temp file for is content match.
2016 *
2017 * @return temp file for is content match
2018 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302019 public File getSubtreeFilteringForLeafTempFileHandle() {
2020 return subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302021 }
2022
2023 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302024 * Returns temp file for edit content file.
2025 *
2026 * @return temp file for edit content file
2027 */
2028 public File getEditContentTempFileHandle() {
2029 return editContentTempFileHandle;
2030 }
2031
2032 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302033 * Returns temp file for is content match.
2034 *
2035 * @return temp file for is content match
2036 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302037 public File getGetSubtreeFilteringForListTempFileHandle() {
2038 return getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302039 }
2040
2041 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302042 * Returns temp file for is content match.
2043 *
2044 * @return temp file for is content match
2045 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302046 public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
2047 return getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302048 }
2049
2050 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302051 * Checks if a given flag is set in generated java files.
2052 * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
2053 * <pre>
2054 * javaFlagSet(FOO | BAR)
2055 * </pre>
2056 * returns true if either FOO flag or BAR flag is set.
Bharat saraswale50edca2016-08-05 01:58:25 +05302057 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302058 * @param flag input flag mask value
2059 * @return true if set, else false
Bharat saraswale50edca2016-08-05 01:58:25 +05302060 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302061 private boolean javaFlagSet(int flag) {
2062 return (getGeneratedJavaFiles() & flag) != 0;
2063 }
2064
2065 /**
2066 * Checks if a given flag is set in temp files.
2067 *
2068 * @param flag input flag mask value
2069 * @return true if set, else false
2070 */
2071 private boolean tempFlagSet(int flag) {
2072 return (tempFilesFlagSet & flag) != 0;
Bharat saraswale50edca2016-08-05 01:58:25 +05302073 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +05302074
2075 /**
Bharat saraswal94844d62016-10-13 13:28:03 +05302076 * Sets true if binary type is there for leaf/leaf-list.
2077 *
2078 * @param binary true if binary type is there for leaf/leaf-list
2079 */
2080 public void setBinary(boolean binary) {
2081 isBinary = binary;
2082 }
2083
2084 /**
2085 * Returns true if binary type is there for leaf/leaf-list.
2086 *
2087 * @return true if binary type is there for leaf/leaf-list
2088 */
2089 public boolean isBinary() {
2090 return isBinary;
2091 }
2092
Bharat saraswal0663aff2016-10-18 23:16:14 +05302093 /**
2094 * Sets attribute's node.
2095 *
2096 * @param attrNode attribute's node
2097 */
2098 public void setAttrNode(YangNode attrNode) {
2099 this.attrNode = attrNode;
2100 }
2101
2102 /**
2103 * Adds info to sub tree import list.
2104 *
2105 * @param info import info
2106 */
2107 public void addToSubTreeImports(JavaQualifiedTypeInfoTranslator
2108 info) {
2109 boolean isAdded = false;
2110 for (JavaQualifiedTypeInfoTranslator imports : subTreeImports) {
2111 if (imports.getClassInfo().equals(info.getClassInfo())) {
2112 isAdded = true;
2113 }
2114 }
2115 if (!isAdded) {
2116 subTreeImports.add(info);
2117 }
2118 }
2119
2120 private void addSubTreeImportStrings(List<String> imports) {
2121 for (JavaQualifiedTypeInfoTranslator impt : subTreeImports) {
2122 imports.add(getImportString(impt.getPkgInfo(), impt.getClassInfo()));
2123 }
2124 sortImports(imports);
2125 }
Bharat saraswalc2fd3222016-10-19 16:10:27 +05302126
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302127}