blob: b7928ced0788f054b5120144fca04a96c866b386 [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
Bharat saraswal9fab16b2016-09-23 23:27:24 +053019import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053020import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswal8beac342016-08-04 02:00:03 +053021import org.onosproject.yangutils.datamodel.YangChoice;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053022import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053023import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053024import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053025import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053026import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053027import org.onosproject.yangutils.datamodel.YangUnion;
Bharat saraswalaf413b82016-07-14 15:18:20 +053028import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053029import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053031import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053032import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswala5c28512016-11-10 21:09:23 +053033import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053034import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053035import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053036import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053037import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053038import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053039
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053040import java.io.File;
41import java.io.IOException;
42import java.util.ArrayList;
Bharat saraswala5c28512016-11-10 21:09:23 +053043import java.util.Iterator;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053044import java.util.List;
45
46import static java.util.Collections.sort;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
48import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswala5c28512016-11-10 21:09:23 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053081import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswala5c28512016-11-10 21:09:23 +053082import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getListOfAttributesForKey;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053083import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053084import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
86import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswala5c28512016-11-10 21:09:23 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053088import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053092import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalb41904b2016-10-20 19:22:36 +053095import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.generateBuildMethodForSubTree;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
98import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswala5c28512016-11-10 21:09:23 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getCompareToForKeyClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswala5c28512016-11-10 21:09:23 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswala5c28512016-11-10 21:09:23 +0530118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Bharat saraswal94844d62016-10-13 13:28:03 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForType;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswala5c28512016-11-10 21:09:23 +0530131import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530132import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
Bharat saraswal94844d62016-10-13 13:28:03 +0530133import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
134import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530135import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
138import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
140import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
141import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530142import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeForChoiceInterface;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530143import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
144import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
145import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
146import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
147import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530148import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530150import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
151import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530152import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530153import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530154import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530155import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
158import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530159import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530160import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530161import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530162import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530163import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530164import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530165import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
166import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
Bharat saraswala5c28512016-11-10 21:09:23 +0530167import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530168import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530169import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530170import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530171import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530172import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530173import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530174import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530175import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
177import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530178import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswala5c28512016-11-10 21:09:23 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530181import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530185import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530186import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
187
Vinod Kumar S08710982016-03-03 19:55:30 +0530188/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530189 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530190 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530191public final class JavaFileGenerator {
192
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530193 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530194 private JavaFileGenerator() {
195 }
196
197 /**
198 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530199 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530200 * @param file file
201 * @param imports imports for the file
202 * @param curNode current YANG node
203 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530204 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530205 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530206 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530207 public static File generateInterfaceFile(File file, List<String> imports,
208 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530209 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530210 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530211
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530212 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530213 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530214
215 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530216 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530217 path = fileInfo.getPluginConfig().getCodeGenDir() +
218 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530219 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530220 path = fileInfo.getBaseCodeGenPath() +
221 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530222 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530223
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530224 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530225
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530226 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530227 YangLeavesHolder leavesHolder;
228 if (curNode instanceof YangLeavesHolder) {
229 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530230 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530231 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530232 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530233 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530234
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530235 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
236 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530237
238 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530239 if (curNode instanceof RpcNotificationContainer) {
240 insertDataIntoJavaFile(file, getOperationTypeEnum());
241 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530242 List<String> methods = new ArrayList<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530243
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530244 //Add only for choice class
245 if (curNode instanceof YangChoice) {
246 insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
247 curNode));
248 }
249
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530250 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530251 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530252 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530253 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530254 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530255 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
256 className) + trimAtLast(replaceLast(
257 getDataFromTempFileHandle(
258 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
259 getBeanFiles(curNode), path),
260 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530261 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530262 }
263
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530264 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530265 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530266 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
267 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530268 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530269 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530270 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530271 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530272
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530273 if (curNode instanceof YangAugmentableNode &&
274 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530275 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530276 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530277
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530278 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530279 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530280 if (curNode.isOpTypeReq()) {
281 methods.add(isSelectLeafSetInterface());
282 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530283 }
284 for (String method : methods) {
285 insertDataIntoJavaFile(file, method);
286 }
Bharat saraswale304c252016-08-16 20:56:20 +0530287 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530288 }
289
290 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530291 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530292 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530293 * @param file file
294 * @param curNode current YANG node
295 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530296 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530297 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530298 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530299 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530300 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530301 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530302
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530303 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530304 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530305
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530306 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530307 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530308 if (curNode instanceof YangLeavesHolder &&
309 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530310 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530312 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530313 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530314 }
315
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530316 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530317 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530318 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530319 path = fileInfo.getPluginConfig().getCodeGenDir() +
320 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530321 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530322 path = fileInfo.getBaseCodeGenPath() +
323 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530324 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530325
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530326 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
327 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530328 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530329 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530330 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530331 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530332 methods.add(getDataFromTempFileHandle(
333 GETTER_FOR_INTERFACE_MASK,
334 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530335
336 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530337 methods.add(getDataFromTempFileHandle(
338 SETTER_FOR_INTERFACE_MASK,
339 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530340
341 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530342 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
343 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530344 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530345 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530346 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530347 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530348
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530349 if (curNode instanceof YangAugmentableNode &&
350 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530351 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530352 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530353 }
354
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530355 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530356 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530357 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530358 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530359 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
360 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530361 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530362
363 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530364 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530365 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530366 }
367
Bharat saraswal84366c52016-03-23 19:40:35 +0530368 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530369 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530370 }
371
372 /**
373 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530374 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530375 * @param file file
376 * @param curNode current YANG node
377 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530378 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530379 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530380 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530381 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530382 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530383 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530384
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530385 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530386 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530387
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530388 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530389 YangLeavesHolder leavesHolder;
390 if (curNode instanceof YangLeavesHolder) {
391 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530392 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530393 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530394 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530395 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530396
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530397 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530398 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530399 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530400 path = fileInfo.getPluginConfig().getCodeGenDir() +
401 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530402 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530403 path = fileInfo.getBaseCodeGenPath() +
404 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530405 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530406
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530407 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
408 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530409 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530410 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530411
412 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530413 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530414 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
415 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530416 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530417 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530418 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530419 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530420 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530421 methods.add(getDataFromTempFileHandle(
422 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530423 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530424 methods.add(getDataFromTempFileHandle(
425 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530426
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530427 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530428 methods.add(getDataFromTempFileHandle(
429 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530430
Bharat saraswald14cbe82016-07-14 13:26:18 +0530431 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530432
Bharat saraswal8beac342016-08-04 02:00:03 +0530433 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530434 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530435 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530436 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530437 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530438 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530439 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530440 }
441 } else {
442 insertDataIntoJavaFile(file, NEW_LINE);
443 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530444
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530445 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530446 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530447 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530448 }
449
Bharat saraswal64e7e232016-07-14 23:33:55 +0530450 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530451 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
452 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530453 .addBuildMethodImpl());
Bharat saraswalb41904b2016-10-20 19:22:36 +0530454 if (curNode.isOpTypeReq()) {
455 methods.add(generateBuildMethodForSubTree(curNode));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530456 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530457 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530458
459 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530460 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530461 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530462 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530463 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530464 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530465 }
466
467 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530468 * Returns generated key class file for current list node.
469 *
470 * @param file file
471 * @param curNode current YANG node
472 * @return key class file
473 * @throws IOException when fails to write in file
474 */
475 public static File generateKeyClassFile(File file, YangNode curNode)
476 throws IOException {
477
478 JavaFileInfoTranslator fileInfo =
479 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
480
481 String className = getCapitalCase(fileInfo.getJavaName()) + KEYS;
482 List<String> imports = new ArrayList<>();
483
484 YangNode parent = curNode.getParent();
485 JavaImportData importData = ((JavaCodeGeneratorInfo) parent)
486 .getTempJavaCodeFragmentFiles().getBeanTempFiles()
487 .getJavaImportData();
488 JavaQualifiedTypeInfoTranslator info =
489 new JavaQualifiedTypeInfoTranslator();
490 info.setClassInfo(className);
491 info.setPkgInfo(fileInfo.getPackage());
492 importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
493 parent.getJavaPackage());
Bharat saraswala5c28512016-11-10 21:09:23 +0530494 List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
495
496 Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
497 JavaAttributeInfo attr;
498 JavaQualifiedTypeInfoTranslator typeInfo;
499 while (attrIt.hasNext()) {
500 attr = attrIt.next();
501 typeInfo = attr.getImportInfo();
502 if (!typeInfo.getClassInfo().equals(className)) {
503 imports.add(getImportString(attr.getImportInfo().getPkgInfo(),
504 attr.getImportInfo().getClassInfo()));
505 } else {
506 attr.setIsQualifiedAccess(true);
507 }
508 }
509
Bharat saraswal51c5d672016-11-13 09:03:48 +0530510 imports.add(getImportString(JAVA_UTIL_PKG,
511 JAVA_UTIL_OBJECTS_IMPORT_CLASS));
512
Bharat saraswala5c28512016-11-10 21:09:23 +0530513 initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
514 className);
515 String pkg = null;
516 attrIt = attrs.iterator();
517 while (attrIt.hasNext()) {
518 attr = attrIt.next();
519 if (attr.isQualifiedName()) {
520 pkg = attr.getImportInfo().getPkgInfo();
521 }
522 insertDataIntoJavaFile(file, getJavaAttributeDefinition(
523 pkg, attr.getImportInfo().getClassInfo(),
524 attr.getAttributeName(), false, PROTECTED, null));
525 }
526 attrIt = attrs.iterator();
527 while (attrIt.hasNext()) {
528 attr = attrIt.next();
529 //add getter methods
530 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, attr
531 .getAttributeName(), false, null));
532 insertDataIntoJavaFile(file, getGetterForClass(
533 attr, GENERATE_KEY_CLASS));
534 insertDataIntoJavaFile(file, NEW_LINE);
535 //Add setter methods.
536 insertDataIntoJavaFile(file, getJavaDoc(MANAGER_SETTER_METHOD, attr
537 .getAttributeName(), false, null));
538 insertDataIntoJavaFile(file, getSetterForClass(
539 attr, className, GENERATE_EVENT_SUBJECT_CLASS));
540 insertDataIntoJavaFile(file, NEW_LINE);
541 }
Bharat saraswal51c5d672016-11-13 09:03:48 +0530542 //add hashcode and equals method.
543 insertDataIntoJavaFile(file, getHashCodeMethodOpen());
544 StringBuilder builder = new StringBuilder();
545 for (JavaAttributeInfo att : attrs) {
546 builder.append(getHashCodeMethod(att));
547 }
548 insertDataIntoJavaFile(file, getHashCodeMethodClose(builder.toString()));
549
550 insertDataIntoJavaFile(file, getEqualsMethodOpen(className));
551 StringBuilder builder2 = new StringBuilder();
552 for (JavaAttributeInfo att : attrs) {
553 builder2.append(getEqualsMethod(att)).append(NEW_LINE);
554 }
555 insertDataIntoJavaFile(file, getEqualsMethodClose(builder2.toString()));
556
557
Bharat saraswala5c28512016-11-10 21:09:23 +0530558 insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
559
560 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
561 return file;
562 }
563
564 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530565 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530566 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530567 * @param file file
568 * @param curNode current YANG node
569 * @param attrPresent if any attribute is present or not
570 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530571 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530572 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530573 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530574 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530575 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530576 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530577 throws IOException {
578
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530579 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530580 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530581 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530582 YangLeavesHolder leavesHolder;
583 if (curNode instanceof YangLeavesHolder) {
584 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530585 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530586 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530587 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530588 }
589
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530590 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530591
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530592 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530593 String opParamClassName = className;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530594 String name = DEFAULT_CAPS + className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530595 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530597 opParamClassName = className + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530598 name = opParamClassName;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530599 rootNode = true;
600 path = fileInfo.getPluginConfig().getCodeGenDir() +
601 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530602 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530603 path = fileInfo.getBaseCodeGenPath() +
604 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530605 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530606
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530607 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
608 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530609
Bharat saraswal022dae92016-03-04 20:08:09 +0530610 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530611 if (attrPresent) {
612 addDefaultClassAttributeInfo(file, curNode, className,
613 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530614 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530615 } else {
616 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530617 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530618
Bharat saraswal8beac342016-08-04 02:00:03 +0530619 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530620 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530621 }
622 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530623 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530624 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530625 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530626 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
627 + methodClose(FOUR_SPACE);
628 methods.add(constructor);
629 if (curNode.isOpTypeReq()) {
630 String augmentableSubTreeFiltering = EMPTY_STRING;
631 if (curNode instanceof YangAugmentableNode) {
632 // add is filter content match.
633 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530634 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530635 methods.add(getProcessSubtreeFilteringStart(curNode) +
Bharat saraswal94844d62016-10-13 13:28:03 +0530636 getProcessSubtreeFunctionBody(curNode) +
637 augmentableSubTreeFiltering +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530638 getProcessSubTreeFilteringEnd(name));
Bharat saraswal94844d62016-10-13 13:28:03 +0530639
640 if (curNode instanceof YangLeavesHolder) {
641 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
642 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530643 methods.add(getProcessLeafSubtreeFiltering(curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530644 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530645 }
646 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
647 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530648 methods.add(getProcessLeafListSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530649 path));
650 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530651 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530652
Bharat saraswal94844d62016-10-13 13:28:03 +0530653 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530654 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530655 path));
656 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530657 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530658 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530659 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530660 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530661
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530662 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530663
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530664 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530665 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530666 methods.add(getIsValueLeafSet());
667 if (curNode.isOpTypeReq()) {
668 methods.add(getIsSelectLeafSet());
669 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530670 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530671 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530672 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530673 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530674 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530675
Bharat saraswale304c252016-08-16 20:56:20 +0530676 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530677 }
678
679 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530680 * Add methods related to attributes.
681 *
682 * @param file file
683 * @param curNode current YANG node
684 * @param className name of the class
685 * @param opParamClassName op param class name
686 * @param path file path
687 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530688 * @param rootNode flag indicating whether node is root node
689 * @throws IOException a violation in IO rule
690 */
691 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
692 String className,
693 String opParamClassName,
694 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530695 boolean rootNode)
696 throws IOException {
697
698 //Add attribute strings.
699 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530700 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
701 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530702 } catch (IOException e) {
703 throw new IOException(getErrorMsg(className, IMPL_CLASS));
704 }
705
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530706 try {
707 //Getter methods.
708 methods.add(getDataFromTempFileHandle(
709 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
710
711 // Hash code method.
712 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530713 getHashCodeMethodOpen() + getDataFromTempFileHandle(
714 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
715 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530716
717 //Equals method.
718 if (rootNode) {
719 methods.add(getEqualsMethodClose(
720 getEqualsMethodOpen(opParamClassName) +
721 getDataFromTempFileHandle(
722 EQUALS_IMPL_MASK,
723 getBeanFiles(curNode), path)));
724 } else {
725 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530726 getEqualsMethodOpen(DEFAULT_CAPS + className) +
727 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
728 getBeanFiles(curNode),
729 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530730 }
731 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530732 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
733 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530734 getToStringMethodClose());
735 } catch (IOException e) {
736 throw new IOException(getErrorMsg(className, IMPL_CLASS));
737 }
738 }
739
740 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530741 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530742 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530743 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530744 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530745 * @param imports imports for file
746 * @return type def class file
747 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530748 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530749 public static File generateTypeDefClassFile(File file, YangNode curNode,
750 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530751 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530752
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530753 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530754 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530755 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530756 String className = getCapitalCase(fileInfo.getJavaName());
757 String path = fileInfo.getBaseCodeGenPath() +
758 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530759 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530760 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530761
Bharat saraswal84366c52016-03-23 19:40:35 +0530762 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530763
Bharat saraswal64e7e232016-07-14 23:33:55 +0530764 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530765 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530766 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
767 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530768 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530769 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530770 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530771
Bharat saraswal64e7e232016-07-14 23:33:55 +0530772 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530773 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530774
Bharat saraswal022dae92016-03-04 20:08:09 +0530775 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530776
Bharat saraswal64e7e232016-07-14 23:33:55 +0530777 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530778 methods.add(getDataFromTempFileHandle(
779 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530780
781 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530782 methods.add(getDataFromTempFileHandle(
783 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530784
Bharat saraswal64e7e232016-07-14 23:33:55 +0530785 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530786 methods.add(getDataFromTempFileHandle(
787 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530788
Bharat saraswal64e7e232016-07-14 23:33:55 +0530789 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530790 methods.add(getHashCodeMethodClose(
791 getHashCodeMethodOpen() + getDataFromTempFileHandle(
792 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
793 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530794
795 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530796 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530797 getEqualsMethodOpen(className + EMPTY_STRING) +
798 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
799 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530800
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530801 // To string method.
Bharat saraswal0663aff2016-10-18 23:16:14 +0530802 addTypedefToString(curNode, methods);
Bharat saraswal84366c52016-03-23 19:40:35 +0530803
Bharat saraswal64e7e232016-07-14 23:33:55 +0530804 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
805
Bharat saraswal8beac342016-08-04 02:00:03 +0530806 //From string method.
Bharat saraswala5c28512016-11-10 21:09:23 +0530807 methods.add(getFromStringMethodSignature(className) +
808 getDataFromTempFileHandle(
809 FROM_STRING_IMPL_MASK,
810 javaGenInfo.getTempJavaCodeFragmentFiles()
811 .getTypeTempFiles(), path) +
812 getFromStringMethodClose());
Bharat saraswal022dae92016-03-04 20:08:09 +0530813 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530814 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530815 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530816
Bharat saraswal84366c52016-03-23 19:40:35 +0530817 for (String method : methods) {
818 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530819 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530820 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530821
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530822 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530823 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530824
825 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530826 * Adds typedef to string method.
827 *
828 * @param curNode current node
829 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530830 */
831 private static void addTypedefToString(YangNode curNode,
Bharat saraswalb41904b2016-10-20 19:22:36 +0530832 List<String> methods) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530833 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530834
835 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
836 YangType type = types.get(0);
Bharat saraswal94844d62016-10-13 13:28:03 +0530837 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +0530838 null), type));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530839 }
840
841 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530842 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530843 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530844 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530845 * @param curNode current YANG node
846 * @param imports imports for file
847 * @return type def class file
848 * @throws IOException when fails to generate class file
849 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530850 public static File generateUnionClassFile(File file, YangNode curNode,
851 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530852 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530853
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530854 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530855 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530856
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530857 String className = getCapitalCase(fileInfo.getJavaName());
858 String path = fileInfo.getBaseCodeGenPath() +
859 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530860
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530861 TempJavaTypeFragmentFiles tempFiles =
862 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
863 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530864
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530865 boolean intConflict = false;
866 boolean longConflict = false;
867 boolean shortConflict = false;
868 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530869 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530870 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530871 }
872
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530873 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530874 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530875 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530876 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530877 }
878
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530879 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530880 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530881 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530882 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530883 }
884
Bharat saraswal64e7e232016-07-14 23:33:55 +0530885 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530886 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530887 }
888 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530889 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530890 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530891 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530892 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530893 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530894 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530895 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
896 if (!imports.contains(impt)) {
897 imports.add(impt);
898 sort(imports);
899 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530900 }
901
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530902 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530903 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530904
905 List<String> methods = new ArrayList<>();
906
Bharat saraswal64e7e232016-07-14 23:33:55 +0530907 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530908 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530909 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530910 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530911 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530912 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530913 }
914
Bharat saraswal64e7e232016-07-14 23:33:55 +0530915 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530916 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530917
918 try {
919
Bharat saraswal64e7e232016-07-14 23:33:55 +0530920 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530921 methods.add(getDataFromTempFileHandle(
922 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530923
924 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530925 methods.add(getDataFromTempFileHandle(
926 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530927
Bharat saraswal64e7e232016-07-14 23:33:55 +0530928 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530929 methods.add(getDataFromTempFileHandle(
930 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530931
932 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530933 methods.add(getHashCodeMethodClose(
934 getHashCodeMethodOpen() +
935 getDataFromTempFileHandle(
936 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
937 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530938
Bharat saraswal64e7e232016-07-14 23:33:55 +0530939 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530940 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530941 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530942 getDataFromTempFileHandle(
943 EQUALS_IMPL_MASK, getTypeFiles(curNode),
944 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530945
946 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530947 methods.add(getUnionToStringMethod(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530948 ((YangUnion) curNode).getTypeList()));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530949
Bharat saraswal64e7e232016-07-14 23:33:55 +0530950 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530951 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530952 getDataFromTempFileHandle(
953 FROM_STRING_IMPL_MASK,
954 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530955 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530956
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530957 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530958 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530959 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530960 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530961 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530962 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530963 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530964 methods.add(getRangeValidatorMethodForUnion(INT));
965 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530966 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530967 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530968 }
969
970 for (String method : methods) {
971 insertDataIntoJavaFile(file, method);
972 }
973 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
974
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530975 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530976 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530977
978 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530979 * Adds union class attribute information.
980 *
981 * @param file generated file
982 * @param curNode current YANG node
983 * @param intConflict flag to indicate if there is a conflict in int
984 * @param longConflict flag to indicate if there is a conflict in long
985 * @param shortConflict flag to indicate if there is a conflict in short
986 * @param path file path
987 * @param tempFiles temp java type fragment files
988 * @throws IOException a violation in IO rule
989 */
990 private static void addUnionClassAttributeInfo(File file,
991 YangNode curNode,
992 boolean intConflict,
993 boolean longConflict,
994 boolean shortConflict,
995 String path,
996 TempJavaTypeFragmentFiles tempFiles)
997 throws IOException {
998 if (intConflict) {
999 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1000 .addStaticAttributeIntRange(PRIVATE,
1001 tempFiles.getIntIndex() <
1002 tempFiles.getUIntIndex()));
1003 }
1004
1005 if (longConflict) {
1006 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1007 .addStaticAttributeLongRange(PRIVATE,
1008 tempFiles.getLongIndex() <
1009 tempFiles.getULongIndex()));
1010 }
1011
1012 if (shortConflict) {
1013 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1014 .addStaticAttributeShortRange(PRIVATE,
1015 tempFiles.getShortIndex() <
1016 tempFiles.getUInt8Index()));
1017 }
1018
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301019 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1020 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301021 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301022 }
1023
1024 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301025 * Generates class file for type enum.
1026 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301027 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301028 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301029 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301030 * @return class file for type enum
1031 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301032 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301033 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301034 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301035
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301036 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301037 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301038
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301039 String className = fileInfo.getJavaName();
1040 String path = fileInfo.getBaseCodeGenPath() +
1041 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301042 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
1043 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
1044 JavaImportData data = enumFile.getJavaImportData();
1045 if (!enumFile.isEnumClass()) {
1046 imports.add(data.getImportForToBitSet());
1047 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301048 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301049
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301050 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301051 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301052
1053 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301054 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301055 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301056 String[] remove = {COMMA, NEW_LINE};
1057 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
1058 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
1059 .getEnumTempFiles(), path), remove) +
1060 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301061 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301062 throw new IOException(getErrorMsg(getCapitalCase(className),
1063 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301064 }
1065
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301066 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301067 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301068 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301069
Bharat saraswal64e7e232016-07-14 23:33:55 +05301070 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301071 //TODO: generate javadoc for method.
1072 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
1073 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301074
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301075 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301076 getEnumsOfValueMethod(className,
1077 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301078 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301079 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301080 getEnumsOfValueMethod(className,
1081 (YangEnumeration) curNode,
1082 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301083
Bharat saraswal64e7e232016-07-14 23:33:55 +05301084 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301085 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301086 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301087 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301088
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301089 if (!enumFile.isEnumClass()) {
1090 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1091 (getCapitalCase(className)));
1092 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1093 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301094 } else {
1095 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301096 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301097
1098 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1099
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301100 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301101 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301102
1103 /**
1104 * Generates interface file for rpc.
1105 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301106 * @param file generated file
1107 * @param curNode current YANG node
1108 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301109 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301110 * @throws IOException when fails to generate class file
1111 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301112 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1113 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301114 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301115
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301116 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301117 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301118
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301119 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301120 ((JavaCodeGeneratorInfo) curNode)
1121 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301122 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301123 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301124 String path = fileInfo.getBaseCodeGenPath() +
1125 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301126 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1127 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301128
1129 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301130 JavaAttributeInfo rootAttribute =
1131 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301132 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301133
1134 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301135
Bharat saraswal1edde622016-09-06 10:18:04 +05301136 if (isGetSetOfRootNodeRequired(curNode)) {
1137 //Getter methods.
1138 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301139 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301140 NEW_LINE);
1141 // Setter methods.
1142 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301143 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301144 NEW_LINE);
1145 }
1146
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301147 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301148
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301149 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1150 .getServiceTempFiles() != null) {
1151 JavaCodeGeneratorInfo javaGenInfo =
1152 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301153
1154 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301155 methods.add(getDataFromTempFileHandle(
1156 RPC_INTERFACE_MASK,
1157 javaGenInfo.getTempJavaCodeFragmentFiles()
1158 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301159 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301160 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301161 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301162 }
1163
1164 for (String method : methods) {
1165 insertDataIntoJavaFile(file, method);
1166 }
1167 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1168
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301169 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301170 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301171
1172 /**
1173 * Generates event file.
1174 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301175 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301176 * @param curNode current YANG node
1177 * @param imports imports for file
1178 * @throws IOException when fails to generate class file
1179 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301180 public static void generateEventFile(File file, YangNode curNode,
1181 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301182 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301183
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301184 String className =
1185 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1186 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301187
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301188 TempJavaEventFragmentFiles tempFiles =
1189 ((TempJavaCodeFragmentFilesContainer) curNode)
1190 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301191
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301192 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301193 .getBaseCodeGenPath() +
1194 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1195 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301196 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1197 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301198 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301199 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301200 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1201 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301202 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301203
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301204 insertDataIntoJavaFile(file,
1205 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1206 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301207 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301208 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301209 }
1210
1211 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1212 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301213 }
1214
1215 /**
1216 * Generates event listener file.
1217 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301218 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301219 * @param curNode current YANG node
1220 * @param imports imports for file
1221 * @throws IOException when fails to generate class file
1222 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301223 public static void generateEventListenerFile(File file, YangNode curNode,
1224 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301225 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301226
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301227 String className =
1228 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1229 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301230
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301231 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1232 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301233 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301234 validateLineLength(file);
1235 }
1236
1237 /**
1238 * Generates event subject's file.
1239 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301240 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301241 * @param curNode current YANG node
1242 * @throws IOException when fails to do IO exceptions
1243 */
1244 public static void generateEventSubjectFile(File file, YangNode curNode)
1245 throws IOException {
1246
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301247 String className =
1248 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1249 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301250
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301251 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1252 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301253
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301254 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301255 .getBaseCodeGenPath() +
1256 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1257 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301258
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301259 TempJavaEventFragmentFiles tempFiles =
1260 ((TempJavaCodeFragmentFilesContainer) curNode)
1261 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301262
1263 insertDataIntoJavaFile(file, NEW_LINE);
1264 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301265 insertDataIntoJavaFile(
1266 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1267 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301268
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301269 insertDataIntoJavaFile(
1270 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1271 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301272
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301273 insertDataIntoJavaFile(
1274 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1275 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301276 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301277 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301278 }
1279
1280 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1281 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301282 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301283
1284 /**
1285 * Returns error message string.
1286 *
1287 * @param className name of the class
1288 * @param fileType type of file
1289 * @return error message string
1290 */
1291 private static String getErrorMsg(String className, String fileType) {
1292 return "No data found in temporary java code fragment files for " +
1293 className + " while " + fileType + " file generation.";
1294 }
1295
1296 /**
1297 * Checks whether leaf is present in YANG leaves holder.
1298 *
1299 * @param holder holder of YANG leaves
1300 * @return true if leaves are present, false otherwise
1301 */
1302 private static boolean leavesPresent(YangLeavesHolder holder) {
1303 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301304 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301305 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301306
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301307}