blob: dcca74867bd74e45b5a452d12e711ca8cfcf7959 [file] [log] [blame]
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal022dae92016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053022import java.util.List;
Bharat saraswale304c252016-08-16 20:56:20 +053023
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053024import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053025import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053026import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053027import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053028import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswal039f59c2016-07-14 21:57:13 +053029import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053030import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +053031import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053032import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053033import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswale50edca2016-08-05 01:58:25 +053034import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053035import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053036import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053037import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053038import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053039import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Shankara-Huaweib7564772016-08-02 18:13:13 +053040import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053041import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal250a7472016-05-12 13:16:57 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053043import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053044import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053045import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053046import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053047
Bharat saraswal8beac342016-08-04 02:00:03 +053048import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
49import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053061import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053074import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053080import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
82import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053083import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053084import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053085import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswale50edca2016-08-05 01:58:25 +053086import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
Bharat saraswald14cbe82016-07-14 13:26:18 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalaf413b82016-07-14 15:18:20 +053088import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal8beac342016-08-04 02:00:03 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
90import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeAttr;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeForConstructor;
Bharat saraswalaf413b82016-07-14 15:18:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswal84366c52016-03-23 19:40:35 +053095import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal8beac342016-08-04 02:00:03 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
Bharat saraswal8beac342016-08-04 02:00:03 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
Bharat saraswalaf413b82016-07-14 15:18:20 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswal250a7472016-05-12 13:16:57 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal8beac342016-08-04 02:00:03 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForOperationType;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGettersForValueAndSelectLeaf;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumMethods;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationAttributesGetters;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForOperationType;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
Bharat saraswal8beac342016-08-04 02:00:03 +0530128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
Bharat saraswal8beac342016-08-04 02:00:03 +0530131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530132import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
133 .getAugmentableSubTreeFiltering;
134import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
135 .getProcessChildNodeSubtreeFiltering;
136import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
137 .getProcessLeafListSubtreeFiltering;
138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
139 .getProcessLeafSubtreeFiltering;
140import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
141 .getProcessSubTreeFilteringEnd;
142import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
143 .getProcessSubtreeFilteringStart;
144import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
145 .getProcessSubtreeFunctionBody;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530146import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530147import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530148import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
149import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530150import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530151import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530152import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
153import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530154import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530155import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530156import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
157import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530158import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal84366c52016-03-23 19:40:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530160import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530161import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530162import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530163import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
164import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal84366c52016-03-23 19:40:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530166import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530167import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530168import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530169import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
170import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530171import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530172import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530173import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530174import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
175import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
176import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530177import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
178import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530181import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530185import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530186import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530187
Bharat saraswal64e7e232016-07-14 23:33:55 +0530188import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530189
Vinod Kumar S08710982016-03-03 19:55:30 +0530190/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530191 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530192 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530193public final class JavaFileGenerator {
194
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530195 private JavaFileGenerator() {
196 }
197
198 /**
199 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530200 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530201 * @param file file
202 * @param imports imports for the file
203 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530204 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530205 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530206 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530207 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530208 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530209 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530210 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530211
Bharat saraswale50edca2016-08-05 01:58:25 +0530212 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530213
214 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530215 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530216 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
217 } else {
218 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
219 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530220
janani b703cfe42016-05-17 13:12:22 +0530221 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530222
Bharat saraswal8beac342016-08-04 02:00:03 +0530223 boolean isLeavesPresent;
224 YangLeavesHolder leavesHolder;
225 if (curNode instanceof YangLeavesHolder) {
226 leavesHolder = (YangLeavesHolder) curNode;
227 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
228 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
229 } else {
230 isLeavesPresent = false;
231 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530232
Bharat saraswal8beac342016-08-04 02:00:03 +0530233 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
234 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530235 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530236 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530237 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530238 //Leaf identifier enum.
239 if (isLeavesPresent) {
240 insertDataIntoJavaFile(file, NEW_LINE + getInterfaceLeafIdEnumSignature(className) + NEW_LINE +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530241 trimAtLast(replaceLast(
Bharat saraswal8beac342016-08-04 02:00:03 +0530242 getDataFromTempFileHandle(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
243 ((TempJavaCodeFragmentFilesContainer) curNode)
244 .getTempJavaCodeFragmentFiles()
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530245 .getBeanTempFiles(), path), COMMA, SEMI_COLAN), NEW_LINE) +
246 NEW_LINE + NEW_LINE + getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530247 }
248
Bharat saraswal64e7e232016-07-14 23:33:55 +0530249 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530250 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
251 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530252 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530253 } catch (IOException e) {
254 throw new IOException("No data found in temporary java code fragment files for " + className
255 + " while interface file generation");
256 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530257 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530258
259 if (curNode instanceof YangAugmentableNode && !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530260 methods.add(getYangAugmentInfoInterface());
261 methods.add(getYangAugmentInfoMapInterface(javaFileInfo.getPluginConfig()));
262 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530263 if (curNode instanceof YangCase) {
264 YangNode caseParent = curNode.getParent();
265 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifierInfoForCasesParent(caseParent,
266 javaFileInfo.getPluginConfig());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530267 methods.add(NEW_LINE + processSubtreeFilteringInterface(qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530268 } else {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530269 methods.add(NEW_LINE + processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530270 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530271
272 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530273 methods.add(NEW_LINE + isLeafValueSetInterface());
274 methods.add(NEW_LINE + isSelectLeafSetInterface());
275 }
276 for (String method : methods) {
277 insertDataIntoJavaFile(file, method);
278 }
Bharat saraswale304c252016-08-16 20:56:20 +0530279 return file;
Bharat saraswal8beac342016-08-04 02:00:03 +0530280
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530281 }
282
283 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530284 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530285 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530286 * @param file file
287 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530288 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530289 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530290 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530291 */
Bharat saraswald532a4c2016-03-25 18:19:46 +0530292 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
293 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530294
Bharat saraswale50edca2016-08-05 01:58:25 +0530295 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530296 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530297
Bharat saraswal8beac342016-08-04 02:00:03 +0530298 boolean isLeavesPresent;
299 YangLeavesHolder leavesHolder;
300 if (curNode instanceof YangLeavesHolder) {
301 leavesHolder = (YangLeavesHolder) curNode;
302 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
303 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
304 } else {
305 isLeavesPresent = false;
306 }
307
janani b703cfe42016-05-17 13:12:22 +0530308 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530309 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530310 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530311 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
312 } else {
313 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
314 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530315
Bharat saraswald14cbe82016-07-14 13:26:18 +0530316 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530317 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530318 if (isAttrPresent) {
319 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530320
321 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530322 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
323 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530324 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530325
326 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530327 methods.add(NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530328 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
329 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530330 .getBeanTempFiles(), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530331
332 //Add to list method.
333 methods.add(NEW_LINE);
334 insertDataIntoJavaFile(file, getDataFromTempFileHandle(ADD_TO_LIST_INTERFACE_MASK,
335 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
336 .getBeanTempFiles(), path));
337
Bharat saraswald532a4c2016-03-25 18:19:46 +0530338 } catch (IOException e) {
339 throw new IOException("No data found in temporary java code fragment files for " + className
340 + " while builder interface file generation");
341 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530342 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530343
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530344 if (curNode instanceof YangAugmentableNode && !(curNode instanceof YangChoice)) {
345 methods.add(getAddAugmentInfoMethodInterface());
346 methods.add(getYangAugmentInfoInterface());
347 methods.add(getYangAugmentInfoMapInterface(javaFileInfo.getPluginConfig()));
348 }
349
Bharat saraswal8beac342016-08-04 02:00:03 +0530350 if (isLeavesPresent) {
351 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
352 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530353 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530354 methods.add(
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530355 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530356 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530357
Bharat saraswal64e7e232016-07-14 23:33:55 +0530358
359 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530360 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530361 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530362 }
363
Bharat saraswal84366c52016-03-23 19:40:35 +0530364 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530365 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530366 }
367
368 /**
369 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530370 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530371 * @param file file
372 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530373 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530374 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530375 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530376 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530377
Bharat saraswald14cbe82016-07-14 13:26:18 +0530378 public static File generateBuilderClassFile(File file, YangNode curNode,
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530379 boolean isAttrPresent)
380 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530381
Bharat saraswale50edca2016-08-05 01:58:25 +0530382 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530383 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530384
Bharat saraswal8beac342016-08-04 02:00:03 +0530385 boolean isLeavesPresent;
386 YangLeavesHolder leavesHolder;
387 if (curNode instanceof YangLeavesHolder) {
388 leavesHolder = (YangLeavesHolder) curNode;
389 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
390 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
391 } else {
392 isLeavesPresent = false;
393 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530394
Bharat saraswal8beac342016-08-04 02:00:03 +0530395 String className = getCapitalCase(javaFileInfo.getJavaName());
396 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530397 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530398 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530399 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530400 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
401 } else {
402 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
403 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530404
Bharat saraswald14cbe82016-07-14 13:26:18 +0530405 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530406 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530407
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530408 if (curNode instanceof YangAugmentableNode) {
409 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addAugmentationAttribute());
410 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530411 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530412
413 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530414 try {
415 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530416 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
417 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530418 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530419 } catch (IOException e) {
420 throw new IOException("No data found in temporary java code fragment files for " + className
421 + " while builder class file generation");
422 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530423
Bharat saraswal8beac342016-08-04 02:00:03 +0530424 insertDataIntoJavaFile(file, getOperationTypeAttr());
425 if (isLeavesPresent) {
426 insertDataIntoJavaFile(file, getOperationAttributes());
427 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530428 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530429 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530430 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
431 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530432 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530433 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530434 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
435 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530436 .getBeanTempFiles(), path));
437
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530438 //Add to list impl method.
439 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
440 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
441 .getBeanTempFiles(), path));
442
Bharat saraswald14cbe82016-07-14 13:26:18 +0530443 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530444
445 methods.add(getGetterForOperationType());
446 methods.add(getSetterForOperationType(className));
447 //Add operation attribute methods.
448 if (isLeavesPresent) {
449 methods.add(getOperationAttributesGetters() + NEW_LINE);
450 methods.add(getSetterForSelectLeaf(className, isRootNode));
451 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530452 } catch (IOException e) {
453 throw new IOException("No data found in temporary java code fragment files for " + className
454 + " while builder class file generation");
455 }
456 } else {
457 insertDataIntoJavaFile(file, NEW_LINE);
458 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530459
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530460 if (curNode instanceof YangAugmentableNode) {
461 methods.add(getAddAugmentInfoMethodImpl());
462 methods.add(getYangAugmentInfoImpl());
463 methods.add(getYangAugmentInfoMapImpl());
464 }
465
Bharat saraswal64e7e232016-07-14 23:33:55 +0530466 // Add default constructor and build method impl.
Bharat saraswal250a7472016-05-12 13:16:57 +0530467 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530468 .addBuildMethodImpl(curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530469 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530470 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530471
Bharat saraswal64e7e232016-07-14 23:33:55 +0530472
473 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530474 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530475 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530476 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530477
Bharat saraswald14cbe82016-07-14 13:26:18 +0530478 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530479 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530480 }
481
482 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530483 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530484 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530485 * @param file file
486 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530487 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530488 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530489 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530490 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530491 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530492 public static File generateDefaultClassFile(File file, YangNode curNode, boolean isAttrPresent,
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530493 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530494 throws IOException {
495
Bharat saraswale50edca2016-08-05 01:58:25 +0530496 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530497 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530498
Bharat saraswal8beac342016-08-04 02:00:03 +0530499 boolean isLeavesPresent;
500 YangLeavesHolder leavesHolder;
501 if (curNode instanceof YangLeavesHolder) {
502 leavesHolder = (YangLeavesHolder) curNode;
503 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
504 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
505 } else {
506 isLeavesPresent = false;
507 }
508
509 boolean isRootNode = false;
510
janani b703cfe42016-05-17 13:12:22 +0530511 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530512 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530513 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530514 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530515 opParamClassName = className + OP_PARAM;
516 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530517 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
518 } else {
519 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
520 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530521
Bharat saraswal8beac342016-08-04 02:00:03 +0530522 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode, className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530523
Bharat saraswal022dae92016-03-04 20:08:09 +0530524 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530525 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530526 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530527 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530528 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530529
530 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530531 try {
532 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530533 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
534 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530535 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530536 } catch (IOException e) {
537 throw new IOException("No data found in temporary java code fragment files for " + className
538 + " while impl class file generation");
539 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530540
Bharat saraswal8beac342016-08-04 02:00:03 +0530541 //Add operation attributes
542 insertDataIntoJavaFile(file, getOperationTypeEnum());
543 insertDataIntoJavaFile(file, getOperationTypeAttr());
544 if (isLeavesPresent) {
545 insertDataIntoJavaFile(file, getOperationAttributes());
546 }
547
Bharat saraswald532a4c2016-03-25 18:19:46 +0530548 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530549 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530550 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
551 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530552 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530553
Bharat saraswal64e7e232016-07-14 23:33:55 +0530554 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530555 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530556 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
557 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530558 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530559
560 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530561 if (isRootNode) {
562 methods.add(getEqualsMethodClose(getEqualsMethodOpen(opParamClassName)
563 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
564 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
565 .getBeanTempFiles(), path)));
566 } else {
567 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
568 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
569 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
570 .getBeanTempFiles(), path)));
571 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530572 // To string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530573 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
574 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530575 .getBeanTempFiles(), path)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530576 + getToStringMethodClose());
577
Bharat saraswale50edca2016-08-05 01:58:25 +0530578
Bharat saraswald532a4c2016-03-25 18:19:46 +0530579 } catch (IOException e) {
580 throw new IOException("No data found in temporary java code fragment files for " + className
581 + " while impl class file generation");
582 }
583 } else {
584 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530585 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530586
Bharat saraswal8beac342016-08-04 02:00:03 +0530587 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530588 methods.add(getYangAugmentInfoImpl());
589 methods.add(getYangAugmentInfoMapImpl());
590 }
591 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530592 //Constructor.
Bharat saraswal8beac342016-08-04 02:00:03 +0530593 String constructor = getConstructorStart(className, pluginConfig, isRootNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530594 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
595 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
596 .getBeanTempFiles(), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530597
Bharat saraswal8beac342016-08-04 02:00:03 +0530598 if (isAttrPresent) {
599 constructor = constructor + getOperationTypeForConstructor();
600 }
601 if (isLeavesPresent) {
602 constructor = constructor + getOperationAttributeForConstructor();
603 }
604 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530605
606 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530607 String augmentableSubTreeFiltering = "";
608 if (curNode instanceof YangAugmentableNode) {
609 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
610 }
611 methods.add(getProcessSubtreeFilteringStart(curNode, pluginConfig)
612 + getProcessSubtreeFunctionBody()
613 + augmentableSubTreeFiltering
614 + getProcessSubTreeFilteringEnd()
615 + getProcessLeafSubtreeFiltering(curNode, pluginConfig, path)
616 + getProcessLeafListSubtreeFiltering(curNode, pluginConfig, path)
617 + getProcessChildNodeSubtreeFiltering(curNode, pluginConfig, path));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530618 } catch (IOException e) {
619 throw new IOException("No data found in temporary java code fragment files for " + className
620 + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530621 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530622
Bharat saraswal8beac342016-08-04 02:00:03 +0530623 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530624 .addDefaultConstructor(PROTECTED, DEFAULT, pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530625
Bharat saraswale50edca2016-08-05 01:58:25 +0530626 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530627 if (isLeavesPresent) {
628 methods.add(getOperationAttributesGetters());
629 methods.add(getGettersForValueAndSelectLeaf());
630 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530631 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530632 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530633 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530634 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530635
Bharat saraswale304c252016-08-16 20:56:20 +0530636 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530637 }
638
639 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530640 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530641 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530642 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530643 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530644 * @param imports imports for file
645 * @return type def class file
646 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530647 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530648 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
649 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530650
Bharat saraswale50edca2016-08-05 01:58:25 +0530651 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530652 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530653
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530654 // import
janani b703cfe42016-05-17 13:12:22 +0530655 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal84366c52016-03-23 19:40:35 +0530656 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530657 YangTypeDef typeDef = (YangTypeDef) curNode;
658 List<YangType<?>> types = typeDef.getTypeList();
659 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530660 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal8beac342016-08-04 02:00:03 +0530661 if (type.getDataType().equals(BINARY)) {
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530662 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
663 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530664
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530665 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530666
Bharat saraswal84366c52016-03-23 19:40:35 +0530667 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530668
Bharat saraswal64e7e232016-07-14 23:33:55 +0530669
670 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530671 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530672 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530673 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
674 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530675 .getTypeTempFiles(), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530676 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530677 throw new IOException("No data found in temporary java code fragment files for " + className
678 + " while type def class file generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530679 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530680
Bharat saraswal64e7e232016-07-14 23:33:55 +0530681
682 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530683 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530684 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530685
Bharat saraswal022dae92016-03-04 20:08:09 +0530686 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530687
Bharat saraswal64e7e232016-07-14 23:33:55 +0530688 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530689 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530690 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
691 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530692
Bharat saraswal64e7e232016-07-14 23:33:55 +0530693
694 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530695 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530696 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
697 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530698
Bharat saraswal64e7e232016-07-14 23:33:55 +0530699 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530700 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530701 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
702 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530703
Bharat saraswal64e7e232016-07-14 23:33:55 +0530704 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530705 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530706 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
707 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530708 .getTypeTempFiles(), path)
709 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530710
Bharat saraswal64e7e232016-07-14 23:33:55 +0530711
712 //Equals method.
Bharat saraswal84366c52016-03-23 19:40:35 +0530713 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530714 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530715 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
716 .getTypeTempFiles(), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530717
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530718
Bharat saraswal64e7e232016-07-14 23:33:55 +0530719 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530720 if (type.getDataType().equals(BINARY)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530721 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530722 getCapitalCase("binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530723
Bharat saraswal64e7e232016-07-14 23:33:55 +0530724 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
725 false);
726 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530727 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530728 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
729 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
730 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
731 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
732 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
733 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +0530734 } else if (type.getDataType().equals(BITS)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530735 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530736 getCapitalCase("bits"));
737
738 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
739 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530740 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530741 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
742 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
743 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
744 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
745 + NEW_LINE;
746 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530747 } else {
748 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530749 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
750 .getTypeTempFiles(), path) + getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530751 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530752
Bharat saraswal64e7e232016-07-14 23:33:55 +0530753 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
754
Bharat saraswal8beac342016-08-04 02:00:03 +0530755 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +0530756 if ((type.getDataType().equals(YangDataTypes.DERIVED))
757 && (((YangDerivedInfo) type.getDataTypeExtendedInfo()).getEffectiveBuiltInType()
758 .equals(YangDataTypes.IDENTITYREF))) {
759 yangDataTypes = YangDataTypes.IDENTITYREF;
760 }
761
762 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
763 yangDataTypes = YangDataTypes.IDENTITYREF;
764 }
765
766 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530767 methods.add(getFromStringMethodSignature(className, pluginConfig)
Bharat saraswal8beac342016-08-04 02:00:03 +0530768 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
Shankara-Huaweib7564772016-08-02 18:13:13 +0530769 .getTypeTempFiles(), path)
Bharat saraswal8beac342016-08-04 02:00:03 +0530770 + getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530771 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530772
Bharat saraswal022dae92016-03-04 20:08:09 +0530773 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530774 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530775 + " while type def class file generation");
Bharat saraswal022dae92016-03-04 20:08:09 +0530776 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530777
Bharat saraswal84366c52016-03-23 19:40:35 +0530778 for (String method : methods) {
779 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530780 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530781 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530782
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530783 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530784 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530785
786 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530787 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530788 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530789 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530790 * @param curNode current YANG node
791 * @param imports imports for file
792 * @return type def class file
793 * @throws IOException when fails to generate class file
794 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530795 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
796 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530797
Bharat saraswale50edca2016-08-05 01:58:25 +0530798 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530799 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530800
janani b703cfe42016-05-17 13:12:22 +0530801 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530802 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
803
Bharat saraswal64e7e232016-07-14 23:33:55 +0530804 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
805 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
806
807 boolean isIntConflict = false;
808 boolean isLongConflict = false;
809 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
810 if (intAttr == null) {
811 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
812 }
813
814 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
815 if (longAttr == null) {
816 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
817 }
818
819 if (intAttr != null) {
820 isIntConflict = intAttr.isIntConflict();
821 }
822 if (longAttr != null) {
823 isLongConflict = longAttr.isLongConflict();
824 }
825
826 if (isLongConflict) {
827 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
828 sort(imports);
829 }
830
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530831 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530832
833 List<String> methods = new ArrayList<>();
834
Bharat saraswal64e7e232016-07-14 23:33:55 +0530835
836 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530837 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530838 if (isIntConflict) {
839 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
840 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
841 }
842
843 if (isLongConflict) {
844 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
845 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
846 }
847
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530848 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530849 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
850 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530851 .getTypeTempFiles(), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530852 } catch (IOException e) {
853 throw new IOException("No data found in temporary java code fragment files for " + className
854 + " while union class file generation");
855 }
856
Bharat saraswal64e7e232016-07-14 23:33:55 +0530857
858 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530859 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530860 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530861
862 try {
863
Bharat saraswal64e7e232016-07-14 23:33:55 +0530864
865 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530866 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530867 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
868 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530869
Bharat saraswal64e7e232016-07-14 23:33:55 +0530870
871 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530872 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530873 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
874 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530875
Bharat saraswal64e7e232016-07-14 23:33:55 +0530876 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530877 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530878 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
879 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530880
Bharat saraswal64e7e232016-07-14 23:33:55 +0530881
882 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530883 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530884 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
885 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530886 .getTypeTempFiles(), path)
887 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530888
Bharat saraswal64e7e232016-07-14 23:33:55 +0530889 //Equals method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530890 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530891 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530892 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
893 .getTypeTempFiles(), path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530894
Bharat saraswal64e7e232016-07-14 23:33:55 +0530895
896 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530897 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530898 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
899 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530900 .getTypeTempFiles(), path)
901 + getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530902
Bharat saraswal64e7e232016-07-14 23:33:55 +0530903
904 //From string method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530905 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530906 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530907 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
908 .getTypeTempFiles(), path)
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530909 + getFromStringMethodClose());
910
Bharat saraswal64e7e232016-07-14 23:33:55 +0530911 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530912 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530913 }
914 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530915 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530916 }
917
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530918 } catch (IOException e) {
919 throw new IOException("No data found in temporary java code fragment files for " + className
920 + " while union class file generation");
921 }
922
923 for (String method : methods) {
924 insertDataIntoJavaFile(file, method);
925 }
926 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
927
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530928 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530929 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530930
931 /**
932 * Generates class file for type enum.
933 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530934 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530935 * @param curNode current YANG node
936 * @return class file for type enum
937 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530938 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530939 public static File generateEnumClassFile(File file, YangNode curNode)
940 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530941
Bharat saraswale50edca2016-08-05 01:58:25 +0530942 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530943 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530944
janani b703cfe42016-05-17 13:12:22 +0530945 String className = javaFileInfo.getJavaName();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530946 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
947
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530948 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530949
950 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530951 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530952 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530953 insertDataIntoJavaFile(file,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530954 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswald14cbe82016-07-14 13:26:18 +0530955 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530956 + SEMI_COLAN + NEW_LINE);
957 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530958 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530959 + " while enum class file generation");
960 }
961
Bharat saraswal64e7e232016-07-14 23:33:55 +0530962
963 // Add an attribute to get the enum's values.
janani b703cfe42016-05-17 13:12:22 +0530964 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530965
Bharat saraswal64e7e232016-07-14 23:33:55 +0530966 // Add a constructor for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530967 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig, null)
Bharat saraswald14cbe82016-07-14 13:26:18 +0530968 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530969
Bharat saraswald14cbe82016-07-14 13:26:18 +0530970 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
971 .getTempJavaCodeFragmentFiles()
972 .getEnumerationTempFiles();
Bharat saraswal250a7472016-05-12 13:16:57 +0530973 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530974 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswal250a7472016-05-12 13:16:57 +0530975 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530976 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530977 + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530978
Bharat saraswal64e7e232016-07-14 23:33:55 +0530979 // Add a getter method for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530980 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig, null)
janani b703cfe42016-05-17 13:12:22 +0530981 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530982
983 try {
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530984 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530985 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530986 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
987 .getEnumerationTempFiles(), path)
Bharat saraswal250a7472016-05-12 13:16:57 +0530988 + getFromStringMethodClose());
989 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530990 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530991 getCapitalCase(className) + " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +0530992 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530993
994 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
995
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530996 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530997 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530998
999 /**
1000 * Generates interface file for rpc.
1001 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301002 * @param file generated file
1003 * @param curNode current YANG node
1004 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301005 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301006 * @throws IOException when fails to generate class file
1007 */
Bharat saraswalaf413b82016-07-14 15:18:20 +05301008 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301009 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301010
Bharat saraswale50edca2016-08-05 01:58:25 +05301011 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301012
Bharat saraswalaf413b82016-07-14 15:18:20 +05301013 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1014 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b703cfe42016-05-17 13:12:22 +05301015 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +05301016 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301017 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301018
1019 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301020 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1021 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301022
1023 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301024
1025 //Getter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301026 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1027 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301028 // Setter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301029 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1030 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301031
Bharat saraswalaf413b82016-07-14 15:18:20 +05301032 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1033
Bharat saraswal250a7472016-05-12 13:16:57 +05301034 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301035 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1036
1037 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301038 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +05301039 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301040 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301041 } catch (IOException e) {
1042 throw new IOException("No data found in temporary java code fragment files for " + className
1043 + " while rpc class file generation");
1044 }
1045
1046 for (String method : methods) {
1047 insertDataIntoJavaFile(file, method);
1048 }
1049 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1050
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301051 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301052 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301053
1054 /**
1055 * Generates event file.
1056 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301057 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301058 * @param curNode current YANG node
1059 * @param imports imports for file
1060 * @throws IOException when fails to generate class file
1061 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301062 public static void generateEventFile(File file, YangNode curNode, List<String> imports)
1063 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301064
Bharat saraswald14cbe82016-07-14 13:26:18 +05301065 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1066 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301067
Bharat saraswal039f59c2016-07-14 21:57:13 +05301068 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1069 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301070
Bharat saraswald14cbe82016-07-14 13:26:18 +05301071 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1072 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301073 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1074 try {
1075 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswald14cbe82016-07-14 13:26:18 +05301076 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301077 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1078
Bharat saraswald14cbe82016-07-14 13:26:18 +05301079 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301080
1081 } catch (IOException e) {
1082 throw new IOException("No data found in temporary java code fragment files for " + className
1083 + " while event class file generation");
1084 }
1085
1086 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1087 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301088 }
1089
1090 /**
1091 * Generates event listener file.
1092 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301093 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301094 * @param curNode current YANG node
1095 * @param imports imports for file
1096 * @throws IOException when fails to generate class file
1097 */
1098 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1099 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301100
Bharat saraswald14cbe82016-07-14 13:26:18 +05301101 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1102 + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301103
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301104 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301105 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301106 validateLineLength(file);
1107 }
1108
1109 /**
1110 * Generates event subject's file.
1111 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301112 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301113 * @param curNode current YANG node
1114 * @throws IOException when fails to do IO exceptions
1115 */
1116 public static void generateEventSubjectFile(File file, YangNode curNode)
1117 throws IOException {
1118
1119 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1120 + EVENT_SUBJECT_NAME_SUFFIX;
1121
1122 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1123
Bharat saraswald14cbe82016-07-14 13:26:18 +05301124 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1125 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301126
1127 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1128 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301129
1130 insertDataIntoJavaFile(file, NEW_LINE);
1131 try {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301132 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301133
Bharat saraswald14cbe82016-07-14 13:26:18 +05301134 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301135
Bharat saraswald14cbe82016-07-14 13:26:18 +05301136 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301137
1138 } catch (IOException e) {
1139 throw new IOException("No data found in temporary java code fragment files for " + className
1140 + " while event class file generation");
1141 }
1142
1143 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1144 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301145 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301146}