blob: 6b9f346db2b0a4632c425fe723b0f662a178892c [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;
Bharat saraswala5c28512016-11-10 21:09:23 +053024import org.onosproject.yangutils.datamodel.YangList;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053025import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053026import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053027import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053028import org.onosproject.yangutils.datamodel.YangUnion;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053029import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053030import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053031import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053034import org.onosproject.yangutils.translator.tojava.JavaImportData;
Bharat saraswala5c28512016-11-10 21:09:23 +053035import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053036import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053037import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal039f59c2016-07-14 21:57:13 +053038import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053039import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053040import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053041
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053042import java.io.File;
43import java.io.IOException;
44import java.util.ArrayList;
Bharat saraswala5c28512016-11-10 21:09:23 +053045import java.util.Iterator;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053046import java.util.List;
47
48import static java.util.Collections.sort;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053049import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
Bharat saraswala5c28512016-11-10 21:09:23 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
61import 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;
63import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
68import 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;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
82import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053083import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
Bharat saraswala5c28512016-11-10 21:09:23 +053084import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getListOfAttributesForKey;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053085import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053086import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
88import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
Bharat saraswala5c28512016-11-10 21:09:23 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053090import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053091import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053092import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
Bharat saraswalb41904b2016-10-20 19:22:36 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.generateBuildMethodForSubTree;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
99import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
Bharat saraswala5c28512016-11-10 21:09:23 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getCompareToForKeyClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswala5c28512016-11-10 21:09:23 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
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 saraswala5c28512016-11-10 21:09:23 +0530165import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530166import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530167import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530168import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530169import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530170import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530171import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530172import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530173import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530174import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
175import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530176import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswala5c28512016-11-10 21:09:23 +0530177import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530178import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal94844d62016-10-13 13:28:03 +0530179import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530180import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
181import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
185
Vinod Kumar S08710982016-03-03 19:55:30 +0530186/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530187 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530188 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530189public final class JavaFileGenerator {
190
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530191 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530192 private JavaFileGenerator() {
193 }
194
195 /**
196 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530197 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530198 * @param file file
199 * @param imports imports for the file
200 * @param curNode current YANG node
201 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530202 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530203 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530204 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530205 public static File generateInterfaceFile(File file, List<String> imports,
206 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530207 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530208 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530209
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530211 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530212
213 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530214 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530215 path = fileInfo.getPluginConfig().getCodeGenDir() +
216 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530217 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530218 path = fileInfo.getBaseCodeGenPath() +
219 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530220 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530221
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530223
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530224 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530225 YangLeavesHolder leavesHolder;
226 if (curNode instanceof YangLeavesHolder) {
227 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530228 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530229 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530230 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530231 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530232
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530233 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
234 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530235
236 // Generate ENUM interface
Bharat saraswal94844d62016-10-13 13:28:03 +0530237 if (curNode instanceof RpcNotificationContainer) {
238 insertDataIntoJavaFile(file, getOperationTypeEnum());
239 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530240 List<String> methods = new ArrayList<>();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530241
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530242 //Add only for choice class
243 if (curNode instanceof YangChoice) {
244 insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
245 curNode));
246 }
247
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530248 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530249 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530250 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530251 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530252 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530253 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
254 className) + trimAtLast(replaceLast(
255 getDataFromTempFileHandle(
256 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
257 getBeanFiles(curNode), path),
258 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530259 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530260 }
261
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530262 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530263 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530264 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
265 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530266 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530267 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530268 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530269 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530270
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530271 if (curNode instanceof YangAugmentableNode &&
272 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530273 methods.add(getYangAugmentInfoInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530274 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530275
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530276 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 methods.add(isLeafValueSetInterface());
Bharat saraswal94844d62016-10-13 13:28:03 +0530278 if (curNode.isOpTypeReq()) {
279 methods.add(isSelectLeafSetInterface());
280 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530281 }
282 for (String method : methods) {
283 insertDataIntoJavaFile(file, method);
284 }
Bharat saraswale304c252016-08-16 20:56:20 +0530285 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530286 }
287
288 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530289 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530290 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530291 * @param file file
292 * @param curNode current YANG node
293 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530294 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530295 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530296 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530297 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530298 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530299 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530300
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530301 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530302 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530303
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530304 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530305 YangLeavesHolder leavesHolder;
Bharat saraswal94844d62016-10-13 13:28:03 +0530306 if (curNode instanceof YangLeavesHolder &&
307 curNode.isOpTypeReq()) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530308 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530309 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530310 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530312 }
313
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530314 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530315 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530316 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530317 path = fileInfo.getPluginConfig().getCodeGenDir() +
318 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530319 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530320 path = fileInfo.getBaseCodeGenPath() +
321 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530322 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530323
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530324 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
325 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530326 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530327 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530328 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530329 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530330 methods.add(getDataFromTempFileHandle(
331 GETTER_FOR_INTERFACE_MASK,
332 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530333
334 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530335 methods.add(getDataFromTempFileHandle(
336 SETTER_FOR_INTERFACE_MASK,
337 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530338
339 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530340 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
341 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530342 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530343 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530344 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530345 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530346
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530347 if (curNode instanceof YangAugmentableNode &&
348 !(curNode instanceof YangChoice)) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530349 methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530350 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530351 }
352
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530353 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530355 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530356 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530357 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
358 .getTempJavaCodeFragmentFiles()
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530359 .addBuildMethodForInterface());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530360
361 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530362 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530363 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530364 }
365
Bharat saraswal84366c52016-03-23 19:40:35 +0530366 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530367 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530368 }
369
370 /**
371 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530372 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530373 * @param file file
374 * @param curNode current YANG node
375 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530376 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530377 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530378 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530379 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530380 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530381 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530382
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530383 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530384 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530385
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530386 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530387 YangLeavesHolder leavesHolder;
388 if (curNode instanceof YangLeavesHolder) {
389 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530390 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530391 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530392 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530393 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530394
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530395 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530396 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530397 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530398 path = fileInfo.getPluginConfig().getCodeGenDir() +
399 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530400 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530401 path = fileInfo.getBaseCodeGenPath() +
402 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530403 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530404
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530405 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
406 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530407 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530408 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530409
410 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530411 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530412 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
413 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530414 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530415 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530416 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530417 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530418 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530419 methods.add(getDataFromTempFileHandle(
420 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530421 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530422 methods.add(getDataFromTempFileHandle(
423 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530424
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530425 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530426 methods.add(getDataFromTempFileHandle(
427 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530428
Bharat saraswald14cbe82016-07-14 13:26:18 +0530429 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530430
Bharat saraswal8beac342016-08-04 02:00:03 +0530431 //Add operation attribute methods.
Bharat saraswal94844d62016-10-13 13:28:03 +0530432 if (leavesPresent && curNode.isOpTypeReq()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530433 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal94844d62016-10-13 13:28:03 +0530434 methods.add(getSetterForSelectLeaf(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530435 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530436 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530437 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530438 }
439 } else {
440 insertDataIntoJavaFile(file, NEW_LINE);
441 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530442
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530443 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530444 methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530445 methods.add(getYangAugmentInfoImpl());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530446 }
447
Bharat saraswal64e7e232016-07-14 23:33:55 +0530448 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530449 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
450 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530451 .addBuildMethodImpl());
Bharat saraswalb41904b2016-10-20 19:22:36 +0530452 if (curNode.isOpTypeReq()) {
453 methods.add(generateBuildMethodForSubTree(curNode));
Bharat saraswal0663aff2016-10-18 23:16:14 +0530454 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530455 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530456
457 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530458 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530459 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530460 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530461 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530462 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530463 }
464
465 /**
Bharat saraswala5c28512016-11-10 21:09:23 +0530466 * Returns generated key class file for current list node.
467 *
468 * @param file file
469 * @param curNode current YANG node
470 * @return key class file
471 * @throws IOException when fails to write in file
472 */
473 public static File generateKeyClassFile(File file, YangNode curNode)
474 throws IOException {
475
476 JavaFileInfoTranslator fileInfo =
477 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
478
479 String className = getCapitalCase(fileInfo.getJavaName()) + KEYS;
480 List<String> imports = new ArrayList<>();
481
482 YangNode parent = curNode.getParent();
483 JavaImportData importData = ((JavaCodeGeneratorInfo) parent)
484 .getTempJavaCodeFragmentFiles().getBeanTempFiles()
485 .getJavaImportData();
486 JavaQualifiedTypeInfoTranslator info =
487 new JavaQualifiedTypeInfoTranslator();
488 info.setClassInfo(className);
489 info.setPkgInfo(fileInfo.getPackage());
490 importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
491 parent.getJavaPackage());
492 List<String> keys = ((YangList) curNode).getKeyList();
493 List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
494
495 Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
496 JavaAttributeInfo attr;
497 JavaQualifiedTypeInfoTranslator typeInfo;
498 while (attrIt.hasNext()) {
499 attr = attrIt.next();
500 typeInfo = attr.getImportInfo();
501 if (!typeInfo.getClassInfo().equals(className)) {
502 imports.add(getImportString(attr.getImportInfo().getPkgInfo(),
503 attr.getImportInfo().getClassInfo()));
504 } else {
505 attr.setIsQualifiedAccess(true);
506 }
507 }
508
509 initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
510 className);
511 String pkg = null;
512 attrIt = attrs.iterator();
513 while (attrIt.hasNext()) {
514 attr = attrIt.next();
515 if (attr.isQualifiedName()) {
516 pkg = attr.getImportInfo().getPkgInfo();
517 }
518 insertDataIntoJavaFile(file, getJavaAttributeDefinition(
519 pkg, attr.getImportInfo().getClassInfo(),
520 attr.getAttributeName(), false, PROTECTED, null));
521 }
522 attrIt = attrs.iterator();
523 while (attrIt.hasNext()) {
524 attr = attrIt.next();
525 //add getter methods
526 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, attr
527 .getAttributeName(), false, null));
528 insertDataIntoJavaFile(file, getGetterForClass(
529 attr, GENERATE_KEY_CLASS));
530 insertDataIntoJavaFile(file, NEW_LINE);
531 //Add setter methods.
532 insertDataIntoJavaFile(file, getJavaDoc(MANAGER_SETTER_METHOD, attr
533 .getAttributeName(), false, null));
534 insertDataIntoJavaFile(file, getSetterForClass(
535 attr, className, GENERATE_EVENT_SUBJECT_CLASS));
536 insertDataIntoJavaFile(file, NEW_LINE);
537 }
538 insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
539
540 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
541 return file;
542 }
543
544 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530545 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530546 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530547 * @param file file
548 * @param curNode current YANG node
549 * @param attrPresent if any attribute is present or not
550 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530551 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530552 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530553 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530554 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530555 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530556 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530557 throws IOException {
558
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530559 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530560 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530561 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530562 YangLeavesHolder leavesHolder;
563 if (curNode instanceof YangLeavesHolder) {
564 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530565 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530566 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530567 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530568 }
569
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530570 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530571
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530573 String opParamClassName = className;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530574 String name = DEFAULT_CAPS + className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530575 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530576 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530577 opParamClassName = className + OP_PARAM;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530578 name = opParamClassName;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530579 rootNode = true;
580 path = fileInfo.getPluginConfig().getCodeGenDir() +
581 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530582 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530583 path = fileInfo.getBaseCodeGenPath() +
584 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530585 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530586
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530587 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
588 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530589
Bharat saraswal022dae92016-03-04 20:08:09 +0530590 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530591 if (attrPresent) {
592 addDefaultClassAttributeInfo(file, curNode, className,
593 opParamClassName, path, methods,
Bharat saraswal94844d62016-10-13 13:28:03 +0530594 rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530595 } else {
596 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530597 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530598
Bharat saraswal8beac342016-08-04 02:00:03 +0530599 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530600 methods.add(getYangAugmentInfoImpl());
Bharat saraswal8beac342016-08-04 02:00:03 +0530601 }
602 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530603 //Constructor.
Bharat saraswal94844d62016-10-13 13:28:03 +0530604 String constructor = getConstructorStart(className, rootNode) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530605 getDataFromTempFileHandle(
Bharat saraswal94844d62016-10-13 13:28:03 +0530606 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
607 + methodClose(FOUR_SPACE);
608 methods.add(constructor);
609 if (curNode.isOpTypeReq()) {
610 String augmentableSubTreeFiltering = EMPTY_STRING;
611 if (curNode instanceof YangAugmentableNode) {
612 // add is filter content match.
613 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530614 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530615 methods.add(getProcessSubtreeFilteringStart(curNode) +
Bharat saraswal94844d62016-10-13 13:28:03 +0530616 getProcessSubtreeFunctionBody(curNode) +
617 augmentableSubTreeFiltering +
Bharat saraswalb41904b2016-10-20 19:22:36 +0530618 getProcessSubTreeFilteringEnd(name));
Bharat saraswal94844d62016-10-13 13:28:03 +0530619
620 if (curNode instanceof YangLeavesHolder) {
621 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
622 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530623 methods.add(getProcessLeafSubtreeFiltering(curNode,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530624 path));
Bharat saraswal94844d62016-10-13 13:28:03 +0530625 }
626 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
627 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530628 methods.add(getProcessLeafListSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530629 path));
630 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530631 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530632
Bharat saraswal94844d62016-10-13 13:28:03 +0530633 if (curNode.getChild() != null) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530634 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
Bharat saraswal94844d62016-10-13 13:28:03 +0530635 path));
636 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530637 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530638 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530639 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530640 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530641
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530642 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530643
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530644 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645 if (leavesPresent) {
Bharat saraswal94844d62016-10-13 13:28:03 +0530646 methods.add(getIsValueLeafSet());
647 if (curNode.isOpTypeReq()) {
648 methods.add(getIsSelectLeafSet());
649 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530650 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530651 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530652 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530653 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530654 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530655
Bharat saraswale304c252016-08-16 20:56:20 +0530656 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530657 }
658
659 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530660 * Add methods related to attributes.
661 *
662 * @param file file
663 * @param curNode current YANG node
664 * @param className name of the class
665 * @param opParamClassName op param class name
666 * @param path file path
667 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530668 * @param rootNode flag indicating whether node is root node
669 * @throws IOException a violation in IO rule
670 */
671 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
672 String className,
673 String opParamClassName,
674 String path, List<String> methods,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530675 boolean rootNode)
676 throws IOException {
677
678 //Add attribute strings.
679 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530680 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
681 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530682 } catch (IOException e) {
683 throw new IOException(getErrorMsg(className, IMPL_CLASS));
684 }
685
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530686 try {
687 //Getter methods.
688 methods.add(getDataFromTempFileHandle(
689 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
690
691 // Hash code method.
692 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530693 getHashCodeMethodOpen() + getDataFromTempFileHandle(
694 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
695 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530696
697 //Equals method.
698 if (rootNode) {
699 methods.add(getEqualsMethodClose(
700 getEqualsMethodOpen(opParamClassName) +
701 getDataFromTempFileHandle(
702 EQUALS_IMPL_MASK,
703 getBeanFiles(curNode), path)));
704 } else {
705 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530706 getEqualsMethodOpen(DEFAULT_CAPS + className) +
707 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
708 getBeanFiles(curNode),
709 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530710 }
711 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530712 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
713 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530714 getToStringMethodClose());
715 } catch (IOException e) {
716 throw new IOException(getErrorMsg(className, IMPL_CLASS));
717 }
718 }
719
720 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530721 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530722 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530723 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530724 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530725 * @param imports imports for file
726 * @return type def class file
727 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530728 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530729 public static File generateTypeDefClassFile(File file, YangNode curNode,
730 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530731 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530732
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530733 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530734 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530735 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530736 String className = getCapitalCase(fileInfo.getJavaName());
737 String path = fileInfo.getBaseCodeGenPath() +
738 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530739 YangTypeDef typeDef = (YangTypeDef) curNode;
740 List<YangType<?>> types = typeDef.getTypeList();
741 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530742 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530743
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530744 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530745 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530746
Bharat saraswal84366c52016-03-23 19:40:35 +0530747 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530748
Bharat saraswal64e7e232016-07-14 23:33:55 +0530749 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530750 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530751 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
752 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530753 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530754 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530755 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530756
Bharat saraswal64e7e232016-07-14 23:33:55 +0530757 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530758 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530759
Bharat saraswal022dae92016-03-04 20:08:09 +0530760 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530761
Bharat saraswal64e7e232016-07-14 23:33:55 +0530762 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530763 methods.add(getDataFromTempFileHandle(
764 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530765
766 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530767 methods.add(getDataFromTempFileHandle(
768 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530769
Bharat saraswal64e7e232016-07-14 23:33:55 +0530770 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530771 methods.add(getDataFromTempFileHandle(
772 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530773
Bharat saraswal64e7e232016-07-14 23:33:55 +0530774 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530775 methods.add(getHashCodeMethodClose(
776 getHashCodeMethodOpen() + getDataFromTempFileHandle(
777 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
778 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530779
780 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530781 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530782 getEqualsMethodOpen(className + EMPTY_STRING) +
783 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
784 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530785
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530786 // To string method.
Bharat saraswal0663aff2016-10-18 23:16:14 +0530787 addTypedefToString(curNode, methods);
Bharat saraswal84366c52016-03-23 19:40:35 +0530788
Bharat saraswal64e7e232016-07-14 23:33:55 +0530789 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
790
Bharat saraswal8beac342016-08-04 02:00:03 +0530791 //From string method.
Bharat saraswala5c28512016-11-10 21:09:23 +0530792 methods.add(getFromStringMethodSignature(className) +
793 getDataFromTempFileHandle(
794 FROM_STRING_IMPL_MASK,
795 javaGenInfo.getTempJavaCodeFragmentFiles()
796 .getTypeTempFiles(), path) +
797 getFromStringMethodClose());
Bharat saraswal022dae92016-03-04 20:08:09 +0530798 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530799 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530800 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530801
Bharat saraswal84366c52016-03-23 19:40:35 +0530802 for (String method : methods) {
803 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530804 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530805 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530806
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530807 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530808 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530809
810 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530811 * Adds typedef to string method.
812 *
813 * @param curNode current node
814 * @param methods list of methods string
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530815 */
816 private static void addTypedefToString(YangNode curNode,
Bharat saraswalb41904b2016-10-20 19:22:36 +0530817 List<String> methods) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530818 //To string method.
Bharat saraswal94844d62016-10-13 13:28:03 +0530819
820 List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
821 YangType type = types.get(0);
Bharat saraswal94844d62016-10-13 13:28:03 +0530822 methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
Bharat saraswal0663aff2016-10-18 23:16:14 +0530823 null), type));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530824 }
825
826 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530827 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530828 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530829 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530830 * @param curNode current YANG node
831 * @param imports imports for file
832 * @return type def class file
833 * @throws IOException when fails to generate class file
834 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530835 public static File generateUnionClassFile(File file, YangNode curNode,
836 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530837 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530838
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530839 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530840 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530841
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530842 String className = getCapitalCase(fileInfo.getJavaName());
843 String path = fileInfo.getBaseCodeGenPath() +
844 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530845
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530846 TempJavaTypeFragmentFiles tempFiles =
847 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
848 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530849
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530850 boolean intConflict = false;
851 boolean longConflict = false;
852 boolean shortConflict = false;
853 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530854 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530855 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530856 }
857
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530858 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530859 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530860 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530861 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530862 }
863
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530864 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530865 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530866 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530867 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530868 }
869
Bharat saraswal64e7e232016-07-14 23:33:55 +0530870 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530871 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530872 }
873 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530874 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530875 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530876 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530877 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530878 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530879 if (longConflict) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530880 String impt = tempFiles.getJavaImportData().getBigIntegerImport();
881 if (!imports.contains(impt)) {
882 imports.add(impt);
883 sort(imports);
884 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530885 }
886
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530887 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530888 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530889
890 List<String> methods = new ArrayList<>();
891
Bharat saraswal64e7e232016-07-14 23:33:55 +0530892 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530893 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530894 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530895 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530896 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530897 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530898 }
899
Bharat saraswal64e7e232016-07-14 23:33:55 +0530900 //Default constructor.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530901 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530902
903 try {
904
Bharat saraswal64e7e232016-07-14 23:33:55 +0530905 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530906 methods.add(getDataFromTempFileHandle(
907 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530908
909 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530910 methods.add(getDataFromTempFileHandle(
911 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530912
Bharat saraswal64e7e232016-07-14 23:33:55 +0530913 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530914 methods.add(getDataFromTempFileHandle(
915 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530916
917 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530918 methods.add(getHashCodeMethodClose(
919 getHashCodeMethodOpen() +
920 getDataFromTempFileHandle(
921 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
922 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530923
Bharat saraswal64e7e232016-07-14 23:33:55 +0530924 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530925 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530926 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530927 getDataFromTempFileHandle(
928 EQUALS_IMPL_MASK, getTypeFiles(curNode),
929 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530930
931 //To string method.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530932 methods.add(getUnionToStringMethod(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530933 ((YangUnion) curNode).getTypeList()));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530934
Bharat saraswal64e7e232016-07-14 23:33:55 +0530935 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530936 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530937 getDataFromTempFileHandle(
938 FROM_STRING_IMPL_MASK,
939 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530940 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530941
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530942 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530943 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530944 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530945 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530946 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530947 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530948 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530949 methods.add(getRangeValidatorMethodForUnion(INT));
950 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530951 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530952 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530953 }
954
955 for (String method : methods) {
956 insertDataIntoJavaFile(file, method);
957 }
958 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
959
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530960 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530961 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530962
963 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530964 * Adds union class attribute information.
965 *
966 * @param file generated file
967 * @param curNode current YANG node
968 * @param intConflict flag to indicate if there is a conflict in int
969 * @param longConflict flag to indicate if there is a conflict in long
970 * @param shortConflict flag to indicate if there is a conflict in short
971 * @param path file path
972 * @param tempFiles temp java type fragment files
973 * @throws IOException a violation in IO rule
974 */
975 private static void addUnionClassAttributeInfo(File file,
976 YangNode curNode,
977 boolean intConflict,
978 boolean longConflict,
979 boolean shortConflict,
980 String path,
981 TempJavaTypeFragmentFiles tempFiles)
982 throws IOException {
983 if (intConflict) {
984 insertDataIntoJavaFile(file, JavaCodeSnippetGen
985 .addStaticAttributeIntRange(PRIVATE,
986 tempFiles.getIntIndex() <
987 tempFiles.getUIntIndex()));
988 }
989
990 if (longConflict) {
991 insertDataIntoJavaFile(file, JavaCodeSnippetGen
992 .addStaticAttributeLongRange(PRIVATE,
993 tempFiles.getLongIndex() <
994 tempFiles.getULongIndex()));
995 }
996
997 if (shortConflict) {
998 insertDataIntoJavaFile(file, JavaCodeSnippetGen
999 .addStaticAttributeShortRange(PRIVATE,
1000 tempFiles.getShortIndex() <
1001 tempFiles.getUInt8Index()));
1002 }
1003
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301004 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1005 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301006 insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301007 }
1008
1009 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301010 * Generates class file for type enum.
1011 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301012 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301013 * @param curNode current YANG node
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301014 * @param imports import list
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301015 * @return class file for type enum
1016 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301017 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301018 public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301019 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301020
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301021 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301022 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301023
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301024 String className = fileInfo.getJavaName();
1025 String path = fileInfo.getBaseCodeGenPath() +
1026 fileInfo.getPackageFilePath();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301027 TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
1028 curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
1029 JavaImportData data = enumFile.getJavaImportData();
1030 if (!enumFile.isEnumClass()) {
1031 imports.add(data.getImportForToBitSet());
1032 imports.add(data.getImportForPattern());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301033 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301034
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301035 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301036 GENERATE_ENUM_CLASS, imports, path);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301037
1038 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301039 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301040 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301041 String[] remove = {COMMA, NEW_LINE};
1042 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
1043 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
1044 .getEnumTempFiles(), path), remove) +
1045 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301046 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301047 throw new IOException(getErrorMsg(getCapitalCase(className),
1048 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301049 }
1050
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301051 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301052 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301053 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301054
Bharat saraswal64e7e232016-07-14 23:33:55 +05301055 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301056 //TODO: generate javadoc for method.
1057 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
1058 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301059
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301060 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301061 getEnumsOfValueMethod(className,
1062 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301063 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301064 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301065 getEnumsOfValueMethod(className,
1066 (YangEnumeration) curNode,
1067 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301068
Bharat saraswal64e7e232016-07-14 23:33:55 +05301069 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301070 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301071 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301072 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301073
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301074 if (!enumFile.isEnumClass()) {
1075 insertDataIntoJavaFile(file, getBitSetEnumClassFromString
1076 (getCapitalCase(className)));
1077 insertDataIntoJavaFile(file, getBitSetEnumClassToString(
1078 getCapitalCase(className), (YangEnumeration) curNode));
Bharat saraswal94844d62016-10-13 13:28:03 +05301079 } else {
1080 insertDataIntoJavaFile(file, getToStringForEnumClass());
Bharat saraswal250a7472016-05-12 13:16:57 +05301081 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301082
1083 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1084
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301085 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301086 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301087
1088 /**
1089 * Generates interface file for rpc.
1090 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301091 * @param file generated file
1092 * @param curNode current YANG node
1093 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301094 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301095 * @throws IOException when fails to generate class file
1096 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301097 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1098 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301099 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301100
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301101 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301102 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301103
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301104 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301105 ((JavaCodeGeneratorInfo) curNode)
1106 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301107 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301108 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301109 String path = fileInfo.getBaseCodeGenPath() +
1110 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301111 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1112 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301113
1114 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301115 JavaAttributeInfo rootAttribute =
1116 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301117 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301118
1119 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301120
Bharat saraswal1edde622016-09-06 10:18:04 +05301121 if (isGetSetOfRootNodeRequired(curNode)) {
1122 //Getter methods.
1123 methods.add(getGetterString(rootAttribute,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301124 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301125 NEW_LINE);
1126 // Setter methods.
1127 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301128 GENERATE_SERVICE_AND_MANAGER) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301129 NEW_LINE);
1130 }
1131
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301132 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301133
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301134 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1135 .getServiceTempFiles() != null) {
1136 JavaCodeGeneratorInfo javaGenInfo =
1137 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301138
1139 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301140 methods.add(getDataFromTempFileHandle(
1141 RPC_INTERFACE_MASK,
1142 javaGenInfo.getTempJavaCodeFragmentFiles()
1143 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301144 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301145 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301146 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301147 }
1148
1149 for (String method : methods) {
1150 insertDataIntoJavaFile(file, method);
1151 }
1152 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1153
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301154 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301155 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301156
1157 /**
1158 * Generates event file.
1159 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301160 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301161 * @param curNode current YANG node
1162 * @param imports imports for file
1163 * @throws IOException when fails to generate class file
1164 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301165 public static void generateEventFile(File file, YangNode curNode,
1166 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301167 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301168
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301169 String className =
1170 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1171 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301172
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301173 TempJavaEventFragmentFiles tempFiles =
1174 ((TempJavaCodeFragmentFilesContainer) curNode)
1175 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301176
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301177 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301178 .getBaseCodeGenPath() +
1179 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1180 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301181 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1182 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301183 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301184 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301185 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1186 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301187 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301188
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301189 insertDataIntoJavaFile(file,
1190 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1191 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301192 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301193 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301194 }
1195
1196 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1197 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301198 }
1199
1200 /**
1201 * Generates event listener file.
1202 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301203 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301204 * @param curNode current YANG node
1205 * @param imports imports for file
1206 * @throws IOException when fails to generate class file
1207 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301208 public static void generateEventListenerFile(File file, YangNode curNode,
1209 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301210 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301211
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301212 String className =
1213 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1214 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301215
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301216 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1217 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301218 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301219 validateLineLength(file);
1220 }
1221
1222 /**
1223 * Generates event subject's file.
1224 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301225 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301226 * @param curNode current YANG node
1227 * @throws IOException when fails to do IO exceptions
1228 */
1229 public static void generateEventSubjectFile(File file, YangNode curNode)
1230 throws IOException {
1231
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301232 String className =
1233 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1234 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301235
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301236 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1237 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301238
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301239 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301240 .getBaseCodeGenPath() +
1241 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1242 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301243
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301244 TempJavaEventFragmentFiles tempFiles =
1245 ((TempJavaCodeFragmentFilesContainer) curNode)
1246 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301247
1248 insertDataIntoJavaFile(file, NEW_LINE);
1249 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301250 insertDataIntoJavaFile(
1251 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1252 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301253
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301254 insertDataIntoJavaFile(
1255 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1256 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301257
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301258 insertDataIntoJavaFile(
1259 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1260 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301261 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301262 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301263 }
1264
1265 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1266 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301267 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301268
1269 /**
1270 * Returns error message string.
1271 *
1272 * @param className name of the class
1273 * @param fileType type of file
1274 * @return error message string
1275 */
1276 private static String getErrorMsg(String className, String fileType) {
1277 return "No data found in temporary java code fragment files for " +
1278 className + " while " + fileType + " file generation.";
1279 }
1280
1281 /**
1282 * Checks whether leaf is present in YANG leaves holder.
1283 *
1284 * @param holder holder of YANG leaves
1285 * @return true if leaves are present, false otherwise
1286 */
1287 private static boolean leavesPresent(YangLeavesHolder holder) {
1288 return holder.getListOfLeaf() != null &&
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301289 !holder.getListOfLeaf().isEmpty();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301290 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301291
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301292}