blob: 548dbac3e135015aafdbb0be93ff985c1fb46ff2 [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;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053020import org.onosproject.yangutils.datamodel.YangCase;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053021import org.onosproject.yangutils.datamodel.YangChoice;
Bharat saraswala5c28512016-11-10 21:09:23 +053022import org.onosproject.yangutils.datamodel.YangDataStructure;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053023import org.onosproject.yangutils.datamodel.YangLeaf;
24import org.onosproject.yangutils.datamodel.YangLeafList;
25import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vidyashree Ramab3670472016-08-06 15:49:56 +053026import org.onosproject.yangutils.datamodel.YangList;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053027import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb41904b2016-10-20 19:22:36 +053028import org.onosproject.yangutils.datamodel.YangSchemaNode;
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 saraswala5c28512016-11-10 21:09:23 +053036import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeafTranslator;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +053037import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053038import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053039
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053040import java.io.File;
41import java.io.IOException;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053042import java.util.ArrayList;
Bharat saraswala5c28512016-11-10 21:09:23 +053043import java.util.Iterator;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053044import java.util.List;
45
Bharat saraswalc2d3be12016-06-16 00:29:12 +053046import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
Bharat saraswala5c28512016-11-10 21:09:23 +053047import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswalaf413b82016-07-14 15:18:20 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Bharat saraswal250a7472016-05-12 13:16:57 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
71import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053072import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
73import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswal0663aff2016-10-18 23:16:14 +053074import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateBitsFile;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +053075import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
Bharat saraswal8beac342016-08-04 02:00:03 +053076import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
77import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053078import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
79import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
Bharat saraswal8beac342016-08-04 02:00:03 +053080import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053081import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
Bharat saraswala5c28512016-11-10 21:09:23 +053082import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateKeyClassFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053083import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
Bharat saraswald14cbe82016-07-14 13:26:18 +053084import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
Bharat saraswal8beac342016-08-04 02:00:03 +053085import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
86import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053087import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053088import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
89import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal250a7472016-05-12 13:16:57 +053090import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
96import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
Bharat saraswala5c28512016-11-10 21:09:23 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
Bharat saraswal94844d62016-10-13 13:28:03 +053099import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530100import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530101import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
102import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
103import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
104import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
105import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
106import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
107import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
108import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
109import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
Bharat saraswal94844d62016-10-13 13:28:03 +0530110import static org.onosproject.yangutils.utils.UtilConstants.AUGMENT_MAP_TYPE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530111import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530112import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530113import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswala5c28512016-11-10 21:09:23 +0530114import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530115import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530116import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530117import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530118import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswala5c28512016-11-10 21:09:23 +0530119import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
120import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530121import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswala5c28512016-11-10 21:09:23 +0530122import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530123import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530124import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_CLASS;
125import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_PKG;
126import static org.onosproject.yangutils.utils.UtilConstants.HASH_MAP;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530127import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530128import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530129import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530130import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
Bharat saraswala5c28512016-11-10 21:09:23 +0530131import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530132import static org.onosproject.yangutils.utils.UtilConstants.MAP;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530133import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530134import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
135import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_CLASS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530136import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530137import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530138import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
139import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswala5c28512016-11-10 21:09:23 +0530140import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530141import static org.onosproject.yangutils.utils.UtilConstants.REFLECT_IMPORTS;
Bharat saraswal94844d62016-10-13 13:28:03 +0530142import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +0530143import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530144import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
Bharat saraswala5c28512016-11-10 21:09:23 +0530145import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530146import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal94844d62016-10-13 13:28:03 +0530147import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530148import static org.onosproject.yangutils.utils.UtilConstants.YANG;
Bharat saraswal94844d62016-10-13 13:28:03 +0530149import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530150import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530151import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
Bharat saraswal8beac342016-08-04 02:00:03 +0530152import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530153import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswalb41904b2016-10-20 19:22:36 +0530154import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530155import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530156import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530157import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
158import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
159import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530160import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
161import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
Bharat saraswalc2d3be12016-06-16 00:29:12 +0530162import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530163
164/**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530165 * Represents implementation of java code fragments temporary implementations.
166 * Manages the common temp file required for Java file(s) generated.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530167 */
168public class TempJavaFragmentFiles {
Bharat saraswal250a7472016-05-12 13:16:57 +0530169
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530170 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530171 * File type extension for java classes.
172 */
173 private static final String JAVA_FILE_EXTENSION = ".java";
Bharat saraswal250a7472016-05-12 13:16:57 +0530174
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530175 /**
176 * File type extension for temporary classes.
177 */
178 private static final String TEMP_FILE_EXTENSION = ".tmp";
Bharat saraswal250a7472016-05-12 13:16:57 +0530179
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530180 /**
181 * Folder suffix for temporary files folder.
182 */
Bharat saraswal64e7e232016-07-14 23:33:55 +0530183 private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530184
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530185 /**
186 * File name for getter method.
187 */
188 private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530189
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530190 /**
191 * File name for setter method.
192 */
193 private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530194
195 /**
196 * File name for getter method implementation.
197 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530198 private static final String GETTER_METHOD_IMPL_FILE_NAME =
199 "GetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530200
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530201 /**
202 * File name for setter method implementation.
203 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530204 private static final String SETTER_METHOD_IMPL_FILE_NAME =
205 "SetterMethodImpl";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530206
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530207 /**
208 * File name for attributes.
209 */
210 private static final String ATTRIBUTE_FILE_NAME = "Attributes";
Bharat saraswal250a7472016-05-12 13:16:57 +0530211
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530212 /**
213 * File name for to string method.
214 */
215 private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
Bharat saraswal250a7472016-05-12 13:16:57 +0530216
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530217 /**
218 * File name for hash code method.
219 */
220 private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
Bharat saraswal250a7472016-05-12 13:16:57 +0530221
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530222 /**
223 * File name for equals method.
224 */
225 private static final String EQUALS_METHOD_FILE_NAME = "Equals";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530226
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530227 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530228 * File name for from string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530229 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530230 private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530231
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530232 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530233 * File name for from add to list interface method.
234 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235 private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
236 "addToList";
Bharat saraswal8beac342016-08-04 02:00:03 +0530237
238 /**
239 * File name for from add to list impl method.
240 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530241 private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
242 "addToListImpl";
Bharat saraswal8beac342016-08-04 02:00:03 +0530243
244 /**
245 * File name for from leaf identifier attributes.
246 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530247 private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
248 "leafIdentifierAtr";
Bharat saraswal8beac342016-08-04 02:00:03 +0530249
250 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530251 * File name for is filter content leaf match.
252 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530253 private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
254 "isFilterContentMatchLeafMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530255
256 /**
257 * File name for is filter content leaf-list match.
258 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530259 private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
260 "isFilterContentMatchLeafListMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530261
262 /**
263 * File name for is filter content node match.
264 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530265 private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
266 "isFilterContentMatchNodeMask";
Bharat saraswale50edca2016-08-05 01:58:25 +0530267
268 /**
269 * File name for edit content file.
270 */
271 private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
272
273 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530274 * File name for interface java file name suffix.
275 */
276 private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
Bharat saraswal250a7472016-05-12 13:16:57 +0530277
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530278 /**
279 * File name for builder interface file name suffix.
280 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530281 private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
282 BUILDER + INTERFACE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530283
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530284 /**
285 * File name for builder class file name suffix.
286 */
287 private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530288
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530289 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530290 * File name for list key class file name suffix.
291 */
292 private static final String KEY_CLASS_FILE_NAME_SUFFIX = KEYS;
293
294 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +0530295 * Current attributes YANG node
296 */
297 private YangNode attrNode;
298
299 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530300 * Information about the java files being generated.
301 */
Bharat saraswale50edca2016-08-05 01:58:25 +0530302 private JavaFileInfoTranslator javaFileInfo;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530303
304 /**
305 * Imported class info.
306 */
307 private JavaImportData javaImportData;
308
309 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530310 * The variable which guides the types of temporary files generated using
311 * the temporary generated file types mask.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530312 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530313 private int tempFilesFlagSet;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530314
315 /**
316 * Absolute path where the target java file needs to be generated.
317 */
318 private String absoluteDirPath;
319
320 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530321 * Contains all the interface(s)/class name which will be extended by
322 * generated files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530323 */
324 private JavaExtendsListHolder javaExtendsListHolder;
325
Bharat saraswald14cbe82016-07-14 13:26:18 +0530326 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530327 * Java file handle for interface file.
328 */
329 private File interfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530330
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530331 /**
332 * Java file handle for builder interface file.
333 */
334 private File builderInterfaceJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530335
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530336 /**
337 * Java file handle for builder class file.
338 */
339 private File builderClassJavaFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530340
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530341 /**
342 * Java file handle for impl class file.
343 */
344 private File implClassJavaFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530345
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530346 /**
347 * Temporary file handle for attribute.
348 */
349 private File attributesTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530350
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530351 /**
352 * Temporary file handle for getter of interface.
353 */
354 private File getterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530355
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530356 /**
357 * Temporary file handle for setter of interface.
358 */
359 private File setterInterfaceTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530360
361 /**
362 * Temporary file handle for getter of class.
363 */
364 private File getterImplTempFileHandle;
365
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530366 /**
367 * Temporary file handle for setter of class.
368 */
369 private File setterImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530370
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530371 /**
372 * Temporary file handle for hash code method of class.
373 */
374 private File hashCodeImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530375
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530376 /**
377 * Temporary file handle for equals method of class.
378 */
379 private File equalsImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530380
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530381 /**
382 * Temporary file handle for to string method of class.
383 */
384 private File toStringImplTempFileHandle;
Bharat saraswal250a7472016-05-12 13:16:57 +0530385
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530386 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530387 * Temporary file handle for from string method of class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530388 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530389 private File fromStringImplTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530390
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530391 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530392 * Temporary file handle for add to list interface method of class.
393 */
394 private File addToListInterfaceTempFileHandle;
395
396 /**
397 * Temporary file handle for add to list impl method of class.
398 */
399 private File addToListImplTempFileHandle;
400
401 /**
402 * Temporary file handle for leaf id attributes of enum.
403 */
404 private File leafIdAttributeTempFileHandle;
405
406 /**
Bharat saraswale50edca2016-08-05 01:58:25 +0530407 * Temporary file handle for is content match method for leaf-list.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530408 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530409 private File getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530410
411 /**
412 * Temporary file handle for is content match method for node.
413 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530414 private File getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530415
416 /**
417 * Temporary file handle for is content match method for leaf.
418 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530419 private File subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +0530420
421 /**
422 * Temporary file handle for edit content file.
423 */
424 private File editContentTempFileHandle;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530425
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530426 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530427 * Leaf count.
428 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530429 private int leafCount;
Bharat saraswal8beac342016-08-04 02:00:03 +0530430
431 /**
432 * If current node is root node.
433 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530434 private boolean rootNode;
Bharat saraswal8beac342016-08-04 02:00:03 +0530435
436 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530437 * Is attribute added.
438 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530439 private boolean isAttributePresent;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530440
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530441 /**
442 * Creates an instance of temp JAVA fragment files.
443 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530444 TempJavaFragmentFiles() {
445 }
446
447 /**
448 * Creates an instance of temporary java code fragment.
449 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530450 * @param fileInfo generated java file information
Bharat saraswalaf413b82016-07-14 15:18:20 +0530451 * @throws IOException when fails to create new file handle
452 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530453 protected TempJavaFragmentFiles(JavaFileInfoTranslator fileInfo)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530454 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530455 javaExtendsListHolder = new JavaExtendsListHolder();
456 javaImportData = new JavaImportData();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530457 javaFileInfo = fileInfo;
458 absoluteDirPath = getAbsolutePackagePath(fileInfo.getBaseCodeGenPath(),
459 fileInfo.getPackageFilePath());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530460 /*
461 * Initialize getter when generation file type matches to interface
462 * mask.
463 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530464 if (javaFlagSet(INTERFACE_MASK)) {
465 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
466 ADD_TO_LIST_INTERFACE_MASK |
467 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530468 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530469 /*
470 * Initialize getter and setter when generation file type matches to
471 * builder interface mask.
472 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530473 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
474 addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
475 SETTER_FOR_INTERFACE_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530476 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530477 /*
478 * Initialize getterImpl, setterImpl and attributes when generation file
479 * type matches to builder class mask.
480 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530481 if (javaFlagSet(BUILDER_CLASS_MASK)) {
482 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
483 SETTER_FOR_CLASS_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530484 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530485 /*
486 * Initialize getterImpl, attributes, constructor, hash code, equals and
487 * to strings when generation file type matches to impl class mask.
488 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530489 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
490 addGeneratedTempFile(
491 ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
492 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
493 TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
494 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
495 FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
496 FILTER_CONTENT_MATCH_FOR_NODES_MASK);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530497 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530498 /*
499 * Initialize temp files to generate type class.
500 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530501 if (javaFlagSet(GENERATE_TYPE_CLASS)) {
502 addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
503 HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530504 FROM_STRING_IMPL_MASK);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530505
506 if (getGeneratedJavaFiles() != GENERATE_UNION_CLASS) {
507 addGeneratedTempFile(TO_STRING_IMPL_MASK);
508 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530509 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530510
Vidyashree Ramab3670472016-08-06 15:49:56 +0530511 //Set temporary file handles
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530512 if (tempFlagSet(ATTRIBUTES_MASK)) {
513 attributesTempFileHandle =
514 getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530515 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530516 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
517 getterInterfaceTempFileHandle =
518 getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530519 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530520 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
521 setterInterfaceTempFileHandle =
522 getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530523 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530524 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
525 getterImplTempFileHandle =
526 getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530527 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530528 if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
529 setterImplTempFileHandle =
530 getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530531 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530532 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
533 hashCodeImplTempFileHandle =
534 getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530535 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530536 if (tempFlagSet(EQUALS_IMPL_MASK)) {
537 equalsImplTempFileHandle =
538 getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530539 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530540 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
541 toStringImplTempFileHandle =
542 getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530543 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530544 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
545 fromStringImplTempFileHandle =
546 getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530547 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530548 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
549 addToListInterfaceTempFileHandle =
550 getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530551 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530552 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
553 addToListImplTempFileHandle =
554 getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530555 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530556 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
557 leafIdAttributeTempFileHandle =
558 getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
Bharat saraswal8beac342016-08-04 02:00:03 +0530559 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530560 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
561 subtreeFilteringForLeafTempFileHandle =
562 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530563 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530564 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
565 getSubtreeFilteringForListTempFileHandle =
566 getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530567 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530568 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
569 getSubtreeFilteringForChildNodeTempFileHandle =
570 getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530571 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 if (tempFlagSet(EDIT_CONTENT_MASK)) {
573 editContentTempFileHandle =
574 getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
Bharat saraswale50edca2016-08-05 01:58:25 +0530575 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530576 }
577
578 /**
579 * Adds current node info as and attribute to the parent generated file.
580 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530581 * @param curNode current node
582 * @param isList is list construct
583 * @param config plugin configurations
Bharat saraswalaf413b82016-07-14 15:18:20 +0530584 * @throws IOException IO operation exception
585 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530586 protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
587 boolean isList,
588 YangPluginConfig config)
Bharat saraswalaf413b82016-07-14 15:18:20 +0530589 throws IOException {
590 YangNode parent = getParentNodeInGenCode(curNode);
591 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530592 throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
593 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530594 }
Shankara-Huaweib7564772016-08-02 18:13:13 +0530595 if (parent instanceof YangJavaGroupingTranslator) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530596 /*
597 * In case of grouping, there is no need to add the information, it
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 * will be taken care in uses.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530599 */
600 return;
601 }
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530602 addCurNodeInfoInParentTempFile(curNode, isList, config, parent);
603 }
604
605 /**
606 * Adds current node info as and attribute to a specified parent generated
607 * file. In case of grouping parent will be referred grouping node or
608 * referred node in grouping.
609 *
610 * @param curNode current node
611 * @param isList is list construct
612 * @param config plugin configurations
613 * @param parent parent node
614 * @throws IOException IO operation exception
615 */
616 protected static void addCurNodeInfoInParentTempFile(
617 YangNode curNode, boolean isList, YangPluginConfig config,
618 YangNode parent)
619 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530620 TempJavaBeanFragmentFiles tempFiles =
621 getBeanFiles((JavaCodeGeneratorInfo) parent);
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530622 tempFiles.setAttrNode(curNode);
Bharat saraswal51c5d672016-11-13 09:03:48 +0530623 JavaFileInfoTranslator fileInfo = ((JavaCodeGeneratorInfo) parent)
624 .getJavaFileInfo();
625 if (curNode instanceof YangChoice && curNode.isOpTypeReq()) {
Bharat saraswalb41904b2016-10-20 19:22:36 +0530626 JavaQualifiedTypeInfoTranslator info = new
627 JavaQualifiedTypeInfoTranslator();
628 info.setClassInfo(INVOCATION_TARGET_EXCEPTION);
629 info.setPkgInfo(REFLECT_IMPORTS);
Bharat saraswal51c5d672016-11-13 09:03:48 +0530630 info.setForInterface(false);
631 tempFiles.getJavaImportData().addImportInfo(
632 info, getCapitalCase(fileInfo.getJavaName()),
633 fileInfo.getPackage());
Bharat saraswalb41904b2016-10-20 19:22:36 +0530634 }
635 JavaAttributeInfo attr = getCurNodeAsAttributeInTarget(
636 curNode, parent, isList, tempFiles);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530637 tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530638 }
639
640 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530641 * Creates an attribute info object corresponding to a data model node
642 * and return it.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530643 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530644 * @param curNode current node
645 * @param targetNode target node
646 * @param listNode flag indicating if a node is a list node
647 * @param tempFiles temp java fragment files
648 * @return java attribute info
Bharat saraswalaf413b82016-07-14 15:18:20 +0530649 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530650 public static JavaAttributeInfo
651 getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
652 boolean listNode,
653 TempJavaFragmentFiles tempFiles) {
654 JavaFileInfoTranslator translator =
655 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
656 String curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530657 if (curNodeName == null) {
658 updateJavaFileInfo(curNode, null);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530659 curNodeName = translator.getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530660 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530661 /*
662 * Get the import info corresponding to the attribute for import in
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530663 * generated java files or qualified access.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530664 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530665 JavaQualifiedTypeInfoTranslator typeInfo =
666 getQualifiedTypeInfoOfCurNode(curNode,
667 getCapitalCase(curNodeName));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530668 if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530669 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
670 curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530671 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530672 JavaImportData parentImportData = tempFiles.getJavaImportData();
673 JavaFileInfoTranslator fileInfo =
674 ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530675
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530676 boolean qualified;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530677 if (tempFiles instanceof TempJavaServiceFragmentFiles &&
678 typeInfo.getClassInfo().contentEquals(SERVICE) ||
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530679 typeInfo.getClassInfo()
680 .contentEquals(getCapitalCase(fileInfo.getJavaName() +
681 SERVICE))) {
682 qualified = true;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530683 } else {
684 String className;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530685 if (tempFiles instanceof TempJavaServiceFragmentFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530686 className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530687 } else {
688 className = getCapitalCase(fileInfo.getJavaName());
689 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530690 qualified = parentImportData.addImportInfo(typeInfo, className,
691 fileInfo.getPackage());
Bharat saraswal51c5d672016-11-13 09:03:48 +0530692 if (!qualified && !(curNode instanceof YangChoice) &&
693 curNode.isOpTypeReq()) {
694 String name = DEFAULT_CAPS + typeInfo.getClassInfo();
695 JavaQualifiedTypeInfoTranslator qInfo =
696 new JavaQualifiedTypeInfoTranslator();
697 qInfo.setForInterface(false);
698 qInfo.setPkgInfo(typeInfo.getPkgInfo());
699 qInfo.setClassInfo(name);
700 parentImportData.addImportInfo(qInfo, className,
701 fileInfo.getPackage());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530702 }
Bharat saraswalaf413b82016-07-14 15:18:20 +0530703 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530704 boolean collectionSet = false;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530705 if (curNode instanceof YangList) {
706 YangList yangList = (YangList) curNode;
Bharat saraswala5c28512016-11-10 21:09:23 +0530707 YangDataStructure ds = getYangDataStructure(
708 yangList.getCompilerAnnotation());
709 if (ds != null) {
710 switch (ds) {
711 case QUEUE:
Vidyashree Ramab3670472016-08-06 15:49:56 +0530712 parentImportData.setQueueToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530713 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530714 break;
Bharat saraswala5c28512016-11-10 21:09:23 +0530715
716 case SET:
Vidyashree Ramab3670472016-08-06 15:49:56 +0530717 parentImportData.setSetToImport(true);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530718 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530719 break;
Bharat saraswala5c28512016-11-10 21:09:23 +0530720
721 case MAP:
722 parentImportData.setMapToImport(true);
723 collectionSet = true;
724 break;
725
Vidyashree Ramab3670472016-08-06 15:49:56 +0530726 default: {
Bharat saraswala5c28512016-11-10 21:09:23 +0530727 parentImportData.setIfListImported(true);
728 collectionSet = true;
Vidyashree Ramab3670472016-08-06 15:49:56 +0530729 }
730 }
731 }
732 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530733 if (listNode && !collectionSet) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530734 parentImportData.setIfListImported(true);
735 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530736 if (curNode instanceof YangList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530737 return getAttributeInfoForTheData(typeInfo, curNodeName,
738 null, qualified, listNode,
739 ((YangList) curNode)
740 .getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530741 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530742 return getAttributeInfoForTheData(typeInfo, curNodeName, null,
743 qualified, listNode);
Bharat saraswalaf413b82016-07-14 15:18:20 +0530744 }
745
746 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +0530747 * Returns java attribute for leaf.
748 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530749 * @param tempFiles temporary generated file
750 * @param container JAVA leaf info container
751 * @param config plugin configurations
752 * @param leafList flag indicating if it's leaf list
753 * @return java attribute info
Bharat saraswal64e7e232016-07-14 23:33:55 +0530754 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530755 private static JavaAttributeInfo
756 getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
757 JavaLeafInfoContainer container,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530758 YangPluginConfig config, boolean leafList) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530759 if (leafList) {
760 tempFiles.getJavaImportData().setIfListImported(true);
761 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
762 true);
763 }
764 return getAttributeOfLeafInfoContainer(tempFiles, container, config,
765 false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530766 }
767
768 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530769 * Returns java attribute for leaf container.
Bharat saraswal64e7e232016-07-14 23:33:55 +0530770 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530771 * @param tempFiles temporary generated file
772 * @param container JAVA leaf info container
773 * @param config plugin configurations
774 * @param listAttribute flag indicating if list attribute
775 * @return JAVA attribute information
Bharat saraswala5c28512016-11-10 21:09:23 +0530776 * @throws IOException when fails to do IO operations
Bharat saraswal64e7e232016-07-14 23:33:55 +0530777 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530778 private static JavaAttributeInfo
779 getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
780 JavaLeafInfoContainer container,
781 YangPluginConfig config,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530782 boolean listAttribute) throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530783 container.setConflictResolveConfig(config.getConflictResolver());
784 container.updateJavaQualifiedInfo();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530785 addImportForLeafInfo(tempFiles, container);
786 JavaAttributeInfo attr = getAttributeInfoForTheData(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530787 container.getJavaQualifiedInfo(),
788 container.getJavaName(config.getConflictResolver()),
789 container.getDataType(),
790 tempFiles.getIsQualifiedAccessOrAddToImportList(
791 container.getJavaQualifiedInfo()), listAttribute);
Bharat saraswalb41904b2016-10-20 19:22:36 +0530792 boolean condition =
793 ((YangSchemaNode) container).getReferredSchema() == null &&
794 container.getDataType().getDataType() == YangDataTypes.BITS;
795 if (condition) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530796 addBitsHandler(attr, container.getDataType(), tempFiles);
797 }
798 return attr;
799 }
800
801 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530802 * Returns list of java attribute for keys of list node.
803 *
804 * @param curNode current list node
805 * @return attribute list
806 * @throws IOException when fails to do IO operations
807 */
808 public static List<JavaAttributeInfo> getListOfAttributesForKey(
809 YangNode curNode) throws IOException {
810 List<String> keys = ((YangList) curNode).getKeyList();
811
812 JavaFileInfoTranslator fileInfo =
813 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
814 YangLeavesHolder holder = (YangLeavesHolder) curNode;
815 Iterator<String> keyIt = keys.iterator();
816 Iterator<YangLeaf> leafIt;
817 String key;
818 YangJavaLeafTranslator leaf;
819 TempJavaBeanFragmentFiles beanFile = getBeanFiles(curNode);
820 List<JavaAttributeInfo> attrs = new ArrayList<>();
821 while (keyIt.hasNext()) {
822 key = keyIt.next();
823 leafIt = holder.getListOfLeaf().iterator();
824 while (leafIt.hasNext()) {
825 leaf = (YangJavaLeafTranslator) leafIt.next();
826 if (key.equals(leaf.getName())) {
827 attrs.add(getAttributeOfLeafInfoContainer(
828 beanFile, leaf,
829 fileInfo.getPluginConfig(), false));
830 }
831 }
832 }
833 return attrs;
834 }
835
836 /**
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530837 * Adds bits handler attribute for bits to string method.
838 *
839 * @param attr attribute
840 * @param type type
841 * @param tempFiles temp fragment file
842 */
843 static void addBitsHandler(JavaAttributeInfo attr, YangType type,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530844 TempJavaFragmentFiles tempFiles)
845 throws IOException {
846 generateBitsFile(attr, type, tempFiles.getJavaFileInfo(), tempFiles);
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530847 }
848
849 /**
850 * Adds attribute types import to leaf info container's parent.
851 *
852 * @param tempFiles temp java file
853 * @param container leaf info container
854 */
855 private static void addImportForLeafInfo(TempJavaFragmentFiles tempFiles,
856 JavaLeafInfoContainer container) {
857 String containedInCls = getCapitalCase(tempFiles.getJavaFileInfo()
858 .getJavaName());
859 String containedInPkg = tempFiles.getJavaFileInfo().getPackage();
Bharat saraswal94844d62016-10-13 13:28:03 +0530860 JavaQualifiedTypeInfoTranslator info;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530861 if (container.getDataType().getDataType() == YangDataTypes.BITS) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530862 //Add bitset import for type and leaf value flags.
863 info = new JavaQualifiedTypeInfoTranslator();
864 info.setClassInfo(BIT_SET);
865 info.setPkgInfo(JAVA_UTIL_PKG);
866 tempFiles.getJavaImportData().addImportInfo(info, containedInCls,
867 containedInPkg);
868 }
869 tempFiles.getJavaImportData().addImportInfo(
870 (JavaQualifiedTypeInfoTranslator) container
871 .getJavaQualifiedInfo(), containedInCls, containedInPkg);
872
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530873 }
874
875 /**
876 * Sets absolute path where the file needs to be generated.
877 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530878 * @param absoluteDirPath absolute path where the file needs to be
879 * generated
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530880 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530881 protected void setAbsoluteDirPath(String absoluteDirPath) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530882 this.absoluteDirPath = absoluteDirPath;
883 }
884
885 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530886 * Returns the generated java file information.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530887 *
888 * @return generated java file information
889 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530890 protected JavaFileInfoTranslator getJavaFileInfo() {
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530891 return javaFileInfo;
892 }
893
894 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +0530895 * Sets the generated java file information.
896 *
897 * @param javaFileInfo generated java file information
898 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530899 protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
Bharat saraswalaf413b82016-07-14 15:18:20 +0530900 this.javaFileInfo = javaFileInfo;
901 }
902
903 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530904 * Returns the flag-set for generated temp files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530905 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530906 * @return flag-set
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530907 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530908 protected int getGeneratedTempFiles() {
909 return tempFilesFlagSet;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530910 }
911
912 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530913 * Adds to the flag-set for generated temp files.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530914 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530915 * @param flags generated temp files flag-set
Bharat saraswalaf413b82016-07-14 15:18:20 +0530916 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530917 protected void addGeneratedTempFile(int flags) {
918 tempFilesFlagSet |= flags;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530919 }
920
921 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530922 * Returns the generated Java files.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530923 *
924 * @return generated Java files
925 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530926 protected int getGeneratedJavaFiles() {
927 return javaFileInfo.getGeneratedFileTypes();
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530928 }
929
930 /**
931 * Retrieves the mapped Java class name.
932 *
933 * @return mapped Java class name
934 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530935 protected String getGeneratedJavaClassName() {
936 return getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530937 }
938
939 /**
940 * Retrieves the import data for the generated Java file.
941 *
942 * @return import data for the generated Java file
943 */
944 public JavaImportData getJavaImportData() {
945 return javaImportData;
946 }
947
948 /**
949 * Sets import data for the generated Java file.
950 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530951 * @param data import data for the generated Java file
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530952 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530953 protected void setJavaImportData(JavaImportData data) {
954 javaImportData = data;
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530955 }
956
957 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530958 * Retrieves the status of any attributes added.
959 *
960 * @return status of any attributes added
961 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530962 protected boolean isAttributePresent() {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530963 return isAttributePresent;
964 }
965
966 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530967 * Returns getter methods's temporary file handle.
968 *
969 * @return temporary file handle
970 */
971 public File getGetterInterfaceTempFileHandle() {
972 return getterInterfaceTempFileHandle;
973 }
974
975 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530976 * Returns setter method's temporary file handle.
977 *
978 * @return temporary file handle
979 */
980 public File getSetterInterfaceTempFileHandle() {
981 return setterInterfaceTempFileHandle;
982 }
983
984 /**
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530985 * Returns setter method's impl's temporary file handle.
986 *
987 * @return temporary file handle
988 */
989 public File getSetterImplTempFileHandle() {
990 return setterImplTempFileHandle;
991 }
992
993 /**
Bharat saraswal250a7472016-05-12 13:16:57 +0530994 * Returns from string method's temporary file handle.
995 *
996 * @return from string method's temporary file handle
997 */
998 public File getFromStringImplTempFileHandle() {
999 return fromStringImplTempFileHandle;
1000 }
1001
1002 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301003 * Returns attribute's temporary file handle.
1004 *
1005 * @return temporary file handle
1006 */
1007 public File getAttributesTempFileHandle() {
1008 return attributesTempFileHandle;
1009 }
1010
1011 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301012 * Returns getter method's impl's temporary file handle.
1013 *
1014 * @return temporary file handle
1015 */
1016 public File getGetterImplTempFileHandle() {
1017 return getterImplTempFileHandle;
1018 }
1019
1020 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301021 * Returns hash code method's temporary file handle.
1022 *
1023 * @return temporary file handle
1024 */
1025 public File getHashCodeImplTempFileHandle() {
1026 return hashCodeImplTempFileHandle;
1027 }
1028
1029 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301030 * Returns equals method's temporary file handle.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301031 *
1032 * @return temporary file handle
1033 */
1034 public File getEqualsImplTempFileHandle() {
1035 return equalsImplTempFileHandle;
1036 }
1037
1038 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301039 * Returns to string method's temporary file handle.
1040 *
1041 * @return temporary file handle
1042 */
1043 public File getToStringImplTempFileHandle() {
1044 return toStringImplTempFileHandle;
1045 }
1046
1047 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301048 * Returns java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301049 *
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301050 * @return java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301051 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301052 public JavaExtendsListHolder getJavaExtendsListHolder() {
1053 return javaExtendsListHolder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301054 }
1055
1056 /**
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301057 * Sets java extends list holder.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301058 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301059 * @param holder java extends list holder
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301060 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301061 protected void setJavaExtendsListHolder(
1062 JavaExtendsListHolder holder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301063 javaExtendsListHolder = holder;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301064 }
1065
1066 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05301067 * Adds is filter content match for leaf.
1068 *
1069 * @param attr java attribute
1070 * @throws IOException when fails to do IO operations
1071 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301072 private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301073 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301074 appendToFile(subtreeFilteringForLeafTempFileHandle,
1075 getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
1076 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301077 }
1078
1079 /**
1080 * Adds is filter content match for leaf-list.
1081 *
1082 * @param attr java attribute
1083 * @throws IOException when fails to do IO operations
1084 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301085 private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301086 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301087 appendToFile(getSubtreeFilteringForListTempFileHandle,
Bharat saraswal1edde622016-09-06 10:18:04 +05301088 getSubtreeFilteringForLeafList(attr) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301089 }
1090
1091 /**
1092 * Adds is filter content match for nodes.
1093 *
1094 * @param attr java attribute
1095 * @throws IOException when fails to do IO operations
1096 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301097 private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
Bharat saraswale50edca2016-08-05 01:58:25 +05301098 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301099 appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301100 getSubtreeFilteringForNode(attr, attrNode) + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +05301101 }
1102
1103 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301104 * Adds attribute for class.
1105 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301106 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301107 * @throws IOException when fails to append to temporary file
1108 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301109 private void addAttribute(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301110 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301111 appendToFile(attributesTempFileHandle, parseAttribute(attr));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301112 }
1113
1114 /**
1115 * Adds getter for interface.
1116 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301117 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301118 * @throws IOException when fails to append to temporary file
1119 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301120 private void addGetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301121 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301122 appendToFile(getterInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301123 getGetterString(attr, getGeneratedJavaFiles()) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301124 NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301125 }
1126
1127 /**
1128 * Adds setter for interface.
1129 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301130 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301131 * @throws IOException when fails to append to temporary file
1132 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301133 private void addSetterForInterface(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301134 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301135 appendToFile(setterInterfaceTempFileHandle,
1136 getSetterString(attr, getGeneratedJavaClassName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +05301137 getGeneratedJavaFiles()) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301138 }
1139
1140 /**
1141 * Adds setter's implementation for class.
1142 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301143 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301144 * @throws IOException when fails to append to temporary file
1145 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301146 private void addSetterImpl(JavaAttributeInfo attr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301147 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301148 String setter = getSetterForClass(attr, getGeneratedJavaClassName(),
1149 getGeneratedJavaFiles());
Bharat saraswalb41904b2016-10-20 19:22:36 +05301150 String javadoc = getOverRideString();
1151 if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
1152 javadoc = getJavaDoc(SETTER_METHOD, attr.getAttributeName(),
1153 false, null);
1154 }
1155 appendToFile(setterImplTempFileHandle, javadoc + setter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301156 }
1157
1158 /**
1159 * Adds getter method's impl for class.
1160 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301161 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301162 * @throws IOException when fails to append to temporary file
1163 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301164 protected void addGetterImpl(JavaAttributeInfo attr)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301165 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301166 String getter = getGetterForClass(attr, getGeneratedJavaFiles());
Bharat saraswalb41904b2016-10-20 19:22:36 +05301167 String javadoc = getOverRideString();
Bharat saraswala5c28512016-11-10 21:09:23 +05301168 YangDataStructure ds = getYangDataStructure(
1169 attr.getCompilerAnnotation());
1170 String annotation = null;
1171 if (ds != null) {
1172 annotation = ds.name();
1173 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301174 if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
1175 javadoc = getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
Bharat saraswala5c28512016-11-10 21:09:23 +05301176 false, annotation);
Bharat saraswalb41904b2016-10-20 19:22:36 +05301177 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301178 if (javaFlagSet(BUILDER_CLASS_MASK)) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05301179 appendToFile(getterImplTempFileHandle, javadoc + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301180 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301181 appendToFile(getterImplTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301182 getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
Bharat saraswala5c28512016-11-10 21:09:23 +05301183 false, annotation) + getter);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301184 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301185 }
1186
1187 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301188 * Adds add to list interface method.
1189 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301190 * @param attr attribute
Bharat saraswal8beac342016-08-04 02:00:03 +05301191 * @throws IOException when fails to do IO operations
1192 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301193 private void addAddToListInterface(JavaAttributeInfo attr)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301194 throws IOException {
Bharat saraswala5c28512016-11-10 21:09:23 +05301195 YangDataStructure ds = getYangDataStructure(
1196 attr.getCompilerAnnotation());
1197 String annotation = null;
1198 if (ds != null) {
1199 annotation = ds.name();
1200 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301201 appendToFile(addToListInterfaceTempFileHandle,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301202 getJavaDoc(ADD_TO_LIST, attr.getAttributeName(), false,
Bharat saraswala5c28512016-11-10 21:09:23 +05301203 annotation) + getAddToListMethodInterface(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301204 attr, getGeneratedJavaClassName()) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301205 }
1206
1207 /**
1208 * Adds add to list interface method.
1209 *
1210 * @param attr attribute
1211 * @throws IOException when fails to do IO operations
1212 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301213 private void addAddToListImpl(JavaAttributeInfo attr)
1214 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301215 appendToFile(addToListImplTempFileHandle,
Bharat saraswal94844d62016-10-13 13:28:03 +05301216 getAddToListMethodImpl(attr, getGeneratedJavaClassName()
1217 ) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301218 }
1219
1220 /**
1221 * Adds leaf identifier enum attributes.
1222 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301223 * @param attr attribute
1224 * @param value value
Bharat saraswal8beac342016-08-04 02:00:03 +05301225 * @throws IOException when fails to do IO operations
1226 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301227 private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
Bharat saraswal8beac342016-08-04 02:00:03 +05301228 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301229 appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
1230 generateEnumAttributeString(attr.getAttributeName(), value));
Bharat saraswal8beac342016-08-04 02:00:03 +05301231 }
1232
1233 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301234 * Adds build method for interface.
1235 *
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301236 * @return build method for interface
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301237 * @throws IOException when fails to append to temporary file
1238 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301239 protected String addBuildMethodForInterface()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301240 throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301241 return parseBuilderInterfaceBuildMethodString(
1242 getGeneratedJavaClassName());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301243 }
1244
1245 /**
1246 * Adds build method's implementation for class.
1247 *
1248 * @return build method implementation for class
1249 * @throws IOException when fails to append to temporary file
1250 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301251 protected String addBuildMethodImpl()
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301252 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301253 return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301254 }
1255
1256 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301257 * Adds default constructor for class.
1258 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301259 * @param modifier modifier for constructor
1260 * @param toAppend string which need to be appended with the class name
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301261 * @param suffix is value need to be appended as suffix
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301262 * @return default constructor for class
1263 * @throws IOException when fails to append to file
1264 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301265 protected String addDefaultConstructor(String modifier, String toAppend,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301266 boolean suffix)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301267 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301268 StringBuilder name = new StringBuilder();
1269 name.append(getGeneratedJavaClassName());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301270 if (rootNode && !toAppend.equals(BUILDER)) {
1271 name.append(OP_PARAM);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301272 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301273 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301274 if (suffix) {
1275 name.append(toAppend);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301276 return getDefaultConstructorString(name.toString(), modifier);
Bharat saraswal8beac342016-08-04 02:00:03 +05301277 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301278 StringBuilder appended = new StringBuilder();
Bharat saraswal8beac342016-08-04 02:00:03 +05301279 if (toAppend.equals(DEFAULT)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301280 appended.append(getCapitalCase(toAppend));
Bharat saraswal8beac342016-08-04 02:00:03 +05301281 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301282 appended.append(toAppend);
Bharat saraswal8beac342016-08-04 02:00:03 +05301283 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301284 return NEW_LINE + getDefaultConstructorString(appended.append(
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301285 name).toString(), modifier);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301286 // TODO getDefaultConstructorString to handle new line.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301287 }
1288
1289 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301290 * Adds hash code method for class.
1291 *
1292 * @param attr attribute info
1293 * @throws IOException when fails to append to temporary file
1294 */
1295 private void addHashCodeMethod(JavaAttributeInfo attr)
1296 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301297 appendToFile(hashCodeImplTempFileHandle,
1298 getHashCodeMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301299 }
1300
1301 /**
1302 * Adds equals method for class.
1303 *
1304 * @param attr attribute info
1305 * @throws IOException when fails to append to temporary file
1306 */
1307 private void addEqualsMethod(JavaAttributeInfo attr)
1308 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301309 appendToFile(equalsImplTempFileHandle,
1310 getEqualsMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301311 }
1312
1313 /**
1314 * Adds ToString method for class.
1315 *
1316 * @param attr attribute info
1317 * @throws IOException when fails to append to temporary file
1318 */
1319 private void addToStringMethod(JavaAttributeInfo attr)
1320 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301321 appendToFile(toStringImplTempFileHandle,
1322 getToStringMethod(attr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301323 }
1324
1325 /**
Bharat saraswal250a7472016-05-12 13:16:57 +05301326 * Adds from string method for union class.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301327 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301328 * @param attr type attribute info
1329 * @param fromStringAttr from string attribute info
Bharat saraswal250a7472016-05-12 13:16:57 +05301330 * @throws IOException when fails to append to temporary file
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301331 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301332 void addFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301333 JavaAttributeInfo fromStringAttr)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301334 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301335 appendToFile(fromStringImplTempFileHandle,
Bharat saraswal0663aff2016-10-18 23:16:14 +05301336 getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301337 }
1338
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301339 /**
1340 * Returns a temporary file handle for the specific file type.
1341 *
1342 * @param fileName file name
1343 * @return temporary file handle
1344 * @throws IOException when fails to create new file handle
1345 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301346 protected File getTemporaryFileHandle(String fileName)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301347 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301348 String path = getTempDirPath(absoluteDirPath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301349 File dir = new File(path);
Bharat saraswal8beac342016-08-04 02:00:03 +05301350 boolean isCreated;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301351 if (!dir.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301352 isCreated = dir.mkdirs();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301353 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301354 throw new IOException("failed to create temporary directory " +
1355 "for " + fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301356 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301357 }
1358 File file = new File(path + fileName + TEMP_FILE_EXTENSION);
1359 if (!file.exists()) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301360 isCreated = file.createNewFile();
Shankara-Huaweib7564772016-08-02 18:13:13 +05301361 if (!isCreated) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301362 throw new IOException("failed to create temporary file for " +
1363 fileName);
Shankara-Huaweib7564772016-08-02 18:13:13 +05301364 }
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301365 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301366 throw new IOException(fileName + " is reused due to YANG naming. " +
1367 "probably your previous build " +
1368 "would have failed");
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301369 }
1370 return file;
1371 }
1372
1373 /**
1374 * Returns a temporary file handle for the specific file type.
1375 *
1376 * @param fileName file name
1377 * @return temporary file handle
1378 * @throws IOException when fails to create new file handle
1379 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301380 public File getJavaFileHandle(String fileName)
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301381 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301382 return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
1383 javaFileInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301384 }
1385
1386 /**
1387 * Returns data from the temporary files.
1388 *
Bharat saraswalaf413b82016-07-14 15:18:20 +05301389 * @param file temporary file handle
Bharat saraswald14cbe82016-07-14 13:26:18 +05301390 * @param absolutePath absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301391 * @return stored data from temporary files
1392 * @throws IOException when failed to get data from the given file
1393 */
Bharat saraswald14cbe82016-07-14 13:26:18 +05301394 public String getTemporaryDataFromFileHandle(File file, String absolutePath)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301395 throws IOException {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301396 String path = getTempDirPath(absolutePath);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301397 if (new File(path + file.getName()).exists()) {
1398 return readAppendFile(path + file.getName(), EMPTY_STRING);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301399 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301400 throw new IOException("Unable to get data from the given " +
1401 file.getName() + " file for " +
1402 getGeneratedJavaClassName() + PERIOD);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301403 }
1404
1405 /**
1406 * Returns temporary directory path.
1407 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301408 * @param path absolute path
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301409 * @return directory path
1410 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301411 private String getTempDirPath(String path) {
1412 return getPackageDirPathFromJavaJPackage(path) + SLASH +
1413 getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301414 }
1415
1416 /**
1417 * Parses attribute to get the attribute string.
1418 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301419 * @param attr attribute info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301420 * @return attribute string
1421 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301422 protected String parseAttribute(JavaAttributeInfo attr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301423 /*
1424 * TODO: check if this utility needs to be called or move to the caller
1425 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301426 String attrName = attr.getAttributeName();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301427 String attrAccessType = PRIVATE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301428 if ((getGeneratedJavaFiles() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301429 attrAccessType = PROTECTED;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05301430 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301431 String pkg = null;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301432 if (attr.isQualifiedName()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301433 pkg = attr.getImportInfo().getPkgInfo();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301434 }
Bharat saraswala5c28512016-11-10 21:09:23 +05301435 String attrType = attr.getImportInfo().getClassInfo();
1436 if (attr.getAttributeType() != null &&
1437 attr.getAttributeType().getDataType() == IDENTITYREF) {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301438 String type = attrType;
1439 if (pkg != null) {
1440 type = pkg + PERIOD + attrType;
1441 }
Bharat saraswala5c28512016-11-10 21:09:23 +05301442 attrType = CLASS_STRING + DIAMOND_OPEN_BRACKET +
Bharat saraswal51c5d672016-11-13 09:03:48 +05301443 QUESTION_MARK + SPACE + EXTEND + SPACE + type +
1444 DIAMOND_CLOSE_BRACKET;
1445 return getJavaAttributeDefinition(
1446 null, attrType, attrName, attr.isListAttr(), attrAccessType,
1447 attr.getCompilerAnnotation());
Bharat saraswala5c28512016-11-10 21:09:23 +05301448 }
1449
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301450 return getJavaAttributeDefinition(
Bharat saraswala5c28512016-11-10 21:09:23 +05301451 pkg, attrType, attrName, attr.isListAttr(), attrAccessType,
1452 attr.getCompilerAnnotation());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301453 }
1454
1455 /**
1456 * Appends content to temporary file.
1457 *
1458 * @param file temporary file
1459 * @param data data to be appended
1460 * @throws IOException when fails to append to file
1461 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301462 protected void appendToFile(File file, String data)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301463 throws IOException {
1464 try {
1465 insertDataIntoJavaFile(file, data);
1466 } catch (IOException ex) {
1467 throw new IOException("failed to write in temp file.");
1468 }
1469 }
1470
1471 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301472 * Adds parent's info to current node import list.
1473 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301474 * @param curNode current node
1475 * @param config plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301476 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301477 protected void addParentInfoInCurNodeTempFile(YangNode curNode,
1478 YangPluginConfig config) {
1479 JavaQualifiedTypeInfoTranslator caseImportInfo =
1480 new JavaQualifiedTypeInfoTranslator();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301481 YangNode parent = getParentNodeInGenCode(curNode);
Bharat saraswale50edca2016-08-05 01:58:25 +05301482 if (curNode instanceof YangCase && parent instanceof YangAugment) {
1483 return;
1484 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301485 if (!(parent instanceof JavaCodeGenerator)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301486 throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301487 }
1488 if (!(curNode instanceof JavaFileInfoContainer)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301489 throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301490 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301491 caseImportInfo.setClassInfo(
1492 getCapitalCase(getCamelCase(parent.getName(),
1493 config.getConflictResolver())));
1494 caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
1495 .getPackage());
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301496
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301497 JavaFileInfoTranslator fileInfo =
1498 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301499
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301500 getBeanFiles(curNode).getJavaImportData().addImportInfo(
1501 caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
1502 fileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301503 }
1504
1505 /**
1506 * Adds leaf attributes in generated files.
1507 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301508 * @param entry JAVA leaf info container
1509 * @param config plugin config
1510 * @param curNode current node
1511 * @param leafList flag indicating whether leaf container is leafList
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301512 * @throws IOException IO operation fail
1513 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301514 private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
1515 YangPluginConfig config,
1516 YangNode curNode,
1517 boolean leafList)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301518 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301519 if (entry != null) {
1520 if (curNode instanceof RpcNotificationContainer) {
1521 TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
1522 addJavaSnippetInfoToApplicableTempFiles(
1523 getJavaAttributeOfLeaf(tempFiles, entry,
1524 config, leafList), config);
1525 } else {
1526 addJavaSnippetInfoToApplicableTempFiles(
1527 getJavaAttributeOfLeaf(this, entry,
1528 config, leafList), config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301529 }
1530 }
1531 }
1532
1533 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301534 * Adds all the leaves in the current data model node as part of the
1535 * generated temporary file.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301536 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301537 * @param curNode current node
1538 * @param config plugin config
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301539 * @throws IOException IO operation fail
1540 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301541 protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
1542 YangPluginConfig config)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301543 throws IOException {
1544 if (!(curNode instanceof YangLeavesHolder)) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301545 throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
1546 curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301547 }
1548 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301549
1550 for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
1551 addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
1552 curNode, false);
1553 }
1554
1555 for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
1556 addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
1557 curNode, true);
1558 }
1559 }
1560
1561 /**
1562 * Adds operation type to temp files.
1563 *
1564 * @param curNode current YANG node
1565 * @param config YANG plugin config
1566 * @throws IOException IO exception
1567 */
1568 protected void addOperationTypeToTempFiles(YangNode curNode,
1569 YangPluginConfig config)
1570 throws IOException {
1571 JavaQualifiedTypeInfoTranslator typeInfo =
1572 new JavaQualifiedTypeInfoTranslator();
1573 typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
Bharat saraswal94844d62016-10-13 13:28:03 +05301574 JavaFileInfo curInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1575 JavaFileInfo info;
1576 if (curNode instanceof RpcNotificationContainer) {
1577 info = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
1578 } else {
1579 info = ((JavaFileInfoContainer) getModuleNode(curNode))
1580 .getJavaFileInfo();
1581 }
1582
1583 typeInfo.setPkgInfo(info.getPackage().toLowerCase() + PERIOD +
1584 getCapitalCase(info.getJavaName()));
1585 String curNodeName = getCapitalCase(curInfo.getJavaName());
Bharat saraswal51c5d672016-11-13 09:03:48 +05301586 boolean isQualified = false;
Bharat saraswal94844d62016-10-13 13:28:03 +05301587 if (!(curNode instanceof RpcNotificationContainer)) {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301588 isQualified = javaImportData.addImportInfo(typeInfo, curNodeName,
1589 curInfo.getPackage());
Bharat saraswal94844d62016-10-13 13:28:03 +05301590 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301591 JavaAttributeInfo attributeInfo =
Bharat saraswal94844d62016-10-13 13:28:03 +05301592 getAttributeInfoForTheData(typeInfo, YANG + curNodeName +
Bharat saraswal51c5d672016-11-13 09:03:48 +05301593 OPERATION_TYPE_ATTRIBUTE, null, isQualified, false);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301594 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301595 }
1596
Bharat saraswal94844d62016-10-13 13:28:03 +05301597 private YangNode getModuleNode(YangNode curNode) {
1598 YangNode tempNode = curNode.getParent();
1599 while (!(tempNode instanceof RpcNotificationContainer)) {
1600 tempNode = tempNode.getParent();
1601 }
1602 return tempNode;
1603 }
1604
1605 /**
1606 * Adds value leaf flag to temp files.
1607 *
1608 * @param config YANG plugin config
1609 * @param node YANG node
1610 * @throws IOException IO exception
1611 */
1612 protected void addValueLeafFlag(YangPluginConfig config, YangNode node)
1613 throws IOException {
1614 JavaFileInfo info = ((JavaFileInfoContainer) node).getJavaFileInfo();
1615 JavaQualifiedTypeInfoTranslator typeInfo =
1616 new JavaQualifiedTypeInfoTranslator();
1617 typeInfo.setClassInfo(BIT_SET);
1618 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
Bharat saraswalb41904b2016-10-20 19:22:36 +05301619 getJavaImportData().addImportInfo(typeInfo, info.getJavaName(),
1620 info.getPackage());
Bharat saraswal94844d62016-10-13 13:28:03 +05301621 JavaAttributeInfo attributeInfo =
1622 getAttributeInfoForTheData(typeInfo, VALUE_LEAF, null, false, false);
1623 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1624 }
1625
1626 /**
1627 * Adds value leaf flag to temp files.
1628 *
1629 * @param config YANG plugin config
1630 * @throws IOException IO exception
1631 */
1632 protected void addSelectLeafFlag(YangPluginConfig config)
1633 throws IOException {
1634 JavaQualifiedTypeInfoTranslator typeInfo =
1635 new JavaQualifiedTypeInfoTranslator();
1636 typeInfo.setClassInfo(BIT_SET);
1637 typeInfo.setPkgInfo(JAVA_UTIL_PKG);
1638 JavaAttributeInfo attributeInfo =
1639 getAttributeInfoForTheData(typeInfo, SELECT_LEAF, null, false, false);
1640 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1641 }
1642
1643 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +05301644 * Adds sub tree filtering to temp files.
1645 *
1646 * @param config YANG plugin config
1647 * @throws IOException IO exception
1648 */
1649 protected void addIsSubTreeFilteredFlag(YangPluginConfig config)
1650 throws IOException {
1651 JavaQualifiedTypeInfoTranslator typeInfo =
1652 new JavaQualifiedTypeInfoTranslator();
1653 typeInfo.setClassInfo(BOOLEAN_DATA_TYPE);
1654 typeInfo.setPkgInfo(null);
1655 JavaAttributeInfo attributeInfo =
1656 getAttributeInfoForTheData(typeInfo, SUBTREE_FILTERED, null, false, false);
1657 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1658 }
1659
1660 /**
Bharat saraswal94844d62016-10-13 13:28:03 +05301661 * Adds value leaf flag to temp files.
1662 *
Bharat saraswal51c5d672016-11-13 09:03:48 +05301663 * @param config YANG plugin config
1664 * @param curNode current yang node
Bharat saraswal94844d62016-10-13 13:28:03 +05301665 * @throws IOException IO exception
1666 */
Bharat saraswal51c5d672016-11-13 09:03:48 +05301667 protected void addYangAugmentedMap(YangPluginConfig config, YangNode curNode)
Bharat saraswal94844d62016-10-13 13:28:03 +05301668 throws IOException {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301669 JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) curNode)
1670 .getJavaFileInfo();
Bharat saraswal94844d62016-10-13 13:28:03 +05301671 JavaQualifiedTypeInfoTranslator typeInfo =
1672 new JavaQualifiedTypeInfoTranslator();
1673 typeInfo.setClassInfo(AUGMENT_MAP_TYPE);
1674 //Fix for add yangAugmentedInfo in equals/hashcode/and to string method.
1675 typeInfo.setPkgInfo(null);
Bharat saraswal51c5d672016-11-13 09:03:48 +05301676 typeInfo.setForInterface(false);
Bharat saraswal94844d62016-10-13 13:28:03 +05301677 JavaAttributeInfo attributeInfo =
1678 getAttributeInfoForTheData(typeInfo, YANG_AUGMENTED_INFO_MAP,
1679 null, false, false);
Bharat saraswal51c5d672016-11-13 09:03:48 +05301680 //MAP
1681 addImportInfoOfNode(MAP, COLLECTION_IMPORTS,
1682 getCapitalCase(info.getJavaName()),
1683 info.getPackage(), true);
1684 //HASH map
1685 addImportInfoOfNode(HASH_MAP, COLLECTION_IMPORTS,
1686 getCapitalCase(info.getJavaName()),
1687 info.getPackage(), false);
1688
1689 if (curNode.isOpTypeReq()) {
1690 //exception
1691 addImportInfoOfNode(INVOCATION_TARGET_EXCEPTION, REFLECT_IMPORTS,
1692 getCapitalCase(info.getJavaName()),
1693 info.getPackage(), false);
1694 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301695 addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
1696 }
1697
Bharat saraswal51c5d672016-11-13 09:03:48 +05301698 private JavaQualifiedTypeInfoTranslator addImportInfoOfNode(
1699 String cls, String pkg, String nodeName, String nodePkg,
1700 boolean isForInterface) {
1701 JavaQualifiedTypeInfoTranslator typeInfo =
1702 new JavaQualifiedTypeInfoTranslator();
1703 typeInfo.setClassInfo(cls);
1704 typeInfo.setPkgInfo(pkg);
1705 typeInfo.setForInterface(isForInterface);
1706
1707 getJavaImportData().addImportInfo(typeInfo, nodeName, nodePkg);
1708 return typeInfo;
1709 }
1710
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301711 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301712 * Adds the new attribute info to the target generated temporary files.
1713 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301714 * @param newAttrInfo new attribute info
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301715 * @param pluginConfig plugin configurations
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301716 * @throws IOException IO operation fail
1717 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301718 void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
1719 YangPluginConfig pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301720 throws IOException {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301721 isAttributePresent = true;
Bharat saraswal94844d62016-10-13 13:28:03 +05301722 String attrName = newAttrInfo.getAttributeName();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301723 //Boolean flag for operation type attr info generation control.
Bharat saraswal94844d62016-10-13 13:28:03 +05301724 boolean required = !attrName.equals(VALUE_LEAF) &&
1725 !attrName.equals(SELECT_LEAF) &&
1726 !attrName.equals(YANG_AUGMENTED_INFO_MAP);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301727 //Boolean flag for subtree for nodes info generation control.
1728 boolean subTreeForChild =
1729 tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
1730 newAttrInfo.getAttributeType() == null &&
1731 !attrName.contains(OPERATION_TYPE_ATTRIBUTE) &&
1732 required && !attrName.equals(SUBTREE_FILTERED);
1733 ;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301734 if (tempFlagSet(ATTRIBUTES_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301735 addAttribute(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301736 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301737 if (tempFlagSet(GETTER_FOR_INTERFACE_MASK) &&
1738 !attrName.equals(SUBTREE_FILTERED)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301739 addGetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301740 }
Bharat saraswalb41904b2016-10-20 19:22:36 +05301741 if (tempFlagSet(SETTER_FOR_INTERFACE_MASK) && required &&
1742 !attrName.equals(SUBTREE_FILTERED)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301743 addSetterForInterface(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301744 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301745 if (tempFlagSet(SETTER_FOR_CLASS_MASK) && required) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301746 addSetterImpl(newAttrInfo);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301747 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301748 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301749 addHashCodeMethod(newAttrInfo);
1750 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301751 if (tempFlagSet(EQUALS_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301752 addEqualsMethod(newAttrInfo);
1753 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301754 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301755 addToStringMethod(newAttrInfo);
1756 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301757 if (tempFlagSet(EDIT_CONTENT_MASK)) {
Bharat saraswale50edca2016-08-05 01:58:25 +05301758 //TODO: add implementation for edit content match.
1759 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301760 boolean listAttr = newAttrInfo.isListAttr();
1761 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301762 addAddToListImpl(newAttrInfo);
1763 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301764 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301765 addAddToListInterface(newAttrInfo);
Bharat saraswal8beac342016-08-04 02:00:03 +05301766 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301767 YangType attrType = newAttrInfo.getAttributeType();
Bharat saraswal0663aff2016-10-18 23:16:14 +05301768 if (subTreeForChild) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301769 addSubtreeFilteringForChildNode(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301770 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301771 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
1772 !listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301773 addSubTreeFilteringForLeaf(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301774 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301775 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
1776 listAttr && attrType != null) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301777 addSubtreeFilteringForLeafList(newAttrInfo);
Bharat saraswale50edca2016-08-05 01:58:25 +05301778 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301779 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
1780 !listAttr && attrType != null) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301781 leafCount++;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301782 addLeafIdAttributes(newAttrInfo, leafCount);
Bharat saraswal8beac342016-08-04 02:00:03 +05301783 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301784 if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
1785 !newAttrInfo.isShortConflict()) {
1786 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301787 addGetterImpl(newAttrInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301788 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301789 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
1790 JavaQualifiedTypeInfoTranslator typeInfo =
1791 getQualifiedInfoOfFromString(newAttrInfo,
1792 pluginConfig.getConflictResolver());
Bharat saraswal250a7472016-05-12 13:16:57 +05301793 /*
1794 * Create a new java attribute info with qualified information of
1795 * wrapper classes.
1796 */
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301797 JavaAttributeInfo fromStringAttributeInfo =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301798 getAttributeInfoForTheData(
1799 typeInfo, newAttrInfo.getAttributeName(),
1800 attrType, getIsQualifiedAccessOrAddToImportList(
1801 typeInfo), false);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301802 addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301803 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301804 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301805 }
1806
1807 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301808 * Returns JAVA class name for non implementation classes.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301809 *
1810 * @param suffix for the class name based on the file type
1811 * @return java class name
1812 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301813 protected String getJavaClassName(String suffix) {
1814 return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301815 }
1816
1817 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301818 * Returns class name for implementation classes.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301819 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301820 * @param node YANG node
Bharat saraswald14cbe82016-07-14 13:26:18 +05301821 * @return java class name
1822 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301823 private String getImplClassName(YangNode node) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301824 if (node instanceof RpcNotificationContainer) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301825 return getGeneratedJavaClassName() + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +05301826 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301827 return DEFAULT_CAPS + getGeneratedJavaClassName();
Bharat saraswald14cbe82016-07-14 13:26:18 +05301828 }
1829
1830 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301831 * Returns the directory path.
1832 *
1833 * @return directory path
1834 */
1835 private String getDirPath() {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301836 return javaFileInfo.getPackageFilePath();
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301837 }
1838
1839 /**
1840 * Constructs java code exit.
1841 *
1842 * @param fileType generated file type
VinodKumarS-Huaweid81eccb2016-06-01 14:30:22 +05301843 * @param curNode current YANG node
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301844 * @throws IOException when fails to generate java files
1845 */
1846 public void generateJavaFile(int fileType, YangNode curNode)
1847 throws IOException {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301848
1849 if (curNode.isOpTypeReq()) {
1850 addImportInfoOfNode(BIT_SET, JAVA_UTIL_PKG, getGeneratedJavaClassName(),
1851 getJavaFileInfo().getPackage(), false);
Bharat saraswal8beac342016-08-04 02:00:03 +05301852 }
Bharat saraswal51c5d672016-11-13 09:03:48 +05301853 if (isAttributePresent) {
1854 //Object utils
1855 addImportInfoOfNode(JAVA_UTIL_OBJECTS_IMPORT_CLASS, JAVA_UTIL_PKG,
1856 getGeneratedJavaClassName(),
1857 getJavaFileInfo().getPackage(), false);
1858 //more objects.
1859 addImportInfoOfNode(GOOGLE_MORE_OBJECT_IMPORT_CLASS,
1860 GOOGLE_MORE_OBJECT_IMPORT_PKG,
1861 getGeneratedJavaClassName(),
1862 getJavaFileInfo().getPackage(), false);
1863 }
1864
1865 List<String> imports =
1866 getBeanFiles(curNode).getJavaImportData().getImports(true);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301867 createPackage(curNode);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301868
1869 //Generate java code.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301870 if ((fileType & INTERFACE_MASK) != 0 ||
1871 (fileType & BUILDER_INTERFACE_MASK) != 0) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301872
1873 //Create interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301874 interfaceJavaFileHandle =
1875 getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
1876 interfaceJavaFileHandle =
1877 generateInterfaceFile(interfaceJavaFileHandle, imports,
1878 curNode, isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301879
Bharat saraswal94844d62016-10-13 13:28:03 +05301880 //Create builder interface file.
1881 if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
1882 builderInterfaceJavaFileHandle =
1883 getJavaFileHandle(getJavaClassName(
1884 BUILDER_INTERFACE_FILE_NAME_SUFFIX));
1885 builderInterfaceJavaFileHandle =
1886 generateBuilderInterfaceFile(
1887 builderInterfaceJavaFileHandle,
1888 curNode, isAttributePresent);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301889 /*
1890 * Append builder interface file to interface file and
1891 * close it.
1892 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301893 mergeJavaFiles(builderInterfaceJavaFileHandle,
1894 interfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301895 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301896
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301897 insertDataIntoJavaFile(interfaceJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301898 validateLineLength(interfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301899 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301900
Bharat saraswal51c5d672016-11-13 09:03:48 +05301901 //add imports for default class.
1902 imports = getBeanFiles(curNode).getJavaImportData().getImports(false);
1903 if (!curNode.isOpTypeReq()) {
Bharat saraswala5c28512016-11-10 21:09:23 +05301904 removeCaseParentImport(curNode, imports);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301905 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301906
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301907 if ((fileType & BUILDER_CLASS_MASK) != 0 ||
1908 (fileType & DEFAULT_CLASS_MASK) != 0) {
Vidyashree Ramab3670472016-08-06 15:49:56 +05301909
1910 //Create impl class file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301911 implClassJavaFileHandle =
1912 getJavaFileHandle(getImplClassName(curNode));
1913 implClassJavaFileHandle =
1914 generateDefaultClassFile(implClassJavaFileHandle,
1915 curNode, isAttributePresent,
1916 imports);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301917
1918 //Create builder class file.
Bharat saraswald14cbe82016-07-14 13:26:18 +05301919 if ((fileType & BUILDER_CLASS_MASK) != 0) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301920 builderClassJavaFileHandle =
1921 getJavaFileHandle(getJavaClassName(
1922 BUILDER_CLASS_FILE_NAME_SUFFIX));
1923 builderClassJavaFileHandle =
1924 generateBuilderClassFile(builderClassJavaFileHandle,
1925 curNode,
1926 isAttributePresent);
Vidyashree Ramab3670472016-08-06 15:49:56 +05301927
1928 //Append impl class to builder class and close it.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301929 mergeJavaFiles(builderClassJavaFileHandle,
1930 implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301931 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301932 insertDataIntoJavaFile(implClassJavaFileHandle, CLOSE_CURLY_BRACKET);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301933 validateLineLength(implClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301934 }
Bharat saraswala5c28512016-11-10 21:09:23 +05301935
1936 if (curNode instanceof YangList) {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301937 File keyClassJavaFileHandle;
Bharat saraswala5c28512016-11-10 21:09:23 +05301938 YangList list = (YangList) curNode;
1939 YangDataStructure data = getYangDataStructure(
1940 list.getCompilerAnnotation());
1941 if (list.isConfig() && data == YangDataStructure.MAP) {
1942 keyClassJavaFileHandle =
1943 getJavaFileHandle(getJavaClassName(
1944 KEY_CLASS_FILE_NAME_SUFFIX));
Bharat saraswal51c5d672016-11-13 09:03:48 +05301945 generateKeyClassFile(keyClassJavaFileHandle, curNode);
Bharat saraswala5c28512016-11-10 21:09:23 +05301946
1947 }
1948 }
Vidyashree Ramab3670472016-08-06 15:49:56 +05301949 //Close all the file handles.
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301950 freeTemporaryResources(false);
1951 }
1952
Bharat saraswala5c28512016-11-10 21:09:23 +05301953 //Removes case's parent import.
1954 private void removeCaseParentImport(YangNode node, List<String> imports) {
1955 YangNode parent = node.getParent();
1956 JavaFileInfo info = ((JavaFileInfoContainer) parent).getJavaFileInfo();
1957 String impt = getImportString(info.getPackage(),
1958 getCapitalCase(info.getJavaName()));
1959 imports.remove(impt);
1960 }
1961
Bharat saraswal039f59c2016-07-14 21:57:13 +05301962 /**
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301963 * Removes all temporary file handles.
1964 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301965 * @param errorOccurred flag indicating if error occurred
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301966 * @throws IOException when failed to delete the temporary files
1967 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301968 public void freeTemporaryResources(boolean errorOccurred)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301969 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301970 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301971 * Close all java file handles and when error occurs delete the files.
1972 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301973 if (javaFlagSet(INTERFACE_MASK)) {
1974 closeFile(interfaceJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301975 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301976 if (javaFlagSet(BUILDER_CLASS_MASK)) {
1977 closeFile(builderClassJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301978 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301979 if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
1980 closeFile(builderInterfaceJavaFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301981 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301982 if (javaFlagSet(DEFAULT_CLASS_MASK)) {
1983 closeFile(implClassJavaFileHandle, errorOccurred);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301984 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301985 /*
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301986 * Close all temporary file handles and delete the files.
1987 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301988 if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
1989 closeFile(getterImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301990 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301991 if (tempFlagSet(ATTRIBUTES_MASK)) {
1992 closeFile(attributesTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301993 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301994 if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
1995 closeFile(hashCodeImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301996 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301997 if (tempFlagSet(TO_STRING_IMPL_MASK)) {
1998 closeFile(toStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301999 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302000 if (tempFlagSet(EQUALS_IMPL_MASK)) {
2001 closeFile(equalsImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302002 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302003 if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
2004 closeFile(fromStringImplTempFileHandle);
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302005 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302006 if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
2007 closeFile(addToListImplTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302008 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302009 if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
2010 closeFile(addToListInterfaceTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302011 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302012 if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
2013 closeFile(leafIdAttributeTempFileHandle);
Bharat saraswal8beac342016-08-04 02:00:03 +05302014 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302015 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
2016 closeFile(subtreeFilteringForLeafTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302017 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302018 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
2019 closeFile(getSubtreeFilteringForListTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302020 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302021 if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
2022 closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302023 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302024 if (tempFlagSet(EDIT_CONTENT_MASK)) {
2025 closeFile(editContentTempFileHandle);
Bharat saraswale50edca2016-08-05 01:58:25 +05302026 }
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302027 }
2028
2029 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302030 * Returns if the attribute needs to be accessed in a qualified manner or
2031 * not, if it needs to be imported, then the same needs to be done.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302032 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302033 * @param importInfo import info
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302034 * @return status of the qualified access to the attribute
2035 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05302036 protected boolean getIsQualifiedAccessOrAddToImportList(
2037 JavaQualifiedTypeInfo importInfo) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302038 return javaImportData
2039 .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
2040 getGeneratedJavaClassName(),
2041 javaFileInfo.getPackage());
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302042 }
2043
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302044 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302045 * Returns temp file handle for add to list interface.
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302046 *
Bharat saraswal8beac342016-08-04 02:00:03 +05302047 * @return temp file handle for add to list interface
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302048 */
Bharat saraswal8beac342016-08-04 02:00:03 +05302049 public File getAddToListInterfaceTempFileHandle() {
2050 return addToListInterfaceTempFileHandle;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302051 }
2052
2053 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302054 * Returns temp file handle for add to list impl.
2055 *
2056 * @return temp file handle for add to list impl
2057 */
2058 public File getAddToListImplTempFileHandle() {
2059 return addToListImplTempFileHandle;
2060 }
2061
2062 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302063 * Returns temp file handle for leaf identifier attributes.
2064 *
2065 * @return temp file handle for leaf identifier attributes
2066 */
2067 public File getLeafIdAttributeTempFileHandle() {
2068 return leafIdAttributeTempFileHandle;
2069 }
2070
2071 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05302072 * Sets true if root node.
2073 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302074 * @param rootNode true if root node
Bharat saraswal8beac342016-08-04 02:00:03 +05302075 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302076 void setRootNode(boolean rootNode) {
2077 this.rootNode = rootNode;
Shankara-Huaweia1039e52016-07-14 16:53:09 +05302078 }
Bharat saraswale50edca2016-08-05 01:58:25 +05302079
2080 /**
2081 * Returns temp file for is content match.
2082 *
2083 * @return temp file for is content match
2084 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302085 public File getSubtreeFilteringForLeafTempFileHandle() {
2086 return subtreeFilteringForLeafTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302087 }
2088
2089 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302090 * Returns temp file for edit content file.
2091 *
2092 * @return temp file for edit content file
2093 */
2094 public File getEditContentTempFileHandle() {
2095 return editContentTempFileHandle;
2096 }
2097
2098 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302099 * Returns temp file for is content match.
2100 *
2101 * @return temp file for is content match
2102 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302103 public File getGetSubtreeFilteringForListTempFileHandle() {
2104 return getSubtreeFilteringForListTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302105 }
2106
2107 /**
Bharat saraswale50edca2016-08-05 01:58:25 +05302108 * Returns temp file for is content match.
2109 *
2110 * @return temp file for is content match
2111 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05302112 public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
2113 return getSubtreeFilteringForChildNodeTempFileHandle;
Bharat saraswale50edca2016-08-05 01:58:25 +05302114 }
2115
2116 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302117 * Checks if a given flag is set in generated java files.
2118 * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
2119 * <pre>
2120 * javaFlagSet(FOO | BAR)
2121 * </pre>
2122 * returns true if either FOO flag or BAR flag is set.
Bharat saraswale50edca2016-08-05 01:58:25 +05302123 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302124 * @param flag input flag mask value
2125 * @return true if set, else false
Bharat saraswale50edca2016-08-05 01:58:25 +05302126 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05302127 private boolean javaFlagSet(int flag) {
2128 return (getGeneratedJavaFiles() & flag) != 0;
2129 }
2130
2131 /**
2132 * Checks if a given flag is set in temp files.
2133 *
2134 * @param flag input flag mask value
2135 * @return true if set, else false
2136 */
2137 private boolean tempFlagSet(int flag) {
2138 return (tempFilesFlagSet & flag) != 0;
Bharat saraswale50edca2016-08-05 01:58:25 +05302139 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +05302140
2141 /**
Bharat saraswal0663aff2016-10-18 23:16:14 +05302142 * Sets attribute's node.
2143 *
2144 * @param attrNode attribute's node
2145 */
2146 public void setAttrNode(YangNode attrNode) {
2147 this.attrNode = attrNode;
2148 }
2149
Vinod Kumar S79a374b2016-04-30 21:09:15 +05302150}