blob: 43946f7be24e525b9b3d2fda5c21f84b470d5785 [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,
Bharat saraswal2da23bf2016-08-25 15:28:39 +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,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530379 boolean isAttrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530380 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,
Bharat saraswal2da23bf2016-08-25 15:28:39 +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;
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530809 boolean isShortConflict = false;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530810 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
811 if (intAttr == null) {
812 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
813 }
814
815 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
816 if (longAttr == null) {
817 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
818 }
819
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530820 JavaAttributeInfo shortAttr = tempJavaTypeFragmentFiles.getShortAttribute();
821 if (shortAttr == null) {
822 shortAttr = tempJavaTypeFragmentFiles.getUInt8Attribute();
823 }
824
Bharat saraswal64e7e232016-07-14 23:33:55 +0530825 if (intAttr != null) {
826 isIntConflict = intAttr.isIntConflict();
827 }
828 if (longAttr != null) {
829 isLongConflict = longAttr.isLongConflict();
830 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530831 if (shortAttr != null) {
832 isShortConflict = shortAttr.isShortConflict();
833 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530834 if (isLongConflict) {
835 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
836 sort(imports);
837 }
838
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530839 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530840
841 List<String> methods = new ArrayList<>();
842
Bharat saraswal64e7e232016-07-14 23:33:55 +0530843
844 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530845 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530846 if (isIntConflict) {
847 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
848 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
849 }
850
851 if (isLongConflict) {
852 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
853 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
854 }
855
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530856 if (isShortConflict) {
857 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeShortRange(PRIVATE,
858 tempJavaTypeFragmentFiles.getShortIndex() < tempJavaTypeFragmentFiles.getUInt8Index()));
859 }
860
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530861 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530862 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
863 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530864 .getTypeTempFiles(), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530865 } catch (IOException e) {
866 throw new IOException("No data found in temporary java code fragment files for " + className
867 + " while union class file generation");
868 }
869
Bharat saraswal64e7e232016-07-14 23:33:55 +0530870
871 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530872 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530873 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530874
875 try {
876
Bharat saraswal64e7e232016-07-14 23:33:55 +0530877
878 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530879 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530880 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
881 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530882
Bharat saraswal64e7e232016-07-14 23:33:55 +0530883
884 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530885 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530886 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
887 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530888
Bharat saraswal64e7e232016-07-14 23:33:55 +0530889 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530890 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530891 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
892 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530893
Bharat saraswal64e7e232016-07-14 23:33:55 +0530894
895 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530896 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530897 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
898 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530899 .getTypeTempFiles(), path)
900 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530901
Bharat saraswal64e7e232016-07-14 23:33:55 +0530902 //Equals method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530903 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530904 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530905 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
906 .getTypeTempFiles(), path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530907
Bharat saraswal64e7e232016-07-14 23:33:55 +0530908
909 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530910 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530911 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
912 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530913 .getTypeTempFiles(), path)
914 + getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530915
Bharat saraswal64e7e232016-07-14 23:33:55 +0530916
917 //From string method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530918 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530919 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530920 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
921 .getTypeTempFiles(), path)
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530922 + getFromStringMethodClose());
923
Bharat saraswal64e7e232016-07-14 23:33:55 +0530924 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530925 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530926 }
927 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530928 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530929 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530930 if (isShortConflict) {
931 methods.add(getRangeValidatorMethodForUnion(INT));
932 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530933
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530934 } catch (IOException e) {
935 throw new IOException("No data found in temporary java code fragment files for " + className
936 + " while union class file generation");
937 }
938
939 for (String method : methods) {
940 insertDataIntoJavaFile(file, method);
941 }
942 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
943
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530944 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530945 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530946
947 /**
948 * Generates class file for type enum.
949 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530950 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530951 * @param curNode current YANG node
952 * @return class file for type enum
953 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530954 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530955 public static File generateEnumClassFile(File file, YangNode curNode)
956 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530957
Bharat saraswale50edca2016-08-05 01:58:25 +0530958 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530959 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530960
janani b703cfe42016-05-17 13:12:22 +0530961 String className = javaFileInfo.getJavaName();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530962 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
963
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530964 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530965
966 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530967 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530968 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530969 insertDataIntoJavaFile(file,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530970 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswald14cbe82016-07-14 13:26:18 +0530971 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530972 + SEMI_COLAN + NEW_LINE);
973 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530974 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530975 + " while enum class file generation");
976 }
977
Bharat saraswal64e7e232016-07-14 23:33:55 +0530978
979 // Add an attribute to get the enum's values.
janani b703cfe42016-05-17 13:12:22 +0530980 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530981
Bharat saraswal64e7e232016-07-14 23:33:55 +0530982 // Add a constructor for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530983 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig, null)
Bharat saraswald14cbe82016-07-14 13:26:18 +0530984 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530985
Bharat saraswald14cbe82016-07-14 13:26:18 +0530986 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
987 .getTempJavaCodeFragmentFiles()
988 .getEnumerationTempFiles();
Bharat saraswal250a7472016-05-12 13:16:57 +0530989 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530990 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswal250a7472016-05-12 13:16:57 +0530991 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530992 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530993 + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530994
Bharat saraswal64e7e232016-07-14 23:33:55 +0530995 // Add a getter method for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530996 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig, null)
janani b703cfe42016-05-17 13:12:22 +0530997 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530998
999 try {
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301000 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +05301001 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +05301002 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1003 .getEnumerationTempFiles(), path)
Bharat saraswal250a7472016-05-12 13:16:57 +05301004 + getFromStringMethodClose());
1005 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +05301006 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301007 getCapitalCase(className) + " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +05301008 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301009
1010 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1011
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301012 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301013 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301014
1015 /**
1016 * Generates interface file for rpc.
1017 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301018 * @param file generated file
1019 * @param curNode current YANG node
1020 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301021 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301022 * @throws IOException when fails to generate class file
1023 */
Bharat saraswalaf413b82016-07-14 15:18:20 +05301024 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301025 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301026
Bharat saraswale50edca2016-08-05 01:58:25 +05301027 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301028
Bharat saraswalaf413b82016-07-14 15:18:20 +05301029 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1030 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b703cfe42016-05-17 13:12:22 +05301031 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +05301032 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301033 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301034
1035 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301036 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1037 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301038
1039 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301040
1041 //Getter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301042 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1043 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301044 // Setter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301045 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1046 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301047
Bharat saraswalaf413b82016-07-14 15:18:20 +05301048 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1049
Bharat saraswal250a7472016-05-12 13:16:57 +05301050 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301051 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1052
1053 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301054 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +05301055 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301056 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301057 } catch (IOException e) {
1058 throw new IOException("No data found in temporary java code fragment files for " + className
1059 + " while rpc class file generation");
1060 }
1061
1062 for (String method : methods) {
1063 insertDataIntoJavaFile(file, method);
1064 }
1065 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1066
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301067 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301068 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301069
1070 /**
1071 * Generates event file.
1072 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301073 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301074 * @param curNode current YANG node
1075 * @param imports imports for file
1076 * @throws IOException when fails to generate class file
1077 */
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301078 public static void generateEventFile(File file, YangNode curNode, List<String> imports)
1079 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301080
Bharat saraswald14cbe82016-07-14 13:26:18 +05301081 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1082 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301083
Bharat saraswal039f59c2016-07-14 21:57:13 +05301084 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1085 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301086
Bharat saraswald14cbe82016-07-14 13:26:18 +05301087 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1088 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301089 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1090 try {
1091 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswald14cbe82016-07-14 13:26:18 +05301092 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301093 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1094
Bharat saraswald14cbe82016-07-14 13:26:18 +05301095 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301096
1097 } catch (IOException e) {
1098 throw new IOException("No data found in temporary java code fragment files for " + className
1099 + " while event class file generation");
1100 }
1101
1102 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1103 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301104 }
1105
1106 /**
1107 * Generates event listener file.
1108 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301109 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301110 * @param curNode current YANG node
1111 * @param imports imports for file
1112 * @throws IOException when fails to generate class file
1113 */
1114 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1115 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301116
Bharat saraswald14cbe82016-07-14 13:26:18 +05301117 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1118 + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301119
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301120 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301121 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301122 validateLineLength(file);
1123 }
1124
1125 /**
1126 * Generates event subject's file.
1127 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301128 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301129 * @param curNode current YANG node
1130 * @throws IOException when fails to do IO exceptions
1131 */
1132 public static void generateEventSubjectFile(File file, YangNode curNode)
1133 throws IOException {
1134
1135 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1136 + EVENT_SUBJECT_NAME_SUFFIX;
1137
1138 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1139
Bharat saraswald14cbe82016-07-14 13:26:18 +05301140 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1141 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301142
1143 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1144 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301145
1146 insertDataIntoJavaFile(file, NEW_LINE);
1147 try {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301148 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301149
Bharat saraswald14cbe82016-07-14 13:26:18 +05301150 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301151
Bharat saraswald14cbe82016-07-14 13:26:18 +05301152 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301153
1154 } catch (IOException e) {
1155 throw new IOException("No data found in temporary java code fragment files for " + className
1156 + " while event class file generation");
1157 }
1158
1159 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1160 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301161 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301162}