blob: eae26fd52195d9134a79006e38a681db0c5627e6 [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 saraswale50edca2016-08-05 01:58:25 +053021import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053022import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053023import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053024import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053025import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053026import org.onosproject.yangutils.datamodel.YangNode;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053027import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053028import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswale50edca2016-08-05 01:58:25 +053029import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053030import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053031import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053032import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053035import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
36import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal039f59c2016-07-14 21:57:13 +053037import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053038import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053039import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053040import org.onosproject.yangutils.utils.UtilConstants;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053041import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053042
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053043import java.io.File;
44import java.io.IOException;
45import java.util.ArrayList;
46import java.util.List;
47
48import static java.util.Collections.sort;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053049import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
50import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053051import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
52import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
57import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
58import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
60import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
61import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
62import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
63import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
64import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
67import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
73import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
76import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
77import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
78import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
79import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
82import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
83import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
84import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
85import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
86import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
87import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
88import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
89import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
90import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053091import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
92import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
93import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
95import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
96import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
97import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
98import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053099import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530100import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getYangAugmentedMapObjectForConstruct;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530101import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
102import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
132import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
133import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
134import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530135import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
136import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGettersForValueAndSelectLeaf;
137import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
138import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
139import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOperationAttributesGetters;
140import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
141import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
142import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
143import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
144import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530145import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
146import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
147import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
148import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
149import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
150import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
151import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
152import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
153import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
154import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530155import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530156import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530157import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530158import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
159import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530160import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530161import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530162import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530163import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530164import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530166import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
168import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530169import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530170import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530171import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530172import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530173import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530174import static org.onosproject.yangutils.utils.UtilConstants.INT;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530175import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530177import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530178import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
179import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530180import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530181import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530182import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530183import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530184import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530185import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530186import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
187import static org.onosproject.yangutils.utils.UtilConstants.TO;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530188import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
189import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530190import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530191import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530192import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
193import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530194import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530195import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530196import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
197
Vinod Kumar S08710982016-03-03 19:55:30 +0530198/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530199 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530200 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530201public final class JavaFileGenerator {
202
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530203 // No instantiation
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530204 private JavaFileGenerator() {
205 }
206
207 /**
208 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530209 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530210 * @param file file
211 * @param imports imports for the file
212 * @param curNode current YANG node
213 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530214 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530215 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530216 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530217 public static File generateInterfaceFile(File file, List<String> imports,
218 YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530219 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530220 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530221
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530222 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530223 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530224
225 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530226 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530227 path = fileInfo.getPluginConfig().getCodeGenDir() +
228 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530229 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530230 path = fileInfo.getBaseCodeGenPath() +
231 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530232 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530233
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530234 String className = getCapitalCase(fileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530235
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530236 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530237 YangLeavesHolder leavesHolder;
238 if (curNode instanceof YangLeavesHolder) {
239 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530240 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530241 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530242 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530243 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530244
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530245 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
246 className);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530247
248 // Generate ENUM interface
249 insertDataIntoJavaFile(file, getOperationTypeEnum());
250
Bharat saraswal8beac342016-08-04 02:00:03 +0530251 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530252 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530253 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530254 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530255 //Leaf identifier enum.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530256 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530257 insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
258 className) + trimAtLast(replaceLast(
259 getDataFromTempFileHandle(
260 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
261 getBeanFiles(curNode), path),
262 COMMA, SEMI_COLON), NEW_LINE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530263 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530264 }
265
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530266 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530267 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530268 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
269 GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530270 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530271 throw new IOException(getErrorMsg(className, INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530272 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530273 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530274
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530275 if (curNode instanceof YangAugmentableNode &&
276 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530277 methods.add(getYangAugmentInfoInterface());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530278 methods.add(getYangAugmentInfoMapInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530279 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530280
Bharat saraswale50edca2016-08-05 01:58:25 +0530281 if (curNode instanceof YangCase) {
282 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530283 JavaQualifiedTypeInfo qualifiedTypeInfo =
284 getQualifierInfoForCasesParent(caseParent,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530285 fileInfo.getPluginConfig());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530286 methods.add(processSubtreeFilteringInterface(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530287 qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530288 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530289 methods.add(processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530290 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530291
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530292 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530293 methods.add(isLeafValueSetInterface());
294 methods.add(isSelectLeafSetInterface());
Bharat saraswal8beac342016-08-04 02:00:03 +0530295 }
296 for (String method : methods) {
297 insertDataIntoJavaFile(file, method);
298 }
Bharat saraswale304c252016-08-16 20:56:20 +0530299 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530300 }
301
302 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530303 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530304 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530305 * @param file file
306 * @param curNode current YANG node
307 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530308 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530309 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530310 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530311 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530312 boolean attrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530313 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530314
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530315 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530316 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530317 YangPluginConfig pluginConfig = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530318
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530319 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530320 YangLeavesHolder leavesHolder;
321 if (curNode instanceof YangLeavesHolder) {
322 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530323 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530324 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530325 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530326 }
327
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530328 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530329 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530330 if (curNode instanceof RpcNotificationContainer) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530331 path = fileInfo.getPluginConfig().getCodeGenDir() +
332 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530333 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530334 path = fileInfo.getBaseCodeGenPath() +
335 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530336 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530337
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530338 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
339 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530340 List<String> methods = new ArrayList<>();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530341 if (attrPresent) {
Bharat saraswald532a4c2016-03-25 18:19:46 +0530342 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530343 //Getter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530344 methods.add(getDataFromTempFileHandle(
345 GETTER_FOR_INTERFACE_MASK,
346 getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530347
348 //Setter methods.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530349 methods.add(getDataFromTempFileHandle(
350 SETTER_FOR_INTERFACE_MASK,
351 getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530352
353 //Add to list method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530354 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
355 ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530356 } catch (IOException e) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530357 throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530358 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530359 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530360
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530361 if (curNode instanceof YangAugmentableNode &&
362 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530363 methods.add(getAddAugmentInfoMethodInterface());
364 methods.add(getYangAugmentInfoInterface());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530365 methods.add(getYangAugmentInfoMapInterface());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530366 }
367
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530368 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530369 methods.add(setSelectLeafSetInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530370 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530371 //Add build method to builder interface file.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530372 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
373 .getTempJavaCodeFragmentFiles()
374 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530375
376 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530377 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530378 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530379 }
380
Bharat saraswal84366c52016-03-23 19:40:35 +0530381 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530382 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530383 }
384
385 /**
386 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530387 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530388 * @param file file
389 * @param curNode current YANG node
390 * @param attrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530391 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530392 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530393 */
Bharat saraswald14cbe82016-07-14 13:26:18 +0530394 public static File generateBuilderClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530395 boolean attrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530396 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530397
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530398 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530399 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530400 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530401
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530402 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530403 YangLeavesHolder leavesHolder;
404 if (curNode instanceof YangLeavesHolder) {
405 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530406 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530407 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530408 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530409 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530410
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530411 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530412 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530413 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530414 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530415 isRootNode = true;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530416 path = fileInfo.getPluginConfig().getCodeGenDir() +
417 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530418 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530419 path = fileInfo.getBaseCodeGenPath() +
420 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530421 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530422
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530423 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
424 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530425 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530426
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530427 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530428 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530429 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530430 if (attrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530431
432 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530433 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530434 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
435 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
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 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530439
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530440 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530441 insertDataIntoJavaFile(file, getOperationAttributes());
442 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530443 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530444 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530445 methods.add(getDataFromTempFileHandle(
446 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530447 // Setter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530448 methods.add(getDataFromTempFileHandle(
449 SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530450
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530451 //Add to list impl method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530452 methods.add(getDataFromTempFileHandle(
453 ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530454
Bharat saraswald14cbe82016-07-14 13:26:18 +0530455 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530456
Bharat saraswal8beac342016-08-04 02:00:03 +0530457 //Add operation attribute methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530458 if (leavesPresent) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530459 methods.add(getOperationAttributesGetters());
460 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530461 methods.add(getSetterForSelectLeaf(className, isRootNode));
462 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530463 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530464 throw new IOException(getErrorMsg(className, BUILDER_CLASS));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530465 }
466 } else {
467 insertDataIntoJavaFile(file, NEW_LINE);
468 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530469
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530470 if (curNode instanceof YangAugmentableNode) {
471 methods.add(getAddAugmentInfoMethodImpl());
472 methods.add(getYangAugmentInfoImpl());
473 methods.add(getYangAugmentInfoMapImpl());
474 }
475
Bharat saraswal64e7e232016-07-14 23:33:55 +0530476 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530477 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
478 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530479 .addBuildMethodImpl());
480 methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER
481 ));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530482
483 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530484 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530485 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530486 }
Bharat saraswald14cbe82016-07-14 13:26:18 +0530487 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530488 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530489 }
490
491 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530492 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530493 *
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530494 * @param file file
495 * @param curNode current YANG node
496 * @param attrPresent if any attribute is present or not
497 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530498 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530499 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530500 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530501 public static File generateDefaultClassFile(File file, YangNode curNode,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530502 boolean attrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530503 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530504 throws IOException {
505
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530506 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530507 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530508 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530509
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530510 boolean leavesPresent;
Bharat saraswal8beac342016-08-04 02:00:03 +0530511 YangLeavesHolder leavesHolder;
512 if (curNode instanceof YangLeavesHolder) {
513 leavesHolder = (YangLeavesHolder) curNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530514 leavesPresent = leavesPresent(leavesHolder);
Bharat saraswal8beac342016-08-04 02:00:03 +0530515 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530516 leavesPresent = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530517 }
518
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530519 boolean rootNode = false;
Bharat saraswal8beac342016-08-04 02:00:03 +0530520
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530521 String className = getCapitalCase(fileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530522 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530523 String path;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530524 if (curNode instanceof RpcNotificationContainer) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530525 opParamClassName = className + OP_PARAM;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530526 rootNode = true;
527 path = fileInfo.getPluginConfig().getCodeGenDir() +
528 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530529 } else {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530530 path = fileInfo.getBaseCodeGenPath() +
531 fileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530532 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530533
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530534 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
535 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530536
Bharat saraswal022dae92016-03-04 20:08:09 +0530537 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530538 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530539 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530540 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530541 if (attrPresent) {
542 addDefaultClassAttributeInfo(file, curNode, className,
543 opParamClassName, path, methods,
544 leavesPresent, rootNode);
Bharat saraswald532a4c2016-03-25 18:19:46 +0530545 } else {
546 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530547 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530548
Bharat saraswal8beac342016-08-04 02:00:03 +0530549 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530550 methods.add(getYangAugmentInfoImpl());
551 methods.add(getYangAugmentInfoMapImpl());
552 }
553 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530554 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530555 String constructor =
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530556 getConstructorStart(className, rootNode);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530557 constructor = constructor +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530558 getDataFromTempFileHandle(
559 CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530560
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530561 if (leavesPresent) {
562 constructor = constructor +
563 getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530564 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530565 String augmentableSubTreeFiltering = EMPTY_STRING;
Bharat saraswale3175d32016-08-31 17:50:11 +0530566 if (curNode instanceof YangAugmentableNode) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530567 constructor = constructor +
568 getYangAugmentedMapObjectForConstruct();
Bharat saraswale50edca2016-08-05 01:58:25 +0530569
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530570 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530571 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
572 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530573 methods.add(constructor + methodClose(FOUR_SPACE));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530574
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530575 methods.add(getProcessSubtreeFilteringStart(curNode, config) +
576 getProcessSubtreeFunctionBody(curNode) +
577 augmentableSubTreeFiltering +
578 getProcessSubTreeFilteringEnd());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530579
580 if (curNode instanceof YangLeavesHolder) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530581 if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
582 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
583 methods.add(getProcessLeafSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530584 path));
585 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530586 if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
587 !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530588 methods.add(getProcessLeafListSubtreeFiltering(curNode, config,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530589 path));
590 }
591 }
592
593 if (curNode.getChild() != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530594 methods.add(getProcessChildNodeSubtreeFiltering(curNode, config,
595 path));
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530596 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530597 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530598 throw new IOException(getErrorMsg(className, IMPL_CLASS));
Vinod Kumar S08710982016-03-03 19:55:30 +0530599 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530600
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530601 methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT
602 ));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530603
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530604 methods.add(builderMethod(className));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530605 if (leavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530606 methods.add(getOperationAttributesGetters());
607 methods.add(getGettersForValueAndSelectLeaf());
608 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530609 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530610 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530611 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530612 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530613
Bharat saraswale304c252016-08-16 20:56:20 +0530614 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530615 }
616
617 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530618 * Add methods related to attributes.
619 *
620 * @param file file
621 * @param curNode current YANG node
622 * @param className name of the class
623 * @param opParamClassName op param class name
624 * @param path file path
625 * @param methods list of methods string
626 * @param leavesPresent flag indicating presence of leaves
627 * @param rootNode flag indicating whether node is root node
628 * @throws IOException a violation in IO rule
629 */
630 private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
631 String className,
632 String opParamClassName,
633 String path, List<String> methods,
634 boolean leavesPresent,
635 boolean rootNode)
636 throws IOException {
637
638 //Add attribute strings.
639 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530640 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
641 ATTRIBUTES_MASK, getBeanFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530642 } catch (IOException e) {
643 throw new IOException(getErrorMsg(className, IMPL_CLASS));
644 }
645
646 //Add operation attributes
647 if (leavesPresent) {
648 insertDataIntoJavaFile(file, getOperationAttributes());
649 }
650
651 try {
652 //Getter methods.
653 methods.add(getDataFromTempFileHandle(
654 GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
655
656 // Hash code method.
657 methods.add(getHashCodeMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530658 getHashCodeMethodOpen() + getDataFromTempFileHandle(
659 HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
660 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530661
662 //Equals method.
663 if (rootNode) {
664 methods.add(getEqualsMethodClose(
665 getEqualsMethodOpen(opParamClassName) +
666 getDataFromTempFileHandle(
667 EQUALS_IMPL_MASK,
668 getBeanFiles(curNode), path)));
669 } else {
670 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530671 getEqualsMethodOpen(DEFAULT_CAPS + className) +
672 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
673 getBeanFiles(curNode),
674 path)));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530675 }
676 // To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530677 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
678 TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530679 getToStringMethodClose());
680 } catch (IOException e) {
681 throw new IOException(getErrorMsg(className, IMPL_CLASS));
682 }
683 }
684
685 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530686 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530687 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530688 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530689 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530690 * @param imports imports for file
691 * @return type def class file
692 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530693 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530694 public static File generateTypeDefClassFile(File file, YangNode curNode,
695 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530696 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530697
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530698 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530699 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530700 YangPluginConfig config = fileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530701
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530702 // import
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530703 String className = getCapitalCase(fileInfo.getJavaName());
704 String path = fileInfo.getBaseCodeGenPath() +
705 fileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530706 YangTypeDef typeDef = (YangTypeDef) curNode;
707 List<YangType<?>> types = typeDef.getTypeList();
708 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530709 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530710
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530711 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530712 imports, path);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530713
Bharat saraswal84366c52016-03-23 19:40:35 +0530714 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530715
Bharat saraswal64e7e232016-07-14 23:33:55 +0530716 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530717 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530718 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
719 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530720 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530721 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530722 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530723
Bharat saraswal64e7e232016-07-14 23:33:55 +0530724 //Default constructor.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530725 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING
726 ));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530727
Bharat saraswal022dae92016-03-04 20:08:09 +0530728 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530729
Bharat saraswal64e7e232016-07-14 23:33:55 +0530730 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530731 methods.add(getDataFromTempFileHandle(
732 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530733
734 //Of method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530735 methods.add(getDataFromTempFileHandle(
736 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530737
Bharat saraswal64e7e232016-07-14 23:33:55 +0530738 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530739 methods.add(getDataFromTempFileHandle(
740 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530741
Bharat saraswal64e7e232016-07-14 23:33:55 +0530742 // Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530743 methods.add(getHashCodeMethodClose(
744 getHashCodeMethodOpen() + getDataFromTempFileHandle(
745 HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
746 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530747
748 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530749 methods.add(getEqualsMethodClose(
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530750 getEqualsMethodOpen(className + EMPTY_STRING) +
751 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
752 getTypeFiles(curNode), path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530753
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530754 // To string method.
755 addTypedefToString(curNode, methods, path, type);
Bharat saraswal84366c52016-03-23 19:40:35 +0530756
Bharat saraswal64e7e232016-07-14 23:33:55 +0530757 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
758
Bharat saraswal8beac342016-08-04 02:00:03 +0530759 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530760 if (type.getDataType() == DERIVED &&
761 ((YangDerivedInfo) type.getDataTypeExtendedInfo())
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530762 .getEffectiveBuiltInType()
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530763 == IDENTITYREF) {
764 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530765 }
766
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530767 if (type.getDataType() == IDENTITYREF) {
768 yangDataTypes = IDENTITYREF;
Shankara-Huaweib7564772016-08-02 18:13:13 +0530769 }
770
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530771 if (yangDataTypes != IDENTITYREF) {
772 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530773 getDataFromTempFileHandle(
774 FROM_STRING_IMPL_MASK,
775 javaGenInfo.getTempJavaCodeFragmentFiles()
776 .getTypeTempFiles(), path) +
777 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530778 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530779 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530780 throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
Bharat saraswal022dae92016-03-04 20:08:09 +0530781 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530782
Bharat saraswal84366c52016-03-23 19:40:35 +0530783 for (String method : methods) {
784 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530785 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530786 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530787
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530788 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530789 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530790
791 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530792 * Adds typedef to string method.
793 *
794 * @param curNode current node
795 * @param methods list of methods string
796 * @param path file path
797 * @param type YANG type
798 * @throws IOException a violation in IO rule
799 */
800 private static void addTypedefToString(YangNode curNode,
801 List<String> methods, String path,
802 YangType type) throws IOException {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530803 String methodSig = methodSignature(TO + STRING_DATA_TYPE, EMPTY_STRING,
804 PUBLIC, null, STRING_DATA_TYPE, null,
805 CLASS_TYPE);
806 String methodClose = signatureClose() + methodClose(FOUR_SPACE);
807 String openClose = brackets(OPEN_CLOSE_BRACKET, null,
808 null);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530809 //To string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530810 if (type.getDataType() == BINARY) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530811 JavaQualifiedTypeInfoTranslator typeInfo =
812 getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase
813 (UtilConstants.BINARY));
814
815 JavaAttributeInfo attr =
816 getAttributeInfoForTheData(typeInfo,
817 UtilConstants.BINARY,
818 null, false, false);
819 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530820 String bitsToStringMethod = getOverRideString() + methodSig +
821 getReturnString(BASE64, EIGHT_SPACE_INDENTATION) +
822 PERIOD + GET_ENCODER + brackets(OPEN_CLOSE_BRACKET, null,
823 null) +
824 PERIOD + ENCODE_TO_STRING + brackets(
825 OPEN_CLOSE_BRACKET_WITH_VALUE, attributeName, null) +
826 methodClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530827 methods.add(bitsToStringMethod);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530828 } else if (type.getDataType() == BITS) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530829 JavaQualifiedTypeInfoTranslator typeInfo =
830 getQualifiedTypeInfoOfCurNode(curNode,
831 getCapitalCase(UtilConstants.BITS));
832
833 JavaAttributeInfo attr =
834 getAttributeInfoForTheData(typeInfo,
835 UtilConstants.BITS,
836 null, false, false);
837 String attributeName = attr.getAttributeName();
838 String bitsToStringMethod =
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530839 getOverRideString() + methodSig +
840 getReturnString(attributeName, EIGHT_SPACE_INDENTATION) +
841 PERIOD + TO + STRING_DATA_TYPE + openClose +
842 methodClose;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530843 methods.add(bitsToStringMethod);
844 } else {
845 methods.add(getToStringMethodOpen() +
846 getDataFromTempFileHandle(
847 TO_STRING_IMPL_MASK,
848 ((TempJavaCodeFragmentFilesContainer)
849 curNode)
850 .getTempJavaCodeFragmentFiles()
851 .getTypeTempFiles(), path) +
852 getToStringMethodClose());
853 }
854 }
855
856 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530857 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530858 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530859 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530860 * @param curNode current YANG node
861 * @param imports imports for file
862 * @return type def class file
863 * @throws IOException when fails to generate class file
864 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530865 public static File generateUnionClassFile(File file, YangNode curNode,
866 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530867 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530868
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530869 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530870 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530871 YangPluginConfig config = fileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530872
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530873 String className = getCapitalCase(fileInfo.getJavaName());
874 String path = fileInfo.getBaseCodeGenPath() +
875 fileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530876
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530877 TempJavaTypeFragmentFiles tempFiles =
878 ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
879 .getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530880
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530881 boolean intConflict = false;
882 boolean longConflict = false;
883 boolean shortConflict = false;
884 JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530885 if (intAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530886 intAttr = tempFiles.getUIntAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530887 }
888
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530889 JavaAttributeInfo longAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530890 tempFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530891 if (longAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530892 longAttr = tempFiles.getULongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530893 }
894
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530895 JavaAttributeInfo shortAttr =
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530896 tempFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530897 if (shortAttr == null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530898 shortAttr = tempFiles.getUInt8Attribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530899 }
900
Bharat saraswal64e7e232016-07-14 23:33:55 +0530901 if (intAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530902 intConflict = intAttr.isIntConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530903 }
904 if (longAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530905 longConflict = longAttr.isLongConflict();
Bharat saraswal64e7e232016-07-14 23:33:55 +0530906 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530907 if (shortAttr != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530908 shortConflict = shortAttr.isShortConflict();
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530909 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530910 if (longConflict) {
911 imports.add(tempFiles.getJavaImportData()
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530912 .getBigIntegerImport());
Bharat saraswal64e7e232016-07-14 23:33:55 +0530913 sort(imports);
914 }
915
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530916 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530917 imports, path);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530918
919 List<String> methods = new ArrayList<>();
920
Bharat saraswal64e7e232016-07-14 23:33:55 +0530921 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530922 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530923 addUnionClassAttributeInfo(file, curNode, intConflict,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530924 longConflict, shortConflict, path, tempFiles);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530925 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530926 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530927 }
928
Bharat saraswal64e7e232016-07-14 23:33:55 +0530929 //Default constructor.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530930 methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING
931 ));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530932
933 try {
934
Bharat saraswal64e7e232016-07-14 23:33:55 +0530935 //Type constructor.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530936 methods.add(getDataFromTempFileHandle(
937 CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530938
939 // Of string method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530940 methods.add(getDataFromTempFileHandle(
941 OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530942
Bharat saraswal64e7e232016-07-14 23:33:55 +0530943 //Getter methods.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530944 methods.add(getDataFromTempFileHandle(
945 GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530946
947 //Hash code method.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530948 methods.add(getHashCodeMethodClose(
949 getHashCodeMethodOpen() +
950 getDataFromTempFileHandle(
951 HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
952 path).replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530953
Bharat saraswal64e7e232016-07-14 23:33:55 +0530954 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530955 methods.add(getEqualsMethodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530956 getEqualsMethodOpen(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530957 getDataFromTempFileHandle(
958 EQUALS_IMPL_MASK, getTypeFiles(curNode),
959 path)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530960
961 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530962 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530963 getDataFromTempFileHandle(
964 TO_STRING_IMPL_MASK,
965 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530966 getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530967
Bharat saraswal64e7e232016-07-14 23:33:55 +0530968 //From string method.
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530969 methods.add(getFromStringMethodSignature(className) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530970 getDataFromTempFileHandle(
971 FROM_STRING_IMPL_MASK,
972 getTypeFiles(curNode), path) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530973 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530974
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530975 if (intConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530976 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530977 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530978 if (longConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530979 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530980 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530981 if (shortConflict && !intConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530982 methods.add(getRangeValidatorMethodForUnion(INT));
983 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530984 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530985 throw new IOException(getErrorMsg(className, UNION_CLASS));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530986 }
987
988 for (String method : methods) {
989 insertDataIntoJavaFile(file, method);
990 }
991 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
992
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530993 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530994 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530995
996 /**
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530997 * Adds union class attribute information.
998 *
999 * @param file generated file
1000 * @param curNode current YANG node
1001 * @param intConflict flag to indicate if there is a conflict in int
1002 * @param longConflict flag to indicate if there is a conflict in long
1003 * @param shortConflict flag to indicate if there is a conflict in short
1004 * @param path file path
1005 * @param tempFiles temp java type fragment files
1006 * @throws IOException a violation in IO rule
1007 */
1008 private static void addUnionClassAttributeInfo(File file,
1009 YangNode curNode,
1010 boolean intConflict,
1011 boolean longConflict,
1012 boolean shortConflict,
1013 String path,
1014 TempJavaTypeFragmentFiles tempFiles)
1015 throws IOException {
1016 if (intConflict) {
1017 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1018 .addStaticAttributeIntRange(PRIVATE,
1019 tempFiles.getIntIndex() <
1020 tempFiles.getUIntIndex()));
1021 }
1022
1023 if (longConflict) {
1024 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1025 .addStaticAttributeLongRange(PRIVATE,
1026 tempFiles.getLongIndex() <
1027 tempFiles.getULongIndex()));
1028 }
1029
1030 if (shortConflict) {
1031 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1032 .addStaticAttributeShortRange(PRIVATE,
1033 tempFiles.getShortIndex() <
1034 tempFiles.getUInt8Index()));
1035 }
1036
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301037 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1038 ATTRIBUTES_MASK, getTypeFiles(curNode), path));
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301039 }
1040
1041 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301042 * Generates class file for type enum.
1043 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301044 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301045 * @param curNode current YANG node
1046 * @return class file for type enum
1047 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301048 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301049 public static File generateEnumClassFile(File file, YangNode curNode)
1050 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301051
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301052 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301053 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301054 YangPluginConfig config = fileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301055
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301056 String className = fileInfo.getJavaName();
1057 String path = fileInfo.getBaseCodeGenPath() +
1058 fileInfo.getPackageFilePath();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301059
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301060 initiateJavaFileGeneration(file, getCapitalCase(className),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301061 GENERATE_ENUM_CLASS, null, path
1062 );
Bharat saraswal64e7e232016-07-14 23:33:55 +05301063
1064 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301065 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301066 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301067 String[] remove = {COMMA, NEW_LINE};
1068 insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
1069 ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
1070 .getEnumTempFiles(), path), remove) +
1071 signatureClose());
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301072 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301073 throw new IOException(getErrorMsg(getCapitalCase(className),
1074 ENUM_CLASS));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301075 }
1076
Bharat saraswal64e7e232016-07-14 23:33:55 +05301077 // Add an attribute to get the enum's values.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301078 insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301079
Bharat saraswal64e7e232016-07-14 23:33:55 +05301080 // Add a constructor for enum.
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301081 //TODO: generate javadoc for method.
1082 insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
1083 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301084
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301085 insertDataIntoJavaFile(file,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301086 getEnumsOfValueMethod(className,
1087 (YangEnumeration) curNode,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301088 ENUM_METHOD_INT_VALUE));
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301089 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301090 getEnumsOfValueMethod(className,
1091 (YangEnumeration) curNode,
1092 ENUM_METHOD_STRING_VALUE));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301093
Bharat saraswal64e7e232016-07-14 23:33:55 +05301094 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301095 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301096 null) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301097 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301098 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, SCHEMA_NAME, false,
1099 null) +
1100 getGetter(STRING_DATA_TYPE, SCHEMA_NAME, GENERATE_ENUM_CLASS) +
1101 NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301102
1103 try {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301104 insertDataIntoJavaFile(file,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301105 getFromStringMethodSignature(
1106 getCapitalCase(className)) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301107 getDataFromTempFileHandle(
1108 FROM_STRING_IMPL_MASK,
1109 ((TempJavaCodeFragmentFilesContainer) curNode)
1110 .getTempJavaCodeFragmentFiles()
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301111 .getEnumTempFiles(),
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301112 path) + getFromStringMethodClose());
Bharat saraswal250a7472016-05-12 13:16:57 +05301113 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301114 throw new IOException(getErrorMsg(getCapitalCase(className),
1115 ENUM_CLASS));
Bharat saraswal250a7472016-05-12 13:16:57 +05301116 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301117
1118 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1119
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301120 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301121 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301122
1123 /**
1124 * Generates interface file for rpc.
1125 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301126 * @param file generated file
1127 * @param curNode current YANG node
1128 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301129 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301130 * @throws IOException when fails to generate class file
1131 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301132 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1133 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301134 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301135
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301136 JavaFileInfoTranslator fileInfo =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301137 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301138
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301139 TempJavaServiceFragmentFiles tempFiles =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301140 ((JavaCodeGeneratorInfo) curNode)
1141 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301142 String className = getCapitalCase(fileInfo.getJavaName()) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301143 SERVICE_METHOD_STRING;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301144 String path = fileInfo.getBaseCodeGenPath() +
1145 fileInfo.getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301146 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1147 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301148
1149 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301150 JavaAttributeInfo rootAttribute =
1151 getCurNodeAsAttributeInTarget(curNode, curNode, false,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301152 tempFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301153
1154 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301155
Bharat saraswal1edde622016-09-06 10:18:04 +05301156 if (isGetSetOfRootNodeRequired(curNode)) {
1157 //Getter methods.
1158 methods.add(getGetterString(rootAttribute,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301159 GENERATE_SERVICE_AND_MANAGER
1160 ) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301161 NEW_LINE);
1162 // Setter methods.
1163 methods.add(getSetterString(rootAttribute, className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301164 GENERATE_SERVICE_AND_MANAGER
1165 ) +
Bharat saraswal1edde622016-09-06 10:18:04 +05301166 NEW_LINE);
1167 }
1168
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301169 methods.add(getAugmentsDataMethodForService(curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301170
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301171 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1172 .getServiceTempFiles() != null) {
1173 JavaCodeGeneratorInfo javaGenInfo =
1174 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301175
1176 // Rpc methods
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301177 methods.add(getDataFromTempFileHandle(
1178 RPC_INTERFACE_MASK,
1179 javaGenInfo.getTempJavaCodeFragmentFiles()
1180 .getServiceTempFiles(), path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301181 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301182 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301183 throw new IOException(getErrorMsg(className, RPC_CLASS));
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301184 }
1185
1186 for (String method : methods) {
1187 insertDataIntoJavaFile(file, method);
1188 }
1189 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1190
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301191 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301192 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301193
1194 /**
1195 * Generates event file.
1196 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301197 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301198 * @param curNode current YANG node
1199 * @param imports imports for file
1200 * @throws IOException when fails to generate class file
1201 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301202 public static void generateEventFile(File file, YangNode curNode,
1203 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301204 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301205
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301206 String className =
1207 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1208 .getJavaName()) + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301209
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301210 TempJavaEventFragmentFiles tempFiles =
1211 ((TempJavaCodeFragmentFilesContainer) curNode)
1212 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301213
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301214 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301215 .getBaseCodeGenPath() +
1216 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1217 .getPackageFilePath();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301218 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1219 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301220 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301221 insertDataIntoJavaFile(file, getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301222 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1223 tempFiles, path),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301224 COMMA) + methodClose(FOUR_SPACE));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301225
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301226 insertDataIntoJavaFile(file,
1227 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1228 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301229 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301230 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301231 }
1232
1233 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1234 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301235 }
1236
1237 /**
1238 * Generates event listener file.
1239 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301240 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301241 * @param curNode current YANG node
1242 * @param imports imports for file
1243 * @throws IOException when fails to generate class file
1244 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301245 public static void generateEventListenerFile(File file, YangNode curNode,
1246 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301247 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301248
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301249 String className =
1250 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1251 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301252
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301253 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1254 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301255 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301256 validateLineLength(file);
1257 }
1258
1259 /**
1260 * Generates event subject's file.
1261 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301262 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301263 * @param curNode current YANG node
1264 * @throws IOException when fails to do IO exceptions
1265 */
1266 public static void generateEventSubjectFile(File file, YangNode curNode)
1267 throws IOException {
1268
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301269 String className =
1270 getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
1271 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301272
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301273 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1274 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301275
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301276 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301277 .getBaseCodeGenPath() +
1278 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1279 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301280
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301281 TempJavaEventFragmentFiles tempFiles =
1282 ((TempJavaCodeFragmentFilesContainer) curNode)
1283 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301284
1285 insertDataIntoJavaFile(file, NEW_LINE);
1286 try {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301287 insertDataIntoJavaFile(
1288 file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
1289 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301290
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301291 insertDataIntoJavaFile(
1292 file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
1293 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301294
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301295 insertDataIntoJavaFile(
1296 file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
1297 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301298 } catch (IOException e) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301299 throw new IOException(getErrorMsg(className, EVENT_CLASS));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301300 }
1301
1302 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1303 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301304 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301305
1306 /**
1307 * Returns error message string.
1308 *
1309 * @param className name of the class
1310 * @param fileType type of file
1311 * @return error message string
1312 */
1313 private static String getErrorMsg(String className, String fileType) {
1314 return "No data found in temporary java code fragment files for " +
1315 className + " while " + fileType + " file generation.";
1316 }
1317
1318 /**
1319 * Checks whether leaf is present in YANG leaves holder.
1320 *
1321 * @param holder holder of YANG leaves
1322 * @return true if leaves are present, false otherwise
1323 */
1324 private static boolean leavesPresent(YangLeavesHolder holder) {
1325 return holder.getListOfLeaf() != null &&
1326 !holder.getListOfLeaf().isEmpty() ||
1327 holder.getListOfLeafList() != null &&
1328 !holder.getListOfLeafList().isEmpty();
1329 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301330}