blob: 45cb014193916a207d42cb2cc046651b589cb38f [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;
Bharat saraswale50edca2016-08-05 01:58:25 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Bharat saraswal8beac342016-08-04 02:00:03 +053080import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +053081import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053082import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053083import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
85import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053086import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweib7564772016-08-02 18:13:13 +053087import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswalaf413b82016-07-14 15:18:20 +053088import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswale50edca2016-08-05 01:58:25 +053089import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
Bharat saraswald14cbe82016-07-14 13:26:18 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalaf413b82016-07-14 15:18:20 +053091import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswal8beac342016-08-04 02:00:03 +053092import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
94import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeAttr;
95import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
96import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeForConstructor;
Bharat saraswalaf413b82016-07-14 15:18:20 +053097import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswal84366c52016-03-23 19:40:35 +053098import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal8beac342016-08-04 02:00:03 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
Bharat saraswal8beac342016-08-04 02:00:03 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswal250a7472016-05-12 13:16:57 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal8beac342016-08-04 02:00:03 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForOperationType;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGettersForValueAndSelectLeaf;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumMethods;
117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswale50edca2016-08-05 01:58:25 +0530118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilerContentMatchClose;
119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilterContentMatchStart;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationAttributesGetters;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
Bharat saraswal8beac342016-08-04 02:00:03 +0530123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForOperationType;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal8beac342016-08-04 02:00:03 +0530129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
132import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
133import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isFilterContentMatchInterface;
134import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
135import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
136import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530137import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530138import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530139import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
140import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530141import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530142import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530143import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
144import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530146import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530147import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
148import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530149import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal84366c52016-03-23 19:40:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530151import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530152import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530153import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530154import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
155import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal84366c52016-03-23 19:40:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530157import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530158import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530159import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530160import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
161import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
162import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530163import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530164import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
165import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
166import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530167import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
168import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530169import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
170import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530171import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530172import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530173import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530174import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530175import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530176import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530177import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530178
Vinod Kumar S08710982016-03-03 19:55:30 +0530179/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530180 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530181 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530182public final class JavaFileGenerator {
183
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530184 private JavaFileGenerator() {
185 }
186
187 /**
188 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530189 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530190 * @param file file
191 * @param imports imports for the file
192 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530193 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530194 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530195 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530196 */
Bharat saraswal250a7472016-05-12 13:16:57 +0530197 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530198 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530199 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530200
Bharat saraswale50edca2016-08-05 01:58:25 +0530201 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530202
203 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530204 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530205 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
206 } else {
207 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
208 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530209
janani b703cfe42016-05-17 13:12:22 +0530210 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530211
Bharat saraswal8beac342016-08-04 02:00:03 +0530212 boolean isLeavesPresent;
213 YangLeavesHolder leavesHolder;
214 if (curNode instanceof YangLeavesHolder) {
215 leavesHolder = (YangLeavesHolder) curNode;
216 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
217 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
218 } else {
219 isLeavesPresent = false;
220 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530221
Bharat saraswal8beac342016-08-04 02:00:03 +0530222 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
223 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530224 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530225 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530226 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530227 //Leaf identifier enum.
228 if (isLeavesPresent) {
229 insertDataIntoJavaFile(file, NEW_LINE + getInterfaceLeafIdEnumSignature(className) + NEW_LINE +
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530230 trimAtLast(replaceLast(
Bharat saraswal8beac342016-08-04 02:00:03 +0530231 getDataFromTempFileHandle(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
232 ((TempJavaCodeFragmentFilesContainer) curNode)
233 .getTempJavaCodeFragmentFiles()
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530234 .getBeanTempFiles(), path), COMMA, SEMI_COLAN), NEW_LINE) +
235 NEW_LINE + NEW_LINE + getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530236 }
237
Bharat saraswal64e7e232016-07-14 23:33:55 +0530238 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530239 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
240 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530241 .getBeanTempFiles(), path));
Bharat saraswal8beac342016-08-04 02:00:03 +0530242 //Add to list method.
243 insertDataIntoJavaFile(file, getDataFromTempFileHandle(ADD_TO_LIST_INTERFACE_MASK,
244 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
245 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530246 } catch (IOException e) {
247 throw new IOException("No data found in temporary java code fragment files for " + className
248 + " while interface file generation");
249 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530250 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530251
252 if (curNode instanceof YangAugmentableNode && !(curNode instanceof YangChoice)) {
253 methods.add(getAddAugmentInfoMethodInterface());
254 methods.add(getYangAugmentInfoInterface());
255 methods.add(getYangAugmentInfoMapInterface(javaFileInfo.getPluginConfig()));
256 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530257 if (curNode instanceof YangCase) {
258 YangNode caseParent = curNode.getParent();
259 JavaQualifiedTypeInfo qualifiedTypeInfo = getQualifierInfoForCasesParent(caseParent,
260 javaFileInfo.getPluginConfig());
261 methods.add(NEW_LINE + isFilterContentMatchInterface(qualifiedTypeInfo.getClassInfo()));
262 } else {
Bharat saraswal8beac342016-08-04 02:00:03 +0530263 methods.add(NEW_LINE + isFilterContentMatchInterface(className));
264 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530265
266 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530267 methods.add(NEW_LINE + isLeafValueSetInterface());
268 methods.add(NEW_LINE + isSelectLeafSetInterface());
269 }
270 for (String method : methods) {
271 insertDataIntoJavaFile(file, method);
272 }
Bharat saraswale304c252016-08-16 20:56:20 +0530273 return file;
Bharat saraswal8beac342016-08-04 02:00:03 +0530274
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530275 }
276
277 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530278 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530279 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530280 * @param file file
281 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530282 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530283 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530284 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530285 */
Bharat saraswald532a4c2016-03-25 18:19:46 +0530286 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
287 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530288
Bharat saraswale50edca2016-08-05 01:58:25 +0530289 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530290 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530291
Bharat saraswal8beac342016-08-04 02:00:03 +0530292 boolean isLeavesPresent;
293 YangLeavesHolder leavesHolder;
294 if (curNode instanceof YangLeavesHolder) {
295 leavesHolder = (YangLeavesHolder) curNode;
296 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
297 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
298 } else {
299 isLeavesPresent = false;
300 }
301
janani b703cfe42016-05-17 13:12:22 +0530302 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530303 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530304 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal039f59c2016-07-14 21:57:13 +0530305 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
306 } else {
307 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
308 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530309
Bharat saraswald14cbe82016-07-14 13:26:18 +0530310 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530311 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530312 if (isAttrPresent) {
313 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530314
315 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530316 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
317 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530318 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530319
320 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530321 methods.add(NEW_LINE);
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530322 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
323 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530324 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530325 } catch (IOException e) {
326 throw new IOException("No data found in temporary java code fragment files for " + className
327 + " while builder interface file generation");
328 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530329 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530330
Bharat saraswal8beac342016-08-04 02:00:03 +0530331 if (isLeavesPresent) {
332 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
333 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530334 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530335 methods.add(
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530336 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530337 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530338
Bharat saraswal64e7e232016-07-14 23:33:55 +0530339
340 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530341 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530342 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530343 }
344
Bharat saraswal84366c52016-03-23 19:40:35 +0530345 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530346 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530347 }
348
349 /**
350 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530351 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530352 * @param file file
353 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530354 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530355 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530356 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530357 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530358
Bharat saraswald14cbe82016-07-14 13:26:18 +0530359 public static File generateBuilderClassFile(File file, YangNode curNode,
360 boolean isAttrPresent) throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530361
Bharat saraswale50edca2016-08-05 01:58:25 +0530362 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530363 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530364
Bharat saraswal8beac342016-08-04 02:00:03 +0530365 boolean isLeavesPresent;
366 YangLeavesHolder leavesHolder;
367 if (curNode instanceof YangLeavesHolder) {
368 leavesHolder = (YangLeavesHolder) curNode;
369 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
370 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
371 } else {
372 isLeavesPresent = false;
373 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530374
Bharat saraswal8beac342016-08-04 02:00:03 +0530375 String className = getCapitalCase(javaFileInfo.getJavaName());
376 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530377 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530378 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530379 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530380 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
381 } else {
382 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
383 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530384
Bharat saraswald14cbe82016-07-14 13:26:18 +0530385 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530386 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530387
Bharat saraswald532a4c2016-03-25 18:19:46 +0530388 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530389
390 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530391 try {
392 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530393 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
394 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530395 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530396 } catch (IOException e) {
397 throw new IOException("No data found in temporary java code fragment files for " + className
398 + " while builder class file generation");
399 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530400
Bharat saraswal8beac342016-08-04 02:00:03 +0530401 insertDataIntoJavaFile(file, getOperationTypeAttr());
402 if (isLeavesPresent) {
403 insertDataIntoJavaFile(file, getOperationAttributes());
404 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530405 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530406 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530407 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
408 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530409 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530410 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530411 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
412 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530413 .getBeanTempFiles(), path));
414
Bharat saraswald14cbe82016-07-14 13:26:18 +0530415 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530416
417 methods.add(getGetterForOperationType());
418 methods.add(getSetterForOperationType(className));
419 //Add operation attribute methods.
420 if (isLeavesPresent) {
421 methods.add(getOperationAttributesGetters() + NEW_LINE);
422 methods.add(getSetterForSelectLeaf(className, isRootNode));
423 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530424 } catch (IOException e) {
425 throw new IOException("No data found in temporary java code fragment files for " + className
426 + " while builder class file generation");
427 }
428 } else {
429 insertDataIntoJavaFile(file, NEW_LINE);
430 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530431
432 // Add default constructor and build method impl.
Bharat saraswal250a7472016-05-12 13:16:57 +0530433 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530434 .addBuildMethodImpl(curNode));
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530435 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530436 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530437
Bharat saraswal64e7e232016-07-14 23:33:55 +0530438
439 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530440 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530441 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530442 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530443
Bharat saraswald14cbe82016-07-14 13:26:18 +0530444 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530445 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530446 }
447
448 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530449 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530450 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530451 * @param file file
452 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530453 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530454 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530455 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530456 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530457 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530458 public static File generateDefaultClassFile(File file, YangNode curNode, boolean isAttrPresent,
459 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530460 throws IOException {
461
Bharat saraswale50edca2016-08-05 01:58:25 +0530462 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530463 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530464
Bharat saraswal8beac342016-08-04 02:00:03 +0530465 boolean isLeavesPresent;
466 YangLeavesHolder leavesHolder;
467 if (curNode instanceof YangLeavesHolder) {
468 leavesHolder = (YangLeavesHolder) curNode;
469 isLeavesPresent = leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()
470 || leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty();
471 } else {
472 isLeavesPresent = false;
473 }
474
475 boolean isRootNode = false;
476
janani b703cfe42016-05-17 13:12:22 +0530477 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530478 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530479 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530480 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530481 opParamClassName = className + OP_PARAM;
482 isRootNode = true;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530483 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
484 } else {
485 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
486 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530487
Bharat saraswal8beac342016-08-04 02:00:03 +0530488 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode, className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530489
Bharat saraswal022dae92016-03-04 20:08:09 +0530490 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530491 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530492 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530493 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530494 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530495
496 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530497 try {
498 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530499 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
500 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530501 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530502 } catch (IOException e) {
503 throw new IOException("No data found in temporary java code fragment files for " + className
504 + " while impl class file generation");
505 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530506
Bharat saraswal8beac342016-08-04 02:00:03 +0530507 //Add operation attributes
508 insertDataIntoJavaFile(file, getOperationTypeEnum());
509 insertDataIntoJavaFile(file, getOperationTypeAttr());
510 if (isLeavesPresent) {
511 insertDataIntoJavaFile(file, getOperationAttributes());
512 }
513
Bharat saraswald532a4c2016-03-25 18:19:46 +0530514 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530515 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530516 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
517 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530518 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530519
Bharat saraswal8beac342016-08-04 02:00:03 +0530520 //Add to list impl method.
521 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
522 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
523 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530524
525 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530526 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530527 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
528 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530529 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530530
531 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530532 if (isRootNode) {
533 methods.add(getEqualsMethodClose(getEqualsMethodOpen(opParamClassName)
534 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
535 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
536 .getBeanTempFiles(), path)));
537 } else {
538 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
539 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
540 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
541 .getBeanTempFiles(), path)));
542 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530543 // To string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530544 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
545 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530546 .getBeanTempFiles(), path)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530547 + getToStringMethodClose());
548
Bharat saraswale50edca2016-08-05 01:58:25 +0530549
Bharat saraswald532a4c2016-03-25 18:19:46 +0530550 } catch (IOException e) {
551 throw new IOException("No data found in temporary java code fragment files for " + className
552 + " while impl class file generation");
553 }
554 } else {
555 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530556 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530557
Bharat saraswal8beac342016-08-04 02:00:03 +0530558 if (curNode instanceof YangAugmentableNode) {
559 methods.add(getAddAugmentInfoMethodImpl());
560 methods.add(getYangAugmentInfoImpl());
561 methods.add(getYangAugmentInfoMapImpl());
562 }
563 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530564 //Constructor.
Bharat saraswal8beac342016-08-04 02:00:03 +0530565 String constructor = getConstructorStart(className, pluginConfig, isRootNode);
Bharat saraswald14cbe82016-07-14 13:26:18 +0530566 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
567 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
568 .getBeanTempFiles(), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530569
Bharat saraswal8beac342016-08-04 02:00:03 +0530570 if (isAttrPresent) {
571 constructor = constructor + getOperationTypeForConstructor();
572 }
573 if (isLeavesPresent) {
574 constructor = constructor + getOperationAttributeForConstructor();
575 }
576 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530577
578 // add is filter content match.
579 methods.add(getIsFilterContentMatchStart(curNode, pluginConfig)
580 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
581 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
582 .getBeanTempFiles(), path)
583 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
584 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
585 .getBeanTempFiles(), path)
586 + getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
587 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
588 .getBeanTempFiles(), path)
589 + getIsFilerContentMatchClose());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530590 } catch (IOException e) {
591 throw new IOException("No data found in temporary java code fragment files for " + className
592 + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530593 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530594
Bharat saraswal8beac342016-08-04 02:00:03 +0530595 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
596 .addDefaultConstructor(PUBLIC, DEFAULT, pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530597
Bharat saraswale50edca2016-08-05 01:58:25 +0530598 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530599 if (isLeavesPresent) {
600 methods.add(getOperationAttributesGetters());
601 methods.add(getGettersForValueAndSelectLeaf());
602 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530603 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530604 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530605 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530606 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530607
Bharat saraswale304c252016-08-16 20:56:20 +0530608 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530609 }
610
611 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530612 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530613 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530614 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530615 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530616 * @param imports imports for file
617 * @return type def class file
618 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530619 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530620 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
621 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530622
Bharat saraswale50edca2016-08-05 01:58:25 +0530623 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530624 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530625
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530626 // import
janani b703cfe42016-05-17 13:12:22 +0530627 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal84366c52016-03-23 19:40:35 +0530628 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530629 YangTypeDef typeDef = (YangTypeDef) curNode;
630 List<YangType<?>> types = typeDef.getTypeList();
631 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530632 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal8beac342016-08-04 02:00:03 +0530633 if (type.getDataType().equals(BINARY)) {
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530634 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
635 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530636
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530637 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530638
Bharat saraswal84366c52016-03-23 19:40:35 +0530639 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530640
Bharat saraswal64e7e232016-07-14 23:33:55 +0530641
642 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530643 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530644 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530645 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
646 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530647 .getTypeTempFiles(), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530648 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530649 throw new IOException("No data found in temporary java code fragment files for " + className
650 + " while type def class file generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530651 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530652
Bharat saraswal64e7e232016-07-14 23:33:55 +0530653
654 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530655 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530656 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530657
Bharat saraswal022dae92016-03-04 20:08:09 +0530658 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530659
Bharat saraswal64e7e232016-07-14 23:33:55 +0530660 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530661 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530662 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
663 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530664
Bharat saraswal64e7e232016-07-14 23:33:55 +0530665
666 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530667 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530668 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
669 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530670
Bharat saraswal64e7e232016-07-14 23:33:55 +0530671 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530672 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530673 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
674 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530675
Bharat saraswal64e7e232016-07-14 23:33:55 +0530676
677 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530678 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530679 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
680 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530681 .getTypeTempFiles(), path)
682 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530683
Bharat saraswal64e7e232016-07-14 23:33:55 +0530684
685 //Equals method.
Bharat saraswal84366c52016-03-23 19:40:35 +0530686 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530687 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530688 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
689 .getTypeTempFiles(), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530690
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530691
Bharat saraswal64e7e232016-07-14 23:33:55 +0530692 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530693 if (type.getDataType().equals(BINARY)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530694 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530695 getCapitalCase("binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530696
Bharat saraswal64e7e232016-07-14 23:33:55 +0530697 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
698 false);
699 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530700 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530701 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
702 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
703 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
704 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
705 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
706 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +0530707 } else if (type.getDataType().equals(BITS)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530708 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530709 getCapitalCase("bits"));
710
711 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
712 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530713 String bitsToStringMethod = getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
Bharat saraswal64e7e232016-07-14 23:33:55 +0530714 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
715 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
716 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
717 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
718 + NEW_LINE;
719 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530720 } else {
721 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530722 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
723 .getTypeTempFiles(), path) + getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530724 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530725
Bharat saraswal64e7e232016-07-14 23:33:55 +0530726 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
727
Bharat saraswal8beac342016-08-04 02:00:03 +0530728 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +0530729 if ((type.getDataType().equals(YangDataTypes.DERIVED))
730 && (((YangDerivedInfo) type.getDataTypeExtendedInfo()).getEffectiveBuiltInType()
731 .equals(YangDataTypes.IDENTITYREF))) {
732 yangDataTypes = YangDataTypes.IDENTITYREF;
733 }
734
735 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
736 yangDataTypes = YangDataTypes.IDENTITYREF;
737 }
738
739 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
Shankara-Huaweib7564772016-08-02 18:13:13 +0530740 methods.add(getFromStringMethodSignature(className, pluginConfig)
Bharat saraswal8beac342016-08-04 02:00:03 +0530741 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
Shankara-Huaweib7564772016-08-02 18:13:13 +0530742 .getTypeTempFiles(), path)
Bharat saraswal8beac342016-08-04 02:00:03 +0530743 + getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530744 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530745
Bharat saraswal022dae92016-03-04 20:08:09 +0530746 } catch (IOException e) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530747 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530748 + " while type def class file generation");
Bharat saraswal022dae92016-03-04 20:08:09 +0530749 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530750
Bharat saraswal84366c52016-03-23 19:40:35 +0530751 for (String method : methods) {
752 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530753 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530754 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530755
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530756 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530757 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530758
759 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530760 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530761 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530762 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530763 * @param curNode current YANG node
764 * @param imports imports for file
765 * @return type def class file
766 * @throws IOException when fails to generate class file
767 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530768 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
769 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530770
Bharat saraswale50edca2016-08-05 01:58:25 +0530771 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530772 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530773
janani b703cfe42016-05-17 13:12:22 +0530774 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530775 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
776
Bharat saraswal64e7e232016-07-14 23:33:55 +0530777 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
778 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
779
780 boolean isIntConflict = false;
781 boolean isLongConflict = false;
782 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
783 if (intAttr == null) {
784 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
785 }
786
787 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
788 if (longAttr == null) {
789 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
790 }
791
792 if (intAttr != null) {
793 isIntConflict = intAttr.isIntConflict();
794 }
795 if (longAttr != null) {
796 isLongConflict = longAttr.isLongConflict();
797 }
798
799 if (isLongConflict) {
800 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
801 sort(imports);
802 }
803
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530804 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530805
806 List<String> methods = new ArrayList<>();
807
Bharat saraswal64e7e232016-07-14 23:33:55 +0530808
809 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530810 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530811 if (isIntConflict) {
812 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
813 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
814 }
815
816 if (isLongConflict) {
817 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
818 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
819 }
820
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530821 insertDataIntoJavaFile(file,
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530822 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
823 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530824 .getTypeTempFiles(), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530825 } catch (IOException e) {
826 throw new IOException("No data found in temporary java code fragment files for " + className
827 + " while union class file generation");
828 }
829
Bharat saraswal64e7e232016-07-14 23:33:55 +0530830
831 //Default constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530832 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal8beac342016-08-04 02:00:03 +0530833 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530834
835 try {
836
Bharat saraswal64e7e232016-07-14 23:33:55 +0530837
838 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530839 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530840 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
841 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530842
Bharat saraswal64e7e232016-07-14 23:33:55 +0530843
844 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530845 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530846 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
847 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530848
Bharat saraswal64e7e232016-07-14 23:33:55 +0530849 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530850 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530851 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
852 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530853
Bharat saraswal64e7e232016-07-14 23:33:55 +0530854
855 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530856 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530857 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
858 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530859 .getTypeTempFiles(), path)
860 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530861
Bharat saraswal64e7e232016-07-14 23:33:55 +0530862 //Equals method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530863 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530864 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530865 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
866 .getTypeTempFiles(), path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530867
Bharat saraswal64e7e232016-07-14 23:33:55 +0530868
869 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530870 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530871 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
872 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530873 .getTypeTempFiles(), path)
874 + getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530875
Bharat saraswal64e7e232016-07-14 23:33:55 +0530876
877 //From string method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530878 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530879 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530880 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
881 .getTypeTempFiles(), path)
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530882 + getFromStringMethodClose());
883
Bharat saraswal64e7e232016-07-14 23:33:55 +0530884 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530885 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530886 }
887 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530888 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530889 }
890
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530891 } catch (IOException e) {
892 throw new IOException("No data found in temporary java code fragment files for " + className
893 + " while union class file generation");
894 }
895
896 for (String method : methods) {
897 insertDataIntoJavaFile(file, method);
898 }
899 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
900
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530901 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530902 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530903
904 /**
905 * Generates class file for type enum.
906 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530907 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530908 * @param curNode current YANG node
909 * @return class file for type enum
910 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530911 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530912 public static File generateEnumClassFile(File file, YangNode curNode)
913 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530914
Bharat saraswale50edca2016-08-05 01:58:25 +0530915 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530916 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530917
janani b703cfe42016-05-17 13:12:22 +0530918 String className = javaFileInfo.getJavaName();
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530919 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
920
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530921 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530922
923 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530924 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530925 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530926 insertDataIntoJavaFile(file,
Bharat saraswal64e7e232016-07-14 23:33:55 +0530927 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswald14cbe82016-07-14 13:26:18 +0530928 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530929 + SEMI_COLAN + NEW_LINE);
930 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530931 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530932 + " while enum class file generation");
933 }
934
Bharat saraswal64e7e232016-07-14 23:33:55 +0530935
936 // Add an attribute to get the enum's values.
janani b703cfe42016-05-17 13:12:22 +0530937 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530938
Bharat saraswal64e7e232016-07-14 23:33:55 +0530939 // Add a constructor for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530940 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig, null)
Bharat saraswald14cbe82016-07-14 13:26:18 +0530941 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530942
Bharat saraswald14cbe82016-07-14 13:26:18 +0530943 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
944 .getTempJavaCodeFragmentFiles()
945 .getEnumerationTempFiles();
Bharat saraswal250a7472016-05-12 13:16:57 +0530946 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530947 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswal250a7472016-05-12 13:16:57 +0530948 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530949 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530950 + NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530951
Bharat saraswal64e7e232016-07-14 23:33:55 +0530952 // Add a getter method for enum.
Vidyashree Ramab3670472016-08-06 15:49:56 +0530953 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig, null)
janani b703cfe42016-05-17 13:12:22 +0530954 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +0530955
956 try {
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530957 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswal250a7472016-05-12 13:16:57 +0530958 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswald14cbe82016-07-14 13:26:18 +0530959 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
960 .getEnumerationTempFiles(), path)
Bharat saraswal250a7472016-05-12 13:16:57 +0530961 + getFromStringMethodClose());
962 } catch (IOException e) {
janani b703cfe42016-05-17 13:12:22 +0530963 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530964 getCapitalCase(className) + " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +0530965 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530966
967 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
968
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530969 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530970 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530971
972 /**
973 * Generates interface file for rpc.
974 *
Bharat saraswal64e7e232016-07-14 23:33:55 +0530975 * @param file generated file
976 * @param curNode current YANG node
977 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530978 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530979 * @throws IOException when fails to generate class file
980 */
Bharat saraswalaf413b82016-07-14 15:18:20 +0530981 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530982 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530983
Bharat saraswale50edca2016-08-05 01:58:25 +0530984 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530985
Bharat saraswalaf413b82016-07-14 15:18:20 +0530986 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
987 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b703cfe42016-05-17 13:12:22 +0530988 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530989 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530990 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530991
992 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530993 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
994 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530995
996 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530997
998 //Getter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +0530999 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1000 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301001 // Setter methods.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301002 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1003 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301004
Bharat saraswalaf413b82016-07-14 15:18:20 +05301005 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1006
Bharat saraswal250a7472016-05-12 13:16:57 +05301007 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301008 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1009
1010 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301011 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswal64e7e232016-07-14 23:33:55 +05301012 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301013 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301014 } catch (IOException e) {
1015 throw new IOException("No data found in temporary java code fragment files for " + className
1016 + " while rpc class file generation");
1017 }
1018
1019 for (String method : methods) {
1020 insertDataIntoJavaFile(file, method);
1021 }
1022 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1023
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301024 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301025 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301026
1027 /**
1028 * Generates event file.
1029 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301030 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301031 * @param curNode current YANG node
1032 * @param imports imports for file
1033 * @throws IOException when fails to generate class file
1034 */
Bharat saraswal4aaab4d2016-05-17 14:19:38 +05301035 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301036
Bharat saraswald14cbe82016-07-14 13:26:18 +05301037 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1038 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301039
Bharat saraswal039f59c2016-07-14 21:57:13 +05301040 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1041 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301042
Bharat saraswald14cbe82016-07-14 13:26:18 +05301043 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1044 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301045 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1046 try {
1047 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswald14cbe82016-07-14 13:26:18 +05301048 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301049 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1050
Bharat saraswald14cbe82016-07-14 13:26:18 +05301051 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301052
1053 } catch (IOException e) {
1054 throw new IOException("No data found in temporary java code fragment files for " + className
1055 + " while event class file generation");
1056 }
1057
1058 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1059 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301060 }
1061
1062 /**
1063 * Generates event listener file.
1064 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301065 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301066 * @param curNode current YANG node
1067 * @param imports imports for file
1068 * @throws IOException when fails to generate class file
1069 */
1070 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1071 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301072
Bharat saraswald14cbe82016-07-14 13:26:18 +05301073 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1074 + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301075
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301076 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301077 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301078 validateLineLength(file);
1079 }
1080
1081 /**
1082 * Generates event subject's file.
1083 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301084 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301085 * @param curNode current YANG node
1086 * @throws IOException when fails to do IO exceptions
1087 */
1088 public static void generateEventSubjectFile(File file, YangNode curNode)
1089 throws IOException {
1090
1091 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1092 + EVENT_SUBJECT_NAME_SUFFIX;
1093
1094 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1095
Bharat saraswald14cbe82016-07-14 13:26:18 +05301096 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1097 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301098
1099 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1100 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301101
1102 insertDataIntoJavaFile(file, NEW_LINE);
1103 try {
Bharat saraswald14cbe82016-07-14 13:26:18 +05301104 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301105
Bharat saraswald14cbe82016-07-14 13:26:18 +05301106 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301107
Bharat saraswald14cbe82016-07-14 13:26:18 +05301108 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301109
1110 } catch (IOException e) {
1111 throw new IOException("No data found in temporary java code fragment files for " + className
1112 + " while event class file generation");
1113 }
1114
1115 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1116 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301117 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301118}