blob: 412409a1bf229e03ac04cb644d4f734a340b65be [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;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053023import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053024import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053025import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053026import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053027import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswal039f59c2016-07-14 21:57:13 +053028import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053029import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +053030import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053031import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053032import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswale50edca2016-08-05 01:58:25 +053033import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053034import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053035import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053036import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053037import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053038import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Shankara-Huaweib7564772016-08-02 18:13:13 +053039import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053040import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal250a7472016-05-12 13:16:57 +053041import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053043import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053044import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053045import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053046
Bharat saraswal8beac342016-08-04 02:00:03 +053047import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
48import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053059import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswal68fa0d12016-04-19 01:00:16 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Bharat saraswale50edca2016-08-05 01:58:25 +053072import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +053075import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053080import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053081import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
83import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053085import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053086import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053087import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswale50edca2016-08-05 01:58:25 +053088import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
Bharat saraswald14cbe82016-07-14 13:26:18 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalaf413b82016-07-14 15:18:20 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal8beac342016-08-04 02:00:03 +053091import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeAttr;
94import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
95import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeForConstructor;
Bharat saraswalaf413b82016-07-14 15:18:20 +053096import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswal84366c52016-03-23 19:40:35 +053097import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal8beac342016-08-04 02:00:03 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
Bharat saraswal8beac342016-08-04 02:00:03 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswal250a7472016-05-12 13:16:57 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal8beac342016-08-04 02:00:03 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForOperationType;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGettersForValueAndSelectLeaf;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumMethods;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswale50edca2016-08-05 01:58:25 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilerContentMatchClose;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilterContentMatchStart;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationAttributesGetters;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForOperationType;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
132import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isFilterContentMatchInterface;
133import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
134import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
135import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530136import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530137import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530138import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
139import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530140import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530141import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530142import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
143import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530144import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530145import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530146import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
147import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530148import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530150import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530151import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530152import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530153import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
154import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal84366c52016-03-23 19:40:35 +0530155import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530156import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530157import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530158import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530159import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
160import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
161import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530162import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530163import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
164import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
165import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530166import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
167import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530168import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
169import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530170import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530171import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530172import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530173import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530176import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530177
Vinod Kumar S08710982016-03-03 19:55:30 +0530178/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530179 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530180 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530181public final class JavaFileGenerator {
182
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530183 private JavaFileGenerator() {
184 }
185
186 /**
187 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530188 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530189 * @param file file
190 * @param imports imports for the file
191 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530192 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530193 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530194 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530195 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530196 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530197 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530198 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530199
Bharat saraswale50edca2016-08-05 01:58:25 +0530200 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530201
202 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530203 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530204 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
205 } else {
206 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
207 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530208
janani b703cfe42016-05-17 13:12:22 +0530209 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530210
Bharat saraswal8beac342016-08-04 02:00:03 +0530211 boolean isLeavesPresent;
212 YangLeavesHolder leavesHolder;
213 if (curNode instanceof YangLeavesHolder) {
214 leavesHolder = (YangLeavesHolder) curNode;
215 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
216 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
217 } else {
218 isLeavesPresent = false;
219 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530220
Bharat saraswal8beac342016-08-04 02:00:03 +0530221 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
222 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530223 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530224 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530225 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530226 //Leaf identifier enum.
227 if (isLeavesPresent) {
228 insertDataIntoJavaFile(file, NEW_LINE + getInterfaceLeafIdEnumSignature(className) + NEW_LINE +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530229 trimAtLast(replaceLast(
Bharat saraswal8beac342016-08-04 02:00:03 +0530230 getDataFromTempFileHandle(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
231 ((TempJavaCodeFragmentFilesContainer) curNode)
232 .getTempJavaCodeFragmentFiles()
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530233 .getBeanTempFiles(), path), COMMA, SEMI_COLAN), NEW_LINE) +
234 NEW_LINE + NEW_LINE + getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530235 }
236
Bharat saraswal64e7e232016-07-14 23:33:55 +0530237 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530238 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
239 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530240 .getBeanTempFiles(), path));
Bharat saraswal8beac342016-08-04 02:00:03 +0530241 //Add to list method.
242 insertDataIntoJavaFile(file, getDataFromTempFileHandle(ADD_TO_LIST_INTERFACE_MASK,
243 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
244 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530245 } catch (IOException e) {
246 throw new IOException("No data found in temporary java code fragment files for " + className
247 + " while interface file generation");
248 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530249 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530250
251 if (curNode instanceof YangAugmentableNode && !(curNode instanceof YangChoice)) {
252 methods.add(getAddAugmentInfoMethodInterface());
253 methods.add(getYangAugmentInfoInterface());
254 methods.add(getYangAugmentInfoMapInterface(javaFileInfo.getPluginConfig()));
255 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530256 if (curNode instanceof YangCase) {
257 YangNode caseParent = curNode.getParent();
258 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifierInfoForCasesParent(caseParent,
259 javaFileInfo.getPluginConfig());
260 methods.add(NEW_LINE + isFilterContentMatchInterface(qualifiedTypeInfo.getClassInfo()));
261 } else {
Bharat saraswal8beac342016-08-04 02:00:03 +0530262 methods.add(NEW_LINE + isFilterContentMatchInterface(className));
263 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530264
265 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530266 methods.add(NEW_LINE + isLeafValueSetInterface());
267 methods.add(NEW_LINE + isSelectLeafSetInterface());
268 }
269 for (String method : methods) {
270 insertDataIntoJavaFile(file, method);
271 }
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530272 return validateLineLength(file);
Bharat saraswal8beac342016-08-04 02:00:03 +0530273
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530274 }
275
276 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530277 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530278 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530279 * @param file file
280 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530281 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530282 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530283 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530284 */
Bharat saraswald532a4c2016-03-25 18:19:46 +0530285 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
286 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530287
Bharat saraswale50edca2016-08-05 01:58:25 +0530288 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530289 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530290
Bharat saraswal8beac342016-08-04 02:00:03 +0530291 boolean isLeavesPresent;
292 YangLeavesHolder leavesHolder;
293 if (curNode instanceof YangLeavesHolder) {
294 leavesHolder = (YangLeavesHolder) curNode;
295 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
296 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
297 } else {
298 isLeavesPresent = false;
299 }
300
janani b703cfe42016-05-17 13:12:22 +0530301 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530302 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530303 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530304 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
305 } else {
306 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
307 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530308
Bharat saraswald14cbe82016-07-14 13:26:18 +0530309 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530310 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530311 if (isAttrPresent) {
312 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530313
314 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530315 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
316 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530317 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530318
319 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530320 methods.add(NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530321 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
322 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530323 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530324 } catch (IOException e) {
325 throw new IOException("No data found in temporary java code fragment files for " + className
326 + " while builder interface file generation");
327 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530328 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530329
Bharat saraswal8beac342016-08-04 02:00:03 +0530330 if (isLeavesPresent) {
331 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
332 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530333 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530334 methods.add(
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530335 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530336 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530337
Bharat saraswal64e7e232016-07-14 23:33:55 +0530338
339 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530340 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530341 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530342 }
343
Bharat saraswal84366c52016-03-23 19:40:35 +0530344 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530345 return validateLineLength(file);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530346 }
347
348 /**
349 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530350 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530351 * @param file file
352 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530353 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530354 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530355 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530356 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530357
Bharat saraswald14cbe82016-07-14 13:26:18 +0530358 public static File generateBuilderClassFile(File file, YangNode curNode,
359 boolean isAttrPresent) throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530360
Bharat saraswale50edca2016-08-05 01:58:25 +0530361 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530362 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530363
Bharat saraswal8beac342016-08-04 02:00:03 +0530364 boolean isLeavesPresent;
365 YangLeavesHolder leavesHolder;
366 if (curNode instanceof YangLeavesHolder) {
367 leavesHolder = (YangLeavesHolder) curNode;
368 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
369 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
370 } else {
371 isLeavesPresent = false;
372 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530373
Bharat saraswal8beac342016-08-04 02:00:03 +0530374 String className = getCapitalCase(javaFileInfo.getJavaName());
375 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530376 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530377 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530378 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530379 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
380 } else {
381 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
382 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530383
Bharat saraswald14cbe82016-07-14 13:26:18 +0530384 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530385 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530386
Bharat saraswald532a4c2016-03-25 18:19:46 +0530387 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530388
389 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530390 try {
391 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530392 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
393 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530394 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530395 } catch (IOException e) {
396 throw new IOException("No data found in temporary java code fragment files for " + className
397 + " while builder class file generation");
398 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530399
Bharat saraswal8beac342016-08-04 02:00:03 +0530400 insertDataIntoJavaFile(file, getOperationTypeAttr());
401 if (isLeavesPresent) {
402 insertDataIntoJavaFile(file, getOperationAttributes());
403 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530404 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530405 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530406 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
407 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530408 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530409 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530410 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
411 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530412 .getBeanTempFiles(), path));
413
Bharat saraswald14cbe82016-07-14 13:26:18 +0530414 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530415
416 methods.add(getGetterForOperationType());
417 methods.add(getSetterForOperationType(className));
418 //Add operation attribute methods.
419 if (isLeavesPresent) {
420 methods.add(getOperationAttributesGetters() + NEW_LINE);
421 methods.add(getSetterForSelectLeaf(className, isRootNode));
422 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530423 } catch (IOException e) {
424 throw new IOException("No data found in temporary java code fragment files for " + className
425 + " while builder class file generation");
426 }
427 } else {
428 insertDataIntoJavaFile(file, NEW_LINE);
429 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530430
431 // Add default constructor and build method impl.
Bharat saraswal250a7472016-05-12 13:16:57 +0530432 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530433 .addBuildMethodImpl(curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530434 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530435 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530436
Bharat saraswal64e7e232016-07-14 23:33:55 +0530437
438 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530439 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530440 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530441 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530442
Bharat saraswald14cbe82016-07-14 13:26:18 +0530443 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530444 return validateLineLength(file);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530445 }
446
447 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530448 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530449 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530450 * @param file file
451 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530452 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530453 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530454 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530455 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530456 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530457 public static File generateDefaultClassFile(File file, YangNode curNode, boolean isAttrPresent,
458 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530459 throws IOException {
460
Bharat saraswale50edca2016-08-05 01:58:25 +0530461 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530462 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530463
Bharat saraswal8beac342016-08-04 02:00:03 +0530464 boolean isLeavesPresent;
465 YangLeavesHolder leavesHolder;
466 if (curNode instanceof YangLeavesHolder) {
467 leavesHolder = (YangLeavesHolder) curNode;
468 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
469 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
470 } else {
471 isLeavesPresent = false;
472 }
473
474 boolean isRootNode = false;
475
janani b703cfe42016-05-17 13:12:22 +0530476 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530477 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530478 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530479 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530480 opParamClassName = className + OP_PARAM;
481 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530482 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
483 } else {
484 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
485 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530486
Bharat saraswal8beac342016-08-04 02:00:03 +0530487 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode, className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530488
Bharat saraswal022dae92016-03-04 20:08:09 +0530489 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530490 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530491 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530492 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530493 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530494
495 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530496 try {
497 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530498 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
499 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530500 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530501 } catch (IOException e) {
502 throw new IOException("No data found in temporary java code fragment files for " + className
503 + " while impl class file generation");
504 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530505
Bharat saraswal8beac342016-08-04 02:00:03 +0530506 //Add operation attributes
507 insertDataIntoJavaFile(file, getOperationTypeEnum());
508 insertDataIntoJavaFile(file, getOperationTypeAttr());
509 if (isLeavesPresent) {
510 insertDataIntoJavaFile(file, getOperationAttributes());
511 }
512
Bharat saraswald532a4c2016-03-25 18:19:46 +0530513 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530514 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530515 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
516 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530517 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530518
Bharat saraswal8beac342016-08-04 02:00:03 +0530519 //Add to list impl method.
520 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
521 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
522 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530523
524 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530525 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530526 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
527 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530528 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530529
530 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530531 if (isRootNode) {
532 methods.add(getEqualsMethodClose(getEqualsMethodOpen(opParamClassName)
533 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
534 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
535 .getBeanTempFiles(), path)));
536 } else {
537 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
538 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
539 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
540 .getBeanTempFiles(), path)));
541 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530542 // To string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530543 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
544 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530545 .getBeanTempFiles(), path)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530546 + getToStringMethodClose());
547
Bharat saraswale50edca2016-08-05 01:58:25 +0530548
Bharat saraswald532a4c2016-03-25 18:19:46 +0530549 } catch (IOException e) {
550 throw new IOException("No data found in temporary java code fragment files for " + className
551 + " while impl class file generation");
552 }
553 } else {
554 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530555 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530556
Bharat saraswal8beac342016-08-04 02:00:03 +0530557 if (curNode instanceof YangAugmentableNode) {
558 methods.add(getAddAugmentInfoMethodImpl());
559 methods.add(getYangAugmentInfoImpl());
560 methods.add(getYangAugmentInfoMapImpl());
561 }
562 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530563 //Constructor.
Bharat saraswal8beac342016-08-04 02:00:03 +0530564 String constructor = getConstructorStart(className, pluginConfig, isRootNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530565 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
566 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
567 .getBeanTempFiles(), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530568
Bharat saraswal8beac342016-08-04 02:00:03 +0530569 if (isAttrPresent) {
570 constructor = constructor + getOperationTypeForConstructor();
571 }
572 if (isLeavesPresent) {
573 constructor = constructor + getOperationAttributeForConstructor();
574 }
575 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530576
577 // add is filter content match.
578 methods.add(getIsFilterContentMatchStart(curNode, pluginConfig)
579 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
580 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
581 .getBeanTempFiles(), path)
582 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
583 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
584 .getBeanTempFiles(), path)
585 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
586 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
587 .getBeanTempFiles(), path)
588 + getIsFilerContentMatchClose());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530589 } catch (IOException e) {
590 throw new IOException("No data found in temporary java code fragment files for " + className
591 + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530592 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530593
Bharat saraswal8beac342016-08-04 02:00:03 +0530594 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
595 .addDefaultConstructor(PUBLIC, DEFAULT, pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530596
Bharat saraswale50edca2016-08-05 01:58:25 +0530597 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530598 if (isLeavesPresent) {
599 methods.add(getOperationAttributesGetters());
600 methods.add(getGettersForValueAndSelectLeaf());
601 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530602 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530603 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530604 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530605 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530606
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530607 return validateLineLength(file);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530608 }
609
610 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530611 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530612 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530613 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530614 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530615 * @param imports imports for file
616 * @return type def class file
617 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530618 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530619 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
620 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530621
Bharat saraswale50edca2016-08-05 01:58:25 +0530622 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530623 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530624
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530625 // import
janani b703cfe42016-05-17 13:12:22 +0530626 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal84366c52016-03-23 19:40:35 +0530627 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530628 YangTypeDef typeDef = (YangTypeDef) curNode;
629 List<YangType<?>> types = typeDef.getTypeList();
630 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530631 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal8beac342016-08-04 02:00:03 +0530632 if (type.getDataType().equals(BINARY)) {
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530633 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
634 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530635
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530636 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530637
Bharat saraswal84366c52016-03-23 19:40:35 +0530638 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530639
Bharat saraswal64e7e232016-07-14 23:33:55 +0530640
641 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530642 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530643 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530644 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
645 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530646 .getTypeTempFiles(), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530647 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530648 throw new IOException("No data found in temporary java code fragment files for " + className
649 + " while type def class file generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530650 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530651
Bharat saraswal64e7e232016-07-14 23:33:55 +0530652
653 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530654 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530655 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530656
Bharat saraswal022dae92016-03-04 20:08:09 +0530657 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530658
Bharat saraswal64e7e232016-07-14 23:33:55 +0530659 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530660 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530661 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
662 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530663
Bharat saraswal64e7e232016-07-14 23:33:55 +0530664
665 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530666 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530667 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
668 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530669
Bharat saraswal64e7e232016-07-14 23:33:55 +0530670 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530671 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530672 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
673 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530674
Bharat saraswal64e7e232016-07-14 23:33:55 +0530675
676 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530677 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530678 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
679 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530680 .getTypeTempFiles(), path)
681 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530682
Bharat saraswal64e7e232016-07-14 23:33:55 +0530683
684 //Equals method.
Bharat saraswal84366c52016-03-23 19:40:35 +0530685 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530686 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530687 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
688 .getTypeTempFiles(), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530689
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530690
Bharat saraswal64e7e232016-07-14 23:33:55 +0530691 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530692 if (type.getDataType().equals(BINARY)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530693 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530694 getCapitalCase("binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530695
Bharat saraswal64e7e232016-07-14 23:33:55 +0530696 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
697 false);
698 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530699 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530700 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
701 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
702 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
703 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
704 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
705 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +0530706 } else if (type.getDataType().equals(BITS)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530707 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530708 getCapitalCase("bits"));
709
710 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
711 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530712 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530713 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
714 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
715 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
716 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
717 + NEW_LINE;
718 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530719 } else {
720 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530721 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
722 .getTypeTempFiles(), path) + getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530723 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530724
Bharat saraswal64e7e232016-07-14 23:33:55 +0530725 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
726
Bharat saraswal8beac342016-08-04 02:00:03 +0530727 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +0530728 if ((type.getDataType().equals(YangDataTypes.DERIVED))
729 && (((YangDerivedInfo) type.getDataTypeExtendedInfo()).getEffectiveBuiltInType()
730 .equals(YangDataTypes.IDENTITYREF))) {
731 yangDataTypes = YangDataTypes.IDENTITYREF;
732 }
733
734 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
735 yangDataTypes = YangDataTypes.IDENTITYREF;
736 }
737
738 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530739 methods.add(getFromStringMethodSignature(className, pluginConfig)
Bharat saraswal8beac342016-08-04 02:00:03 +0530740 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
Shankara-Huaweib7564772016-08-02 18:13:13 +0530741 .getTypeTempFiles(), path)
Bharat saraswal8beac342016-08-04 02:00:03 +0530742 + getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530743 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530744
Bharat saraswal022dae92016-03-04 20:08:09 +0530745 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530746 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530747 + " while type def class file generation");
Bharat saraswal022dae92016-03-04 20:08:09 +0530748 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530749
Bharat saraswal84366c52016-03-23 19:40:35 +0530750 for (String method : methods) {
751 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530752 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530753 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530754
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530755 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530756 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530757
758 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530759 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530760 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530761 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530762 * @param curNode current YANG node
763 * @param imports imports for file
764 * @return type def class file
765 * @throws IOException when fails to generate class file
766 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530767 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
768 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530769
Bharat saraswale50edca2016-08-05 01:58:25 +0530770 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530771 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530772
janani b703cfe42016-05-17 13:12:22 +0530773 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530774 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
775
Bharat saraswal64e7e232016-07-14 23:33:55 +0530776 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
777 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
778
779 boolean isIntConflict = false;
780 boolean isLongConflict = false;
781 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
782 if (intAttr == null) {
783 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
784 }
785
786 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
787 if (longAttr == null) {
788 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
789 }
790
791 if (intAttr != null) {
792 isIntConflict = intAttr.isIntConflict();
793 }
794 if (longAttr != null) {
795 isLongConflict = longAttr.isLongConflict();
796 }
797
798 if (isLongConflict) {
799 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
800 sort(imports);
801 }
802
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530803 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530804
805 List<String> methods = new ArrayList<>();
806
Bharat saraswal64e7e232016-07-14 23:33:55 +0530807
808 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530809 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530810 if (isIntConflict) {
811 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
812 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
813 }
814
815 if (isLongConflict) {
816 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
817 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
818 }
819
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530820 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530821 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
822 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530823 .getTypeTempFiles(), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530824 } catch (IOException e) {
825 throw new IOException("No data found in temporary java code fragment files for " + className
826 + " while union class file generation");
827 }
828
Bharat saraswal64e7e232016-07-14 23:33:55 +0530829
830 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530831 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530832 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530833
834 try {
835
Bharat saraswal64e7e232016-07-14 23:33:55 +0530836
837 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530838 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530839 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
840 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530841
Bharat saraswal64e7e232016-07-14 23:33:55 +0530842
843 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530844 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530845 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
846 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530847
Bharat saraswal64e7e232016-07-14 23:33:55 +0530848 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530849 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530850 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
851 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530852
Bharat saraswal64e7e232016-07-14 23:33:55 +0530853
854 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530855 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530856 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
857 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530858 .getTypeTempFiles(), path)
859 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530860
Bharat saraswal64e7e232016-07-14 23:33:55 +0530861 //Equals method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530862 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530863 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530864 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
865 .getTypeTempFiles(), path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530866
Bharat saraswal64e7e232016-07-14 23:33:55 +0530867
868 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530869 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530870 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
871 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530872 .getTypeTempFiles(), path)
873 + getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530874
Bharat saraswal64e7e232016-07-14 23:33:55 +0530875
876 //From string method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530877 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530878 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530879 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
880 .getTypeTempFiles(), path)
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530881 + getFromStringMethodClose());
882
Bharat saraswal64e7e232016-07-14 23:33:55 +0530883 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530884 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530885 }
886 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530887 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530888 }
889
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530890 } catch (IOException e) {
891 throw new IOException("No data found in temporary java code fragment files for " + className
892 + " while union class file generation");
893 }
894
895 for (String method : methods) {
896 insertDataIntoJavaFile(file, method);
897 }
898 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
899
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530900 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530901 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530902
903 /**
904 * Generates class file for type enum.
905 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530906 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530907 * @param curNode current YANG node
908 * @return class file for type enum
909 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530910 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530911 public static File generateEnumClassFile(File file, YangNode curNode)
912 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530913
Bharat saraswale50edca2016-08-05 01:58:25 +0530914 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530915 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530916
janani b703cfe42016-05-17 13:12:22 +0530917 String className = javaFileInfo.getJavaName();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530918 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
919
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530920 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530921
922 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530923 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530924 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530925 insertDataIntoJavaFile(file,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530926 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswald14cbe82016-07-14 13:26:18 +0530927 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530928 + SEMI_COLAN + NEW_LINE);
929 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530930 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530931 + " while enum class file generation");
932 }
933
Bharat saraswal64e7e232016-07-14 23:33:55 +0530934
935 // Add an attribute to get the enum's values.
janani b703cfe42016-05-17 13:12:22 +0530936 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530937
Bharat saraswal64e7e232016-07-14 23:33:55 +0530938 // Add a constructor for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530939 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig, null)
Bharat saraswald14cbe82016-07-14 13:26:18 +0530940 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530941
Bharat saraswald14cbe82016-07-14 13:26:18 +0530942 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
943 .getTempJavaCodeFragmentFiles()
944 .getEnumerationTempFiles();
Bharat saraswal250a7472016-05-12 13:16:57 +0530945 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530946 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswal250a7472016-05-12 13:16:57 +0530947 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530948 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530949 + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530950
Bharat saraswal64e7e232016-07-14 23:33:55 +0530951 // Add a getter method for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530952 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig, null)
janani b703cfe42016-05-17 13:12:22 +0530953 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530954
955 try {
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530956 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530957 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530958 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
959 .getEnumerationTempFiles(), path)
Bharat saraswal250a7472016-05-12 13:16:57 +0530960 + getFromStringMethodClose());
961 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530962 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530963 getCapitalCase(className) + " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +0530964 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530965
966 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
967
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530968 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530969 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530970
971 /**
972 * Generates interface file for rpc.
973 *
Bharat saraswal64e7e232016-07-14 23:33:55 +0530974 * @param file generated file
975 * @param curNode current YANG node
976 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530977 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530978 * @throws IOException when fails to generate class file
979 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530980 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530981 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530982
Bharat saraswale50edca2016-08-05 01:58:25 +0530983 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530984
Bharat saraswalaf413b82016-07-14 15:18:20 +0530985 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
986 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b703cfe42016-05-17 13:12:22 +0530987 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530988 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530989 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530990
991 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530992 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
993 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530994
995 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530996
997 //Getter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530998 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
999 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301000 // Setter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301001 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1002 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301003
Bharat saraswalaf413b82016-07-14 15:18:20 +05301004 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1005
Bharat saraswal250a7472016-05-12 13:16:57 +05301006 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301007 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1008
1009 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301010 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +05301011 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301012 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301013 } catch (IOException e) {
1014 throw new IOException("No data found in temporary java code fragment files for " + className
1015 + " while rpc class file generation");
1016 }
1017
1018 for (String method : methods) {
1019 insertDataIntoJavaFile(file, method);
1020 }
1021 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1022
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301023 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301024 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301025
1026 /**
1027 * Generates event file.
1028 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301029 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301030 * @param curNode current YANG node
1031 * @param imports imports for file
1032 * @throws IOException when fails to generate class file
1033 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301034 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301035
Bharat saraswald14cbe82016-07-14 13:26:18 +05301036 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1037 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301038
Bharat saraswal039f59c2016-07-14 21:57:13 +05301039 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1040 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301041
Bharat saraswald14cbe82016-07-14 13:26:18 +05301042 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1043 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301044 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1045 try {
1046 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswald14cbe82016-07-14 13:26:18 +05301047 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301048 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1049
Bharat saraswald14cbe82016-07-14 13:26:18 +05301050 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301051
1052 } catch (IOException e) {
1053 throw new IOException("No data found in temporary java code fragment files for " + className
1054 + " while event class file generation");
1055 }
1056
1057 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1058 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301059 }
1060
1061 /**
1062 * Generates event listener file.
1063 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301064 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301065 * @param curNode current YANG node
1066 * @param imports imports for file
1067 * @throws IOException when fails to generate class file
1068 */
1069 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1070 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301071
Bharat saraswald14cbe82016-07-14 13:26:18 +05301072 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1073 + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301074
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301075 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301076 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301077 validateLineLength(file);
1078 }
1079
1080 /**
1081 * Generates event subject's file.
1082 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301083 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301084 * @param curNode current YANG node
1085 * @throws IOException when fails to do IO exceptions
1086 */
1087 public static void generateEventSubjectFile(File file, YangNode curNode)
1088 throws IOException {
1089
1090 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1091 + EVENT_SUBJECT_NAME_SUFFIX;
1092
1093 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1094
Bharat saraswald14cbe82016-07-14 13:26:18 +05301095 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1096 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301097
1098 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1099 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301100
1101 insertDataIntoJavaFile(file, NEW_LINE);
1102 try {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301103 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301104
Bharat saraswald14cbe82016-07-14 13:26:18 +05301105 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301106
Bharat saraswald14cbe82016-07-14 13:26:18 +05301107 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301108
1109 } catch (IOException e) {
1110 throw new IOException("No data found in temporary java code fragment files for " + className
1111 + " while event class file generation");
1112 }
1113
1114 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1115 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301116 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301117}