blob: d3df0dc8a9dd8b82dccfd3b28bb770246755c654 [file] [log] [blame]
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
19import java.io.File;
20import java.io.IOException;
Bharat saraswal022dae92016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +053022import java.util.List;
Bharat saraswale304c252016-08-16 20:56:20 +053023
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053024import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Bharat saraswale50edca2016-08-05 01:58:25 +053025import org.onosproject.yangutils.datamodel.YangCase;
Bharat saraswal8beac342016-08-04 02:00:03 +053026import org.onosproject.yangutils.datamodel.YangChoice;
Shankara-Huaweib7564772016-08-02 18:13:13 +053027import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053028import org.onosproject.yangutils.datamodel.YangEnumeration;
Shankara-Huaweia1039e52016-07-14 16:53:09 +053029import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswal039f59c2016-07-14 21:57:13 +053030import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053031import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +053032import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053033import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswal039f59c2016-07-14 21:57:13 +053034import org.onosproject.yangutils.datamodel.YangTypeDef;
Bharat saraswale50edca2016-08-05 01:58:25 +053035import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053036import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalaf413b82016-07-14 15:18:20 +053037import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswald14cbe82016-07-14 13:26:18 +053038import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S79a374b2016-04-30 21:09:15 +053039import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053040import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053041import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
42import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswal039f59c2016-07-14 21:57:13 +053043import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053044import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswal64e7e232016-07-14 23:33:55 +053045import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053046import org.onosproject.yangutils.utils.io.YangPluginConfig;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053047
Bharat saraswal748fc3c2016-09-06 16:38:20 +053048import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
49import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
52import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
54import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
55import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
56import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
57import 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;
83import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
84import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
85import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
86import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getQualifierInfoForCasesParent;
87import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
88import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
89import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
90import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
91import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributeForConstructor;
92import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationAttributes;
93import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeAttr;
94import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
95import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeForConstructor;
96import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen
97 .getYangAugmentedMapObjectForConstruct;
98import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
99import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumValueOfSchemaNameMethod;
106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForOperationType;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGettersForValueAndSelectLeaf;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumMethods;
119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationAttributesGetters;
122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForOperationType;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
126import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
127import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
128import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
129import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
130import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
131import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapImpl;
132import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoMapInterface;
133import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
134import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
135import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.processSubtreeFilteringInterface;
136import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
137import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
138 .getAugmentableSubTreeFiltering;
139import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
140 .getProcessChildNodeSubtreeFiltering;
141import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
142 .getProcessLeafListSubtreeFiltering;
143import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
144 .getProcessLeafSubtreeFiltering;
145import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
146 .getProcessSubTreeFilteringEnd;
147import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
148 .getProcessSubtreeFilteringStart;
149import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator
150 .getProcessSubtreeFunctionBody;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530151import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530152import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530153import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
154import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530155import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530156import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530157import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530158import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal84366c52016-03-23 19:40:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530160import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530161import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530162import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530163import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
164import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530165import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530166import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal84366c52016-03-23 19:40:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530168import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530169import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530170import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530171import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
172import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530173import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530174import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530175import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530176import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530177import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530178import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530179import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530180import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
181import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530182import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
183import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530184import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530185import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
186import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Gaurav Agrawal8a147522016-08-10 13:43:01 +0530187import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530188import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530189import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
190
Bharat saraswal64e7e232016-07-14 23:33:55 +0530191import static java.util.Collections.sort;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530192
Vinod Kumar S08710982016-03-03 19:55:30 +0530193/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530194 * Representation of java file generator.
Vinod Kumar S08710982016-03-03 19:55:30 +0530195 */
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530196public final class JavaFileGenerator {
197
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530198 private JavaFileGenerator() {
199 }
200
201 /**
202 * Returns generated interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530203 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530204 * @param file file
205 * @param imports imports for the file
206 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530207 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530208 * @return interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530209 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530210 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530211 public static File generateInterfaceFile(File file, List<String> imports,
212 YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530213 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530214 throws IOException {
Vinod Kumar S08710982016-03-03 19:55:30 +0530215
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530216 JavaFileInfoTranslator javaFileInfo =
217 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530218
219 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530220 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530221 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
222 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530223 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530224 path = javaFileInfo.getBaseCodeGenPath() +
225 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530226 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530227
janani b703cfe42016-05-17 13:12:22 +0530228 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530229
Bharat saraswal8beac342016-08-04 02:00:03 +0530230 boolean isLeavesPresent;
231 YangLeavesHolder leavesHolder;
232 if (curNode instanceof YangLeavesHolder) {
233 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530234 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
235 !leavesHolder.getListOfLeaf().isEmpty()
236 || leavesHolder.getListOfLeafList() != null &&
237 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530238 } else {
239 isLeavesPresent = false;
240 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530241
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530242 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
243 className);
Bharat saraswal8beac342016-08-04 02:00:03 +0530244 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530245 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530246 // Add getter methods to interface file.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530247 try {
Bharat saraswal8beac342016-08-04 02:00:03 +0530248 //Leaf identifier enum.
249 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530250 insertDataIntoJavaFile(file, NEW_LINE +
251 getInterfaceLeafIdEnumSignature(className) +
252 NEW_LINE +
253 trimAtLast(replaceLast(getDataFromTempFileHandle(
254 LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
255 ((TempJavaCodeFragmentFilesContainer)
256 curNode)
257 .getTempJavaCodeFragmentFiles()
258 .getBeanTempFiles(), path),
259 COMMA, SEMI_COLAN),
260 NEW_LINE) +
261 NEW_LINE + NEW_LINE +
262 getInterfaceLeafIdEnumMethods());
Bharat saraswal8beac342016-08-04 02:00:03 +0530263 }
264
Bharat saraswal64e7e232016-07-14 23:33:55 +0530265 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530266 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
267 GETTER_FOR_INTERFACE_MASK,
268 ((TempJavaCodeFragmentFilesContainer) curNode)
269 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530270 .getBeanTempFiles(), path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530271 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530272 throw new IOException(
273 "No data found in temporary java code fragment files " +
274 "for " +
275 className
276 + " while interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530277 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530278 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530279
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530280 if (curNode instanceof YangAugmentableNode &&
281 !(curNode instanceof YangChoice)) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530282 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530283 methods.add(getYangAugmentInfoMapInterface(
284 javaFileInfo.getPluginConfig()));
Bharat saraswal8beac342016-08-04 02:00:03 +0530285 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530286
Bharat saraswale50edca2016-08-05 01:58:25 +0530287 if (curNode instanceof YangCase) {
288 YangNode caseParent = curNode.getParent();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530289 JavaQualifiedTypeInfo qualifiedTypeInfo =
290 getQualifierInfoForCasesParent(caseParent,
291 javaFileInfo
292 .getPluginConfig());
293 methods.add(NEW_LINE + processSubtreeFilteringInterface
294 (qualifiedTypeInfo.getClassInfo()));
Bharat saraswale50edca2016-08-05 01:58:25 +0530295 } else {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530296 methods.add(NEW_LINE + processSubtreeFilteringInterface(className));
Bharat saraswal8beac342016-08-04 02:00:03 +0530297 }
Bharat saraswale50edca2016-08-05 01:58:25 +0530298
299 if (isLeavesPresent) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530300 methods.add(NEW_LINE + isLeafValueSetInterface());
301 methods.add(NEW_LINE + isSelectLeafSetInterface());
302 }
303 for (String method : methods) {
304 insertDataIntoJavaFile(file, method);
305 }
Bharat saraswale304c252016-08-16 20:56:20 +0530306 return file;
Bharat saraswal8beac342016-08-04 02:00:03 +0530307
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530308 }
309
310 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530311 * Returns generated builder interface file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530312 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530313 * @param file file
314 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530315 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530316 * @return builder interface file
Vinod Kumar S08710982016-03-03 19:55:30 +0530317 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530318 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530319 public static File generateBuilderInterfaceFile(File file, YangNode curNode,
320 boolean isAttrPresent)
Bharat saraswald532a4c2016-03-25 18:19:46 +0530321 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530322
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530323 JavaFileInfoTranslator javaFileInfo =
324 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530325 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530326
Bharat saraswal8beac342016-08-04 02:00:03 +0530327 boolean isLeavesPresent;
328 YangLeavesHolder leavesHolder;
329 if (curNode instanceof YangLeavesHolder) {
330 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530331 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
332 !leavesHolder.getListOfLeaf().isEmpty()
333 || leavesHolder.getListOfLeafList() != null &&
334 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530335 } else {
336 isLeavesPresent = false;
337 }
338
janani b703cfe42016-05-17 13:12:22 +0530339 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal039f59c2016-07-14 21:57:13 +0530340 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530341 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530342 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
343 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530344 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530345 path = javaFileInfo.getBaseCodeGenPath() +
346 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530347 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530348
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530349 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
350 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530351 List<String> methods = new ArrayList<>();
Bharat saraswald532a4c2016-03-25 18:19:46 +0530352 if (isAttrPresent) {
353 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530354
355 //Getter methods.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530356 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
357 GETTER_FOR_INTERFACE_MASK,
358 ((TempJavaCodeFragmentFilesContainer)
359 curNode)
360 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530361 .getBeanTempFiles(), path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530362
363 //Setter methods.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530364 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530365 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(
366 SETTER_FOR_INTERFACE_MASK,
367 ((TempJavaCodeFragmentFilesContainer)
368 curNode)
369 .getTempJavaCodeFragmentFiles()
Bharat saraswald14cbe82016-07-14 13:26:18 +0530370 .getBeanTempFiles(), path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530371
372 //Add to list method.
373 methods.add(NEW_LINE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530374 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
375 ADD_TO_LIST_INTERFACE_MASK,
376 ((TempJavaCodeFragmentFilesContainer) curNode)
377 .getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530378 .getBeanTempFiles(), path));
379
Bharat saraswald532a4c2016-03-25 18:19:46 +0530380 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530381 throw new IOException(
382 "No data found in temporary java code fragment files " +
383 "for " +
384 className
385 + " while builder interface file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530386 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530387 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530388
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530389 if (curNode instanceof YangAugmentableNode &&
390 !(curNode instanceof YangChoice)) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530391 methods.add(getAddAugmentInfoMethodInterface());
392 methods.add(getYangAugmentInfoInterface());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530393 methods.add(getYangAugmentInfoMapInterface(
394 javaFileInfo.getPluginConfig()));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530395 }
396
Bharat saraswal8beac342016-08-04 02:00:03 +0530397 if (isLeavesPresent) {
398 methods.add(NEW_LINE + setSelectLeafSetInterface(className));
399 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530400 //Add build method to builder interface file.
Bharat saraswal84366c52016-03-23 19:40:35 +0530401 methods.add(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530402 ((TempJavaCodeFragmentFilesContainer) curNode)
403 .getTempJavaCodeFragmentFiles()
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530404 .addBuildMethodForInterface(pluginConfig));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530405
Bharat saraswal64e7e232016-07-14 23:33:55 +0530406
407 //Add getters and setters in builder interface.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530408 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530409 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530410 }
411
Bharat saraswal84366c52016-03-23 19:40:35 +0530412 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswale304c252016-08-16 20:56:20 +0530413 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530414 }
415
416 /**
417 * Returns generated builder class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530418 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530419 * @param file file
420 * @param curNode current YANG node
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530421 * @param isAttrPresent if any attribute is present or not
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530422 * @return builder class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530423 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530424 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530425
Bharat saraswald14cbe82016-07-14 13:26:18 +0530426 public static File generateBuilderClassFile(File file, YangNode curNode,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530427 boolean isAttrPresent)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530428 throws IOException {
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530429
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530430 JavaFileInfoTranslator javaFileInfo =
431 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530432 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530433
Bharat saraswal8beac342016-08-04 02:00:03 +0530434 boolean isLeavesPresent;
435 YangLeavesHolder leavesHolder;
436 if (curNode instanceof YangLeavesHolder) {
437 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530438 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
439 !leavesHolder.getListOfLeaf().isEmpty()
440 || leavesHolder.getListOfLeafList() != null &&
441 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530442 } else {
443 isLeavesPresent = false;
444 }
Bharat saraswal039f59c2016-07-14 21:57:13 +0530445
Bharat saraswal8beac342016-08-04 02:00:03 +0530446 String className = getCapitalCase(javaFileInfo.getJavaName());
447 boolean isRootNode = false;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530448 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530449 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530450 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530451 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
452 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530453 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530454 path = javaFileInfo.getBaseCodeGenPath() +
455 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530456 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530457
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530458 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
459 className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530460 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530461
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530462 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530463 insertDataIntoJavaFile(file, addAugmentationAttribute());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530464 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530465 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530466
467 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530468 try {
469 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530470 NEW_LINE + FOUR_SPACE_INDENTATION +
471 getDataFromTempFileHandle(
472 ATTRIBUTES_MASK,
473 ((TempJavaCodeFragmentFilesContainer) curNode)
474 .getTempJavaCodeFragmentFiles()
475 .getBeanTempFiles(),
476 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530477 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530478 throw new IOException(
479 "No data found in temporary java code fragment files " +
480 "for " + className +
481 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530482 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530483
Bharat saraswal8beac342016-08-04 02:00:03 +0530484 insertDataIntoJavaFile(file, getOperationTypeAttr());
485 if (isLeavesPresent) {
486 insertDataIntoJavaFile(file, getOperationAttributes());
487 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530488 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530489 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530490 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530491 ((TempJavaCodeFragmentFilesContainer) curNode)
492 .getTempJavaCodeFragmentFiles()
493 .getBeanTempFiles(),
494 path));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530495 // Setter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530496 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530497 ((TempJavaCodeFragmentFilesContainer) curNode)
498 .getTempJavaCodeFragmentFiles()
499 .getBeanTempFiles(),
500 path));
Bharat saraswald14cbe82016-07-14 13:26:18 +0530501
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530502 //Add to list impl method.
503 methods.add(getDataFromTempFileHandle(ADD_TO_LIST_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530504 ((TempJavaCodeFragmentFilesContainer) curNode)
505 .getTempJavaCodeFragmentFiles()
506 .getBeanTempFiles(),
507 path));
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530508
Bharat saraswald14cbe82016-07-14 13:26:18 +0530509 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530510
511 methods.add(getGetterForOperationType());
512 methods.add(getSetterForOperationType(className));
513 //Add operation attribute methods.
514 if (isLeavesPresent) {
515 methods.add(getOperationAttributesGetters() + NEW_LINE);
516 methods.add(getSetterForSelectLeaf(className, isRootNode));
517 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530518 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530519 throw new IOException(
520 "No data found in temporary java code fragment files " +
521 "for " + className +
522 " while builder class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530523 }
524 } else {
525 insertDataIntoJavaFile(file, NEW_LINE);
526 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530527
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530528 if (curNode instanceof YangAugmentableNode) {
529 methods.add(getAddAugmentInfoMethodImpl());
530 methods.add(getYangAugmentInfoImpl());
531 methods.add(getYangAugmentInfoMapImpl());
532 }
533
Bharat saraswal64e7e232016-07-14 23:33:55 +0530534 // Add default constructor and build method impl.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530535 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
536 .getTempJavaCodeFragmentFiles()
537 .addBuildMethodImpl(curNode));
538 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
539 .getTempJavaCodeFragmentFiles()
540 .addDefaultConstructor(PUBLIC, BUILDER,
541 pluginConfig, curNode));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530542
Bharat saraswal64e7e232016-07-14 23:33:55 +0530543
544 //Add methods in builder class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530545 for (String method : methods) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530546 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530547 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530548
Bharat saraswald14cbe82016-07-14 13:26:18 +0530549 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswale304c252016-08-16 20:56:20 +0530550 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530551 }
552
553 /**
Bharat saraswal8beac342016-08-04 02:00:03 +0530554 * Returns generated default class file for current node.
Vinod Kumar S08710982016-03-03 19:55:30 +0530555 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530556 * @param file file
557 * @param curNode current YANG node
Bharat saraswald532a4c2016-03-25 18:19:46 +0530558 * @param isAttrPresent if any attribute is present or not
Bharat saraswald14cbe82016-07-14 13:26:18 +0530559 * @param imports list of imports
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530560 * @return impl class file
Vinod Kumar S08710982016-03-03 19:55:30 +0530561 * @throws IOException when fails to write in file
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530562 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530563 public static File generateDefaultClassFile(File file, YangNode curNode,
564 boolean isAttrPresent,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530565 List<String> imports)
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530566 throws IOException {
567
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530568 JavaFileInfoTranslator javaFileInfo =
569 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530570 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530571
Bharat saraswal8beac342016-08-04 02:00:03 +0530572 boolean isLeavesPresent;
573 YangLeavesHolder leavesHolder;
574 if (curNode instanceof YangLeavesHolder) {
575 leavesHolder = (YangLeavesHolder) curNode;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530576 isLeavesPresent = leavesHolder.getListOfLeaf() != null &&
577 !leavesHolder.getListOfLeaf().isEmpty() ||
578 leavesHolder.getListOfLeafList() != null &&
579 !leavesHolder.getListOfLeafList().isEmpty();
Bharat saraswal8beac342016-08-04 02:00:03 +0530580 } else {
581 isLeavesPresent = false;
582 }
583
584 boolean isRootNode = false;
585
janani b703cfe42016-05-17 13:12:22 +0530586 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal8beac342016-08-04 02:00:03 +0530587 String opParamClassName = className;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530588 String path;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530589 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530590 opParamClassName = className + OP_PARAM;
591 isRootNode = true;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530592 path = javaFileInfo.getPluginConfig().getCodeGenDir() +
593 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530594 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530595 path = javaFileInfo.getBaseCodeGenPath() +
596 javaFileInfo.getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +0530597 }
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530598
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530599 initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
600 className);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530601
Bharat saraswal022dae92016-03-04 20:08:09 +0530602 List<String> methods = new ArrayList<>();
Bharat saraswalaf413b82016-07-14 15:18:20 +0530603 if (curNode instanceof YangAugmentableNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530604 insertDataIntoJavaFile(file, addAugmentationAttribute());
Bharat saraswalaf413b82016-07-14 15:18:20 +0530605 }
Bharat saraswald532a4c2016-03-25 18:19:46 +0530606 if (isAttrPresent) {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530607
608 //Add attribute strings.
Bharat saraswald532a4c2016-03-25 18:19:46 +0530609 try {
610 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530611 NEW_LINE + FOUR_SPACE_INDENTATION +
612 getDataFromTempFileHandle(
613 ATTRIBUTES_MASK,
614 ((TempJavaCodeFragmentFilesContainer) curNode)
615 .getTempJavaCodeFragmentFiles()
616 .getBeanTempFiles(),
617 path));
Bharat saraswald532a4c2016-03-25 18:19:46 +0530618 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530619 throw new IOException(
620 "No data found in temporary java code fragment files " +
621 "for " + className +
622 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530623 }
Bharat saraswal5600f0f2016-03-09 18:34:56 +0530624
Bharat saraswal8beac342016-08-04 02:00:03 +0530625 //Add operation attributes
626 insertDataIntoJavaFile(file, getOperationTypeEnum());
627 insertDataIntoJavaFile(file, getOperationTypeAttr());
628 if (isLeavesPresent) {
629 insertDataIntoJavaFile(file, getOperationAttributes());
630 }
631
Bharat saraswald532a4c2016-03-25 18:19:46 +0530632 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530633 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530634 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530635 ((TempJavaCodeFragmentFilesContainer) curNode)
636 .getTempJavaCodeFragmentFiles()
637 .getBeanTempFiles(),
638 path));
639
640 methods.add(getGetterForOperationType());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530641
Bharat saraswal64e7e232016-07-14 23:33:55 +0530642 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530643 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530644 getDataFromTempFileHandle(
645 HASH_CODE_IMPL_MASK,
646 ((TempJavaCodeFragmentFilesContainer) curNode)
647 .getTempJavaCodeFragmentFiles()
648 .getBeanTempFiles(),
649 path)
650 .replace(
651 NEW_LINE,
652 EMPTY_STRING)));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530653
654 //Equals method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530655 if (isRootNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530656 methods.add(getEqualsMethodClose(
657 getEqualsMethodOpen(opParamClassName) +
658 getDataFromTempFileHandle(EQUALS_IMPL_MASK,
659 ((TempJavaCodeFragmentFilesContainer) curNode)
660 .getTempJavaCodeFragmentFiles()
661 .getBeanTempFiles(),
662 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530663 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530664 methods.add(getEqualsMethodClose(getEqualsMethodOpen(
665 getCapitalCase(DEFAULT) + className) +
666 getDataFromTempFileHandle(
667 EQUALS_IMPL_MASK,
668 ((TempJavaCodeFragmentFilesContainer) curNode)
669 .getTempJavaCodeFragmentFiles()
670 .getBeanTempFiles(),
671 path)));
Bharat saraswal8beac342016-08-04 02:00:03 +0530672 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530673 // To string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530674 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
675 TO_STRING_IMPL_MASK,
676 ((TempJavaCodeFragmentFilesContainer)
677 curNode)
678 .getTempJavaCodeFragmentFiles()
679 .getBeanTempFiles(), path) +
680 getToStringMethodClose());
Bharat saraswald532a4c2016-03-25 18:19:46 +0530681
Bharat saraswale50edca2016-08-05 01:58:25 +0530682
Bharat saraswald532a4c2016-03-25 18:19:46 +0530683 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530684 throw new IOException(
685 "No data found in temporary java code fragment files " +
686 "for " + className +
687 " while impl class file generation");
Bharat saraswald532a4c2016-03-25 18:19:46 +0530688 }
689 } else {
690 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530691 }
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530692
Bharat saraswal8beac342016-08-04 02:00:03 +0530693 if (curNode instanceof YangAugmentableNode) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530694 methods.add(getYangAugmentInfoImpl());
695 methods.add(getYangAugmentInfoMapImpl());
696 }
697 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +0530698 //Constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530699 String constructor =
700 getConstructorStart(className, pluginConfig, isRootNode);
701 constructor = constructor +
702 getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
703 ((TempJavaCodeFragmentFilesContainer) curNode)
704 .getTempJavaCodeFragmentFiles()
705 .getBeanTempFiles(),
706 path);
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530707
Bharat saraswal8beac342016-08-04 02:00:03 +0530708 if (isAttrPresent) {
709 constructor = constructor + getOperationTypeForConstructor();
710 }
711 if (isLeavesPresent) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530712 constructor =
713 constructor + getOperationAttributeForConstructor();
Bharat saraswal8beac342016-08-04 02:00:03 +0530714 }
Bharat saraswale3175d32016-08-31 17:50:11 +0530715 if (curNode instanceof YangAugmentableNode) {
716 constructor = constructor + getYangAugmentedMapObjectForConstruct();
717 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530718 methods.add(
719 constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
720 NEW_LINE);
Bharat saraswale50edca2016-08-05 01:58:25 +0530721
722 // add is filter content match.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530723 String augmentableSubTreeFiltering = "";
724 if (curNode instanceof YangAugmentableNode) {
725 augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
726 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530727
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530728 methods.add(getProcessSubtreeFilteringStart(curNode, pluginConfig)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530729 + getProcessSubtreeFunctionBody(curNode)
730 + augmentableSubTreeFiltering
731 + getProcessSubTreeFilteringEnd());
732
733 if (curNode instanceof YangLeavesHolder) {
734 if (((YangLeavesHolder) curNode).getListOfLeaf() != null
735 && !((YangLeavesHolder) curNode).getListOfLeaf()
736 .isEmpty()) {
737 methods.add(getProcessLeafSubtreeFiltering(curNode,
738 pluginConfig,
739 path));
740 }
741 }
742
743
744 if (curNode instanceof YangLeavesHolder) {
745 if (((YangLeavesHolder) curNode).getListOfLeafList() != null
746 && !((YangLeavesHolder) curNode).getListOfLeafList()
747 .isEmpty()) {
748 methods.add(getProcessLeafListSubtreeFiltering(curNode,
749 pluginConfig,
750 path));
751 }
752 }
753
754 if (curNode.getChild() != null) {
755 methods.add(getProcessChildNodeSubtreeFiltering(curNode,
756 pluginConfig,
757 path));
758 }
759
760
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530761 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530762 throw new IOException(
763 "No data found in temporary java code fragment files for " +
764 className + " while impl class file generation");
Vinod Kumar S08710982016-03-03 19:55:30 +0530765 }
Bharat saraswale2bc60d2016-04-16 02:28:25 +0530766
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530767 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
768 .getTempJavaCodeFragmentFiles()
769 .addDefaultConstructor(PROTECTED, DEFAULT,
770 pluginConfig, curNode));
Bharat saraswalaf413b82016-07-14 15:18:20 +0530771
Bharat saraswale50edca2016-08-05 01:58:25 +0530772 methods.add(builderMethod(className) + NEW_LINE);
Bharat saraswal8beac342016-08-04 02:00:03 +0530773 if (isLeavesPresent) {
774 methods.add(getOperationAttributesGetters());
775 methods.add(getGettersForValueAndSelectLeaf());
776 }
Bharat saraswal64e7e232016-07-14 23:33:55 +0530777 // Add methods in impl class.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530778 for (String method : methods) {
Bharat saraswald14cbe82016-07-14 13:26:18 +0530779 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530780 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530781
Bharat saraswale304c252016-08-16 20:56:20 +0530782 return file;
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530783 }
784
785 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530786 * Generates class file for type def.
Bharat saraswal022dae92016-03-04 20:08:09 +0530787 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530788 * @param file generated file
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530789 * @param curNode current YANG node
Bharat saraswal84366c52016-03-23 19:40:35 +0530790 * @param imports imports for file
791 * @return type def class file
792 * @throws IOException when fails to generate class file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530793 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530794 public static File generateTypeDefClassFile(File file, YangNode curNode,
795 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530796 throws IOException {
Bharat saraswal022dae92016-03-04 20:08:09 +0530797
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530798 JavaFileInfoTranslator javaFileInfo =
799 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530800 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530801
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530802 // import
janani b703cfe42016-05-17 13:12:22 +0530803 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530804 String path = javaFileInfo.getBaseCodeGenPath() +
805 javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530806 YangTypeDef typeDef = (YangTypeDef) curNode;
807 List<YangType<?>> types = typeDef.getTypeList();
808 YangType type = types.get(0);
Shankara-Huaweib7564772016-08-02 18:13:13 +0530809 YangDataTypes yangDataTypes = type.getDataType();
Bharat saraswal022dae92016-03-04 20:08:09 +0530810
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530811 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
812 imports, path, pluginConfig);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530813
Bharat saraswal84366c52016-03-23 19:40:35 +0530814 List<String> methods = new ArrayList<>();
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530815
Bharat saraswal64e7e232016-07-14 23:33:55 +0530816
817 //Add attribute strings.
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530818 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530819 insertDataIntoJavaFile(file, NEW_LINE + FOUR_SPACE_INDENTATION +
820 getDataFromTempFileHandle(ATTRIBUTES_MASK,
821 ((TempJavaCodeFragmentFilesContainer) curNode)
822 .getTempJavaCodeFragmentFiles()
823 .getTypeTempFiles(),
824 path));
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530825 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530826 throw new IOException(
827 "No data found in temporary java code fragment files for " +
828 className + " while type def class file " +
829 "generation");
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530830 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530831
Bharat saraswal64e7e232016-07-14 23:33:55 +0530832
833 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530834 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
835 .getTempJavaCodeFragmentFiles()
836 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
837 pluginConfig, curNode));
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530838
Bharat saraswal022dae92016-03-04 20:08:09 +0530839 try {
Bharat saraswal84366c52016-03-23 19:40:35 +0530840
Bharat saraswal64e7e232016-07-14 23:33:55 +0530841 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530842 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530843 ((TempJavaCodeFragmentFilesContainer) curNode)
844 .getTempJavaCodeFragmentFiles()
845 .getTypeTempFiles(),
846 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530847
Bharat saraswal64e7e232016-07-14 23:33:55 +0530848
849 //Of method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530850 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530851 ((TempJavaCodeFragmentFilesContainer) curNode)
852 .getTempJavaCodeFragmentFiles()
853 .getTypeTempFiles(),
854 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530855
Bharat saraswal64e7e232016-07-14 23:33:55 +0530856 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530857 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530858 ((TempJavaCodeFragmentFilesContainer) curNode)
859 .getTempJavaCodeFragmentFiles()
860 .getTypeTempFiles(),
861 path));
Bharat saraswal84366c52016-03-23 19:40:35 +0530862
Bharat saraswal64e7e232016-07-14 23:33:55 +0530863 // Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530864 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530865 getDataFromTempFileHandle(
866 HASH_CODE_IMPL_MASK,
867 ((TempJavaCodeFragmentFilesContainer) curNode)
868 .getTempJavaCodeFragmentFiles()
869 .getTypeTempFiles(),
870 path)
871 .replace(
872 NEW_LINE,
873 EMPTY_STRING)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530874
Bharat saraswal64e7e232016-07-14 23:33:55 +0530875
876 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530877 methods.add(getEqualsMethodClose(
878 getEqualsMethodOpen(className + EMPTY_STRING)
879 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
880 ((TempJavaCodeFragmentFilesContainer) curNode)
881 .getTempJavaCodeFragmentFiles()
882 .getTypeTempFiles(),
883 path)));
Bharat saraswal84366c52016-03-23 19:40:35 +0530884
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530885
Bharat saraswal64e7e232016-07-14 23:33:55 +0530886 //To string method.
Bharat saraswal8beac342016-08-04 02:00:03 +0530887 if (type.getDataType().equals(BINARY)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530888 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
889 getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase(
890 "binary"));
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530891
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530892 JavaAttributeInfo attr =
893 getAttributeInfoForTheData(qualifiedTypeInfo, "binary",
894 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530895 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530896 String bitsToStringMethod =
897 getOverRideString() + FOUR_SPACE_INDENTATION +
898 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
899 STRING_DATA_TYPE + OPEN_PARENTHESIS +
900 CLOSE_PARENTHESIS + SPACE +
901 OPEN_CURLY_BRACKET + NEW_LINE +
902 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
903 BASE64 + PERIOD + GET_ENCODER +
904 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
905 PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS +
906 attributeName + CLOSE_PARENTHESIS +
907 SEMI_COLAN + NEW_LINE +
908 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
909 NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530910 methods.add(bitsToStringMethod);
Bharat saraswal8beac342016-08-04 02:00:03 +0530911 } else if (type.getDataType().equals(BITS)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530912 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
913 getQualifiedTypeInfoOfCurNode(curNode,
914 getCapitalCase(
915 "bits"));
Bharat saraswal64e7e232016-07-14 23:33:55 +0530916
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530917 JavaAttributeInfo attr =
918 getAttributeInfoForTheData(qualifiedTypeInfo, "bits",
919 null, false, false);
Bharat saraswal64e7e232016-07-14 23:33:55 +0530920 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530921 String bitsToStringMethod =
922 getOverRideString() + FOUR_SPACE_INDENTATION +
923 PUBLIC + SPACE + STRING_DATA_TYPE + SPACE + TO +
924 STRING_DATA_TYPE + OPEN_PARENTHESIS +
925 CLOSE_PARENTHESIS + SPACE +
926 OPEN_CURLY_BRACKET + NEW_LINE +
927 EIGHT_SPACE_INDENTATION + RETURN + SPACE +
928 attributeName + PERIOD + TO +
929 STRING_DATA_TYPE + OPEN_PARENTHESIS +
930 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
931 FOUR_SPACE_INDENTATION +
932 CLOSE_CURLY_BRACKET + NEW_LINE;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530933 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530934 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530935 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
936 TO_STRING_IMPL_MASK,
937 ((TempJavaCodeFragmentFilesContainer)
938 curNode)
939 .getTempJavaCodeFragmentFiles()
940 .getTypeTempFiles(), path) +
941 getToStringMethodClose());
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530942 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530943
Bharat saraswal64e7e232016-07-14 23:33:55 +0530944 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
945
Bharat saraswal8beac342016-08-04 02:00:03 +0530946 //From string method.
Shankara-Huaweib7564772016-08-02 18:13:13 +0530947 if ((type.getDataType().equals(YangDataTypes.DERIVED))
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530948 && (((YangDerivedInfo) type.getDataTypeExtendedInfo())
949 .getEffectiveBuiltInType()
Shankara-Huaweib7564772016-08-02 18:13:13 +0530950 .equals(YangDataTypes.IDENTITYREF))) {
951 yangDataTypes = YangDataTypes.IDENTITYREF;
952 }
953
954 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
955 yangDataTypes = YangDataTypes.IDENTITYREF;
956 }
957
958 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530959 methods.add(
960 getFromStringMethodSignature(className, pluginConfig) +
961 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
962 javaGenInfo
963 .getTempJavaCodeFragmentFiles()
964 .getTypeTempFiles(),
965 path) +
966 getFromStringMethodClose());
Shankara-Huaweib7564772016-08-02 18:13:13 +0530967 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530968
Bharat saraswal022dae92016-03-04 20:08:09 +0530969 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530970 throw new IOException(
971 "No data found in temporary java code fragment files for " +
972 className + " while type def class file " +
973 "generation");
Bharat saraswal022dae92016-03-04 20:08:09 +0530974 }
Bharat saraswal022dae92016-03-04 20:08:09 +0530975
Bharat saraswal84366c52016-03-23 19:40:35 +0530976 for (String method : methods) {
977 insertDataIntoJavaFile(file, method);
Bharat saraswalc46ee2a2016-02-25 02:26:43 +0530978 }
Bharat saraswal84366c52016-03-23 19:40:35 +0530979 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530980
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530981 return validateLineLength(file);
Bharat saraswal022dae92016-03-04 20:08:09 +0530982 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530983
984 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +0530985 * Generates class file for union type.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530986 *
Bharat saraswald14cbe82016-07-14 13:26:18 +0530987 * @param file generated file
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530988 * @param curNode current YANG node
989 * @param imports imports for file
990 * @return type def class file
991 * @throws IOException when fails to generate class file
992 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530993 public static File generateUnionClassFile(File file, YangNode curNode,
994 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +0530995 throws IOException {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530996
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530997 JavaFileInfoTranslator javaFileInfo =
998 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +0530999 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301000
janani b703cfe42016-05-17 13:12:22 +05301001 String className = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301002 String path = javaFileInfo.getBaseCodeGenPath() +
1003 javaFileInfo.getPackageFilePath();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301004
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301005 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles =
1006 ((JavaCodeGeneratorInfo) curNode)
1007 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301008
1009 boolean isIntConflict = false;
1010 boolean isLongConflict = false;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301011 boolean isShortConflict = false;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301012 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
1013 if (intAttr == null) {
1014 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
1015 }
1016
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301017 JavaAttributeInfo longAttr =
1018 tempJavaTypeFragmentFiles.getLongAttribute();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301019 if (longAttr == null) {
1020 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
1021 }
1022
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301023 JavaAttributeInfo shortAttr =
1024 tempJavaTypeFragmentFiles.getShortAttribute();
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301025 if (shortAttr == null) {
1026 shortAttr = tempJavaTypeFragmentFiles.getUInt8Attribute();
1027 }
1028
Bharat saraswal64e7e232016-07-14 23:33:55 +05301029 if (intAttr != null) {
1030 isIntConflict = intAttr.isIntConflict();
1031 }
1032 if (longAttr != null) {
1033 isLongConflict = longAttr.isLongConflict();
1034 }
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301035 if (shortAttr != null) {
1036 isShortConflict = shortAttr.isShortConflict();
1037 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301038 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301039 imports.add(tempJavaTypeFragmentFiles.getJavaImportData()
1040 .getBigIntegerImport());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301041 sort(imports);
1042 }
1043
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301044 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
1045 imports, path, pluginConfig);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301046
1047 List<String> methods = new ArrayList<>();
1048
Bharat saraswal64e7e232016-07-14 23:33:55 +05301049
1050 // Add attribute strings.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301051 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301052 if (isIntConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301053 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1054 .addStaticAttributeIntRange(PRIVATE,
1055 tempJavaTypeFragmentFiles
1056 .getIntIndex() <
1057 tempJavaTypeFragmentFiles
1058 .getUIntIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301059 }
1060
1061 if (isLongConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301062 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1063 .addStaticAttributeLongRange(PRIVATE,
1064 tempJavaTypeFragmentFiles
1065 .getLongIndex() <
1066 tempJavaTypeFragmentFiles
1067 .getULongIndex()));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301068 }
1069
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301070 if (isShortConflict) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301071 insertDataIntoJavaFile(file, JavaCodeSnippetGen
1072 .addStaticAttributeShortRange(PRIVATE,
1073 tempJavaTypeFragmentFiles
1074 .getShortIndex() <
1075 tempJavaTypeFragmentFiles
1076 .getUInt8Index()));
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301077 }
1078
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301079 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301080 NEW_LINE + FOUR_SPACE_INDENTATION +
1081 getDataFromTempFileHandle(
1082 ATTRIBUTES_MASK,
1083 ((TempJavaCodeFragmentFilesContainer) curNode)
1084 .getTempJavaCodeFragmentFiles()
1085 .getTypeTempFiles(),
1086 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301087 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301088 throw new IOException(
1089 "No data found in temporary java code fragment files for " +
1090 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301091 }
1092
Bharat saraswal64e7e232016-07-14 23:33:55 +05301093
1094 //Default constructor.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301095 methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
1096 .getTempJavaCodeFragmentFiles()
1097 .addDefaultConstructor(PRIVATE, EMPTY_STRING,
1098 pluginConfig, curNode));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301099
1100 try {
1101
Bharat saraswal64e7e232016-07-14 23:33:55 +05301102
1103 //Type constructor.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301104 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301105 ((TempJavaCodeFragmentFilesContainer) curNode)
1106 .getTempJavaCodeFragmentFiles()
1107 .getTypeTempFiles(),
1108 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301109
Bharat saraswal64e7e232016-07-14 23:33:55 +05301110
1111 // Of string method.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301112 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301113 ((TempJavaCodeFragmentFilesContainer) curNode)
1114 .getTempJavaCodeFragmentFiles()
1115 .getTypeTempFiles(),
1116 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301117
Bharat saraswal64e7e232016-07-14 23:33:55 +05301118 //Getter methods.
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301119 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301120 ((TempJavaCodeFragmentFilesContainer) curNode)
1121 .getTempJavaCodeFragmentFiles()
1122 .getTypeTempFiles(),
1123 path));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301124
Bharat saraswal64e7e232016-07-14 23:33:55 +05301125
1126 //Hash code method.
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301127 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301128 getDataFromTempFileHandle(
1129 HASH_CODE_IMPL_MASK,
1130 ((TempJavaCodeFragmentFilesContainer) curNode)
1131 .getTempJavaCodeFragmentFiles()
1132 .getTypeTempFiles(),
1133 path).replace(
1134 NEW_LINE,
1135 EMPTY_STRING)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301136
Bharat saraswal64e7e232016-07-14 23:33:55 +05301137 //Equals method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301138 methods.add(getEqualsMethodClose(
1139 getEqualsMethodOpen(className + EMPTY_STRING)
1140 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
1141 ((TempJavaCodeFragmentFilesContainer) curNode)
1142 .getTempJavaCodeFragmentFiles()
1143 .getTypeTempFiles(),
1144 path)));
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301145
Bharat saraswal64e7e232016-07-14 23:33:55 +05301146
1147 //To string method.
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301148 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301149 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1150 ((TempJavaCodeFragmentFilesContainer) curNode)
1151 .getTempJavaCodeFragmentFiles()
1152 .getTypeTempFiles(),
1153 path) +
1154 getToStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301155
Bharat saraswal64e7e232016-07-14 23:33:55 +05301156
1157 //From string method.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301158 methods.add(getFromStringMethodSignature(className, pluginConfig) +
1159 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1160 ((TempJavaCodeFragmentFilesContainer) curNode)
1161 .getTempJavaCodeFragmentFiles()
1162 .getTypeTempFiles(),
1163 path) +
1164 getFromStringMethodClose());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301165
Bharat saraswal64e7e232016-07-14 23:33:55 +05301166 if (isIntConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301167 methods.add(getRangeValidatorMethodForUnion(INT));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301168 }
1169 if (isLongConflict) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301170 methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301171 }
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301172 if (isShortConflict && !isIntConflict) {
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301173 methods.add(getRangeValidatorMethodForUnion(INT));
1174 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301175
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301176 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301177 throw new IOException(
1178 "No data found in temporary java code fragment files for " +
1179 className + " while union class file generation");
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301180 }
1181
1182 for (String method : methods) {
1183 insertDataIntoJavaFile(file, method);
1184 }
1185 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1186
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301187 return validateLineLength(file);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301188 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301189
1190 /**
1191 * Generates class file for type enum.
1192 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301193 * @param file generated file
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301194 * @param curNode current YANG node
1195 * @return class file for type enum
1196 * @throws IOException when fails to generate class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301197 */
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301198 public static File generateEnumClassFile(File file, YangNode curNode)
1199 throws IOException {
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301200
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301201 JavaFileInfoTranslator javaFileInfo =
1202 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301203 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301204
janani b703cfe42016-05-17 13:12:22 +05301205 String className = javaFileInfo.getJavaName();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301206 String path = javaFileInfo.getBaseCodeGenPath() +
1207 javaFileInfo.getPackageFilePath();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301208
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301209 initiateJavaFileGeneration(file, getCapitalCase(className),
1210 GENERATE_ENUM_CLASS, null, path,
1211 pluginConfig);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301212
1213 //Add attribute strings.
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301214 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301215 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301216 insertDataIntoJavaFile(file,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301217 trimAtLast(trimAtLast(
1218 getDataFromTempFileHandle(
1219 ENUM_IMPL_MASK, javaGenInfo
1220 .getTempJavaCodeFragmentFiles()
1221 .getEnumerationTempFiles(),
1222 path), COMMA),
1223 NEW_LINE) + SEMI_COLAN +
1224 NEW_LINE);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301225 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301226 throw new IOException(
1227 "No data found in temporary java code fragment files for " +
1228 getCapitalCase(className) + " while enum class " +
1229 "file generation");
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301230 }
1231
Bharat saraswal64e7e232016-07-14 23:33:55 +05301232
1233 // Add an attribute to get the enum's values.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301234 insertDataIntoJavaFile(file, getEnumsValueAttribute(
1235 getCapitalCase(className)));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301236
Bharat saraswal64e7e232016-07-14 23:33:55 +05301237 // Add a constructor for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301238 insertDataIntoJavaFile(file,
1239 getJavaDoc(TYPE_CONSTRUCTOR, className, false,
1240 pluginConfig, null)
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301241 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301242
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301243 insertDataIntoJavaFile(file,
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301244 getEnumsOfValueMethod(className, (YangEnumeration) curNode, pluginConfig) + NEW_LINE);
1245 insertDataIntoJavaFile(file,
1246 getEnumValueOfSchemaNameMethod(className, pluginConfig, (YangEnumeration) curNode));
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301247
Bharat saraswal64e7e232016-07-14 23:33:55 +05301248 // Add a getter method for enum.
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301249 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
1250 pluginConfig, null) +
1251 getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301252 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, SCHEMA_NAME, false,
1253 pluginConfig, null) +
1254 getGetter(STRING_DATA_TYPE, SCHEMA_NAME,
1255 GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswal250a7472016-05-12 13:16:57 +05301256
1257 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301258 insertDataIntoJavaFile(file, getFromStringMethodSignature(
1259 getCapitalCase(className), pluginConfig) +
1260 getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
1261 ((TempJavaCodeFragmentFilesContainer) curNode)
1262 .getTempJavaCodeFragmentFiles()
1263 .getEnumerationTempFiles(),
1264 path) +
1265 getFromStringMethodClose());
Bharat saraswal250a7472016-05-12 13:16:57 +05301266 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301267 throw new IOException(
1268 "No data found in temporary java code fragment files for " +
1269 getCapitalCase(className) +
1270 " while enum class file generation");
Bharat saraswal250a7472016-05-12 13:16:57 +05301271 }
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301272
1273 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1274
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301275 return validateLineLength(file);
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301276 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301277
1278 /**
1279 * Generates interface file for rpc.
1280 *
Bharat saraswal64e7e232016-07-14 23:33:55 +05301281 * @param file generated file
1282 * @param curNode current YANG node
1283 * @param imports imports for file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301284 * @return rpc class file
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301285 * @throws IOException when fails to generate class file
1286 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301287 public static File generateServiceInterfaceFile(File file, YangNode curNode,
1288 List<String> imports)
Vinod Kumar S79a374b2016-04-30 21:09:15 +05301289 throws IOException {
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301290
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301291 JavaFileInfoTranslator javaFileInfo =
1292 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301293
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301294 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles =
1295 ((JavaCodeGeneratorInfo) curNode)
1296 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
1297 String className = getCapitalCase(javaFileInfo.getJavaName()) +
1298 SERVICE_METHOD_STRING;
1299 String path = javaFileInfo.getBaseCodeGenPath() +
1300 javaFileInfo.getPackageFilePath();
1301 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
1302 curNode, className);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301303
1304 List<String> methods = new ArrayList<>();
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301305 JavaAttributeInfo rootAttribute =
1306 getCurNodeAsAttributeInTarget(curNode, curNode, false,
1307 tempJavaServiceFragmentFiles);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301308
1309 try {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301310
Bharat saraswal1edde622016-09-06 10:18:04 +05301311 if (isGetSetOfRootNodeRequired(curNode)) {
1312 //Getter methods.
1313 methods.add(getGetterString(rootAttribute,
1314 GENERATE_SERVICE_AND_MANAGER,
1315 javaFileInfo.getPluginConfig()) +
1316 NEW_LINE);
1317 // Setter methods.
1318 methods.add(getSetterString(rootAttribute, className,
1319 GENERATE_SERVICE_AND_MANAGER,
1320 javaFileInfo.getPluginConfig()) +
1321 NEW_LINE);
1322 }
1323
Bharat saraswalaf413b82016-07-14 15:18:20 +05301324 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1325
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301326 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
1327 .getServiceTempFiles() != null) {
1328 JavaCodeGeneratorInfo javaGenInfo =
1329 (JavaCodeGeneratorInfo) curNode;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301330
1331 // Rpc methods
Bharat saraswal250a7472016-05-12 13:16:57 +05301332 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301333 javaGenInfo
1334 .getTempJavaCodeFragmentFiles()
1335 .getServiceTempFiles(),
1336 path));
Bharat saraswal250a7472016-05-12 13:16:57 +05301337 }
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301338 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301339 throw new IOException(
1340 "No data found in temporary java code fragment files for " +
1341 className + " while rpc class file generation");
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301342 }
1343
1344 for (String method : methods) {
1345 insertDataIntoJavaFile(file, method);
1346 }
1347 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1348
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301349 return validateLineLength(file);
Gaurav Agrawal02a60de2016-04-20 15:49:17 +05301350 }
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301351
1352 /**
1353 * Generates event file.
1354 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301355 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301356 * @param curNode current YANG node
1357 * @param imports imports for file
1358 * @throws IOException when fails to generate class file
1359 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301360 public static void generateEventFile(File file, YangNode curNode,
1361 List<String> imports)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301362 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301363
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301364 String className = getCapitalCase(
1365 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1366 .getJavaName())
Bharat saraswald14cbe82016-07-14 13:26:18 +05301367 + EVENT_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301368
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301369 TempJavaEventFragmentFiles tempFiles =
1370 ((TempJavaCodeFragmentFilesContainer) curNode)
1371 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301372
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301373 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1374 .getBaseCodeGenPath()
1375 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1376 .getPackageFilePath();
1377 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
1378 className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301379 try {
1380 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301381 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
1382 tempFiles, path),
1383 COMMA) + FOUR_SPACE_INDENTATION +
1384 CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301385
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301386 insertDataIntoJavaFile(file,
1387 getDataFromTempFileHandle(EVENT_METHOD_MASK,
1388 tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301389
1390 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301391 throw new IOException(
1392 "No data found in temporary java code fragment files for " +
1393 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301394 }
1395
1396 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1397 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301398 }
1399
1400 /**
1401 * Generates event listener file.
1402 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301403 * @param file generated file
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301404 * @param curNode current YANG node
1405 * @param imports imports for file
1406 * @throws IOException when fails to generate class file
1407 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301408 public static void generateEventListenerFile(File file, YangNode curNode,
1409 List<String> imports)
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301410 throws IOException {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301411
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301412 String className = getCapitalCase(
1413 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1414 .getJavaName()) + EVENT_LISTENER_STRING;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301415
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301416 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
1417 imports, curNode, className);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301418 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301419 validateLineLength(file);
1420 }
1421
1422 /**
1423 * Generates event subject's file.
1424 *
Bharat saraswald14cbe82016-07-14 13:26:18 +05301425 * @param file file handle
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301426 * @param curNode current YANG node
1427 * @throws IOException when fails to do IO exceptions
1428 */
1429 public static void generateEventSubjectFile(File file, YangNode curNode)
1430 throws IOException {
1431
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301432 String className = getCapitalCase(
1433 ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1434 .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301435
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301436 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
1437 curNode, className);
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301438
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301439 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1440 .getBaseCodeGenPath()
1441 + ((JavaFileInfoContainer) curNode).getJavaFileInfo()
1442 .getPackageFilePath();
Bharat saraswal039f59c2016-07-14 21:57:13 +05301443
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301444 TempJavaEventFragmentFiles tempFiles =
1445 ((TempJavaCodeFragmentFilesContainer) curNode)
1446 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301447
1448 insertDataIntoJavaFile(file, NEW_LINE);
1449 try {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301450 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1451 EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301452
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301453 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1454 EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301455
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301456 insertDataIntoJavaFile(file, getDataFromTempFileHandle(
1457 EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301458
1459 } catch (IOException e) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301460 throw new IOException(
1461 "No data found in temporary java code fragment files for " +
1462 className + " while event class file generation");
Bharat saraswal715d3fc2016-05-17 19:59:16 +05301463 }
1464
1465 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1466 validateLineLength(file);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +05301467 }
Bharat saraswalc46ee2a2016-02-25 02:26:43 +05301468}