blob: c9d28a7b672983fe8cc3fe04a894218f01279c0c [file] [log] [blame]
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal4bf8b152016-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 saraswal2f00b4b2016-03-04 20:08:09 +053021import java.util.ArrayList;
Bharat saraswal4bf8b152016-02-25 02:26:43 +053022import java.util.List;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053023
Bharat saraswalb1170bd2016-07-14 13:26:18 +053024import org.onosproject.yangutils.datamodel.YangAugment;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053025import org.onosproject.yangutils.datamodel.YangLeaf;
26import org.onosproject.yangutils.datamodel.YangLeafList;
27import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswalb551aae2016-07-14 15:18:20 +053028import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Vinod Kumar S38046502016-03-23 15:30:27 +053029import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053030import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053031import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Vinod Kumar S38046502016-03-23 15:30:27 +053032import org.onosproject.yangutils.translator.tojava.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053033import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
34import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053035import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053036import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053037import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053038
39import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
40import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053041import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053042import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
43import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053047import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053048import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053050import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
51import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053053import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.AUGMENTE_CLASS_CONSTRUCTOR_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
60import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
62import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
65import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
66import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053068import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053069import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053070import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
72import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Bharat saraswalb551aae2016-07-14 15:18:20 +053073import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
74import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053075import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalb551aae2016-07-14 15:18:20 +053076import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
77import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswale2d51d62016-03-23 19:40:35 +053078import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053079import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
80import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb551aae2016-07-14 15:18:20 +053081import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
82import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoImpl;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053083import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentedNodesConstructorStart;
Bharat saraswalb551aae2016-07-14 15:18:20 +053084import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForManager;
85import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Vinod Kumar S38046502016-03-23 15:30:27 +053086import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053087import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +053088import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +053089import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
90import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053091import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
92import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +053093import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
95import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +053096import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
97import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOpParamConstructorStart;
100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypeSetter;
101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypegetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeaf;
105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeafList;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafListgetter;
108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafgetter;
Vinod Kumar S38046502016-03-23 15:30:27 +0530109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafListgetter;
112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafgetter;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getisFilterContentMatch;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530114import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
115import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530116import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +0530117import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530118import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
119import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530120import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530121import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
122import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530123import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530124import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswald72411a2016-04-19 01:00:16 +0530125import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530126import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530127import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530129import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
130import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530131import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
132import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswald72411a2016-04-19 01:00:16 +0530133import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530134import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530135import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530136import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
137import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF;
138import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF;
139import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
140import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF_LIST;
141import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF_LIST;
142import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF_LIST;
143import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_ENUM;
144import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM_TYPE;
145import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
146import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
147import static org.onosproject.yangutils.utils.UtilConstants.NEW;
148import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
149import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
150import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
151import static org.onosproject.yangutils.utils.UtilConstants.MERGE;
152import static org.onosproject.yangutils.utils.UtilConstants.REPLACE;
153import static org.onosproject.yangutils.utils.UtilConstants.CREATE;
154import static org.onosproject.yangutils.utils.UtilConstants.REMOVE;
155import static org.onosproject.yangutils.utils.UtilConstants.DELETE;
156import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswald72411a2016-04-19 01:00:16 +0530157import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
158import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530159import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
160import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
161import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530162import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530163import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530164import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530165
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530166/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530167 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530168 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530169public final class JavaFileGenerator {
170
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530171 private JavaFileGenerator() {
172 }
173
174 /**
175 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530176 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530177 * @param file file
178 * @param imports imports for the file
179 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530180 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530181 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530182 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530183 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530184 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530185 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530186 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530187
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530188 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530189 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530190
janani b4a6711a2016-05-17 13:12:22 +0530191 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530192
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530193 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530194
Bharat saraswal2f11f652016-03-25 18:19:46 +0530195 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530196 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530197 * Add getter methods to interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530198 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530199 try {
200 /**
201 * Getter methods.
202 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530203 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
204 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530205 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530206 } catch (IOException e) {
207 throw new IOException("No data found in temporary java code fragment files for " + className
208 + " while interface file generation");
209 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530210 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530211 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530212 }
213
214 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530215 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530216 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530217 * @param file file
218 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530219 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530220 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530221 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530222 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530223 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
224 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530225
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530226 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530227 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530228
janani b4a6711a2016-05-17 13:12:22 +0530229 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530230 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
231
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530232 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530233 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530234 if (isAttrPresent) {
235 try {
236 /**
237 * Getter methods.
238 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530239 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
240 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530241 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530242 /**
243 * Setter methods.
244 */
245 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530246 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
247 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530248 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530249 } catch (IOException e) {
250 throw new IOException("No data found in temporary java code fragment files for " + className
251 + " while builder interface file generation");
252 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530253 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530254 /**
255 * Add build method to builder interface file.
256 */
Bharat saraswale2d51d62016-03-23 19:40:35 +0530257 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530258 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530259 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530260
261 /**
262 * Add getters and setters in builder interface.
263 */
264 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530265 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530266 }
267
Bharat saraswale2d51d62016-03-23 19:40:35 +0530268 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530269 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530270 }
271
272 /**
273 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530274 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530275 * @param file file
276 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530277 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530278 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530279 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530280 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530281 public static File generateBuilderClassFile(File file, YangNode curNode,
282 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530283
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530284 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530285 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530286
janani b4a6711a2016-05-17 13:12:22 +0530287 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530288 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
289
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530290 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530291 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530292 boolean isAugmentNode = false;
293 if (curNode instanceof YangAugment) {
294 isAugmentNode = true;
295 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530296
Bharat saraswal2f11f652016-03-25 18:19:46 +0530297 if (isAttrPresent) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530298 /**
Bharat saraswal2f11f652016-03-25 18:19:46 +0530299 * Add attribute strings.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530300 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530301 try {
302 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530303 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
304 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530305 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530306 } catch (IOException e) {
307 throw new IOException("No data found in temporary java code fragment files for " + className
308 + " while builder class file generation");
309 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530310
Bharat saraswal2f11f652016-03-25 18:19:46 +0530311 try {
312 /**
313 * Getter methods.
314 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530315 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
316 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530317 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530318 /**
319 * Setter methods.
320 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530321 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
322 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530323 .getBeanTempFiles(), path));
324
325 if (isAugmentNode) {
326 YangAugment augment = (YangAugment) curNode;
327 String augmentNode = getCapitalCase(
328 getCamelCase(augment.getAugmentedNode().getName(), pluginConfig.getConflictResolver()));
329 /**
330 * Constructor.
331 */
332 String constructor = getAugmentedNodesConstructorStart(className, augmentNode)
333 + getDataFromTempFileHandle(AUGMENTE_CLASS_CONSTRUCTOR_MASK,
334 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
335 .getBeanTempFiles(), path);
336
337 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
338 NEW_LINE + NEW_LINE);
339 }
340 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530341 } catch (IOException e) {
342 throw new IOException("No data found in temporary java code fragment files for " + className
343 + " while builder class file generation");
344 }
345 } else {
346 insertDataIntoJavaFile(file, NEW_LINE);
347 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530348 /**
349 * Add default constructor and build method impl.
350 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530351 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
352 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530353 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530354 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530355
356 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530357 * Add methods in builder class.
358 */
359 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530360 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530361 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530362 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530363 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530364 }
365
366 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530367 * Returns generated op param builder class file for current node.
368 * @param file file handle
369 * @param curNode current YANG node
370 * @param isAttrPresent if any attribute is present or not
371 * @return builder class file
372 * @throws IOException when fails to write in file
373 */
374 public static File generateOpParamBuilderClassFile(File file, YangNode curNode,
375 boolean isAttrPresent) throws IOException {
376
377 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
378 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
379
380 String className = getCapitalCase(javaFileInfo.getJavaName());
381
382 initiateJavaFileGeneration(file, OPERATION_BUILDER_CLASS_MASK, null, curNode, className);
383 List<String> methods = new ArrayList<>();
384
385 if (isAttrPresent) {
386 /**
387 * Add attribute strings.
388 */
389 try {
390 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
391 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
392
393 } catch (IOException e) {
394 throw new IOException("No data found in temporary java code fragment files for " + className
395 + " while impl class file generation");
396 }
397
398 try {
399 if (curNode instanceof YangLeavesHolder) {
400 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
401 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
402 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
403
404 if (leaves != null && !leaves.isEmpty()) {
405 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
406 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
407 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
408 + NEW_LINE);
409
410 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
411 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
412 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
413 + SEMI_COLAN + NEW_LINE);
414 }
415
416 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
417 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
418 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
419 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
420 + SEMI_COLAN + NEW_LINE);
421
422 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
423 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
424 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
425 + SEMI_COLAN + NEW_LINE);
426 }
427 }
428
429 } catch (IOException e) {
430 throw new IOException("No data found in temporary java code fragment files for " + className
431 + " while impl class file generation");
432 }
433
434 try {
435 /**
436 * Setter methods.
437 */
438 methods.add(getSetterForLeaf(className, curNode, pluginConfig));
439 methods.add(getSetterForLeafList(className, curNode, pluginConfig));
440
441 if (curNode instanceof YangLeavesHolder) {
442 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
443 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
444 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
445
446 if (leaves != null && !leaves.isEmpty()) {
447 methods.add(getToStringLeafgetter());
448 methods.add(getToStringSelectLeafgetter());
449 }
450
451 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
452 methods.add(getToStringLeafListgetter());
453 methods.add(getToStringSelectLeafListgetter());
454 }
455 }
456
457 methods.add(getOperationTypegetter());
458 methods.add(getOperationTypeSetter());
459 insertDataIntoJavaFile(file, NEW_LINE);
460 } catch (IOException e) {
461 throw new IOException("No data found in temporary java code fragment files for " + className
462 + " while builder class file generation");
463 }
464 } else {
465 insertDataIntoJavaFile(file, NEW_LINE);
466 }
467
468 /**
469 * Add methods in builder class.
470 */
471 for (String method : methods) {
472 insertDataIntoJavaFile(file, method);
473 }
474 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
475 return validateLineLength(file);
476 }
477
478
479 /**
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530480 * Returns generated manager class file for current node.
481 *
Bharat saraswalb551aae2016-07-14 15:18:20 +0530482 * @param file file
483 * @param imports imports for the file
484 * @param curNode current YANG node
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530485 * @return builder class file
486 * @throws IOException when fails to write in file
487 */
Bharat saraswalb551aae2016-07-14 15:18:20 +0530488 public static File generateManagerClassFile(File file, List<String> imports, YangNode curNode)
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530489 throws IOException {
490
491 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
492
janani bdd1314f2016-05-19 17:39:50 +0530493 String className = getCapitalCase(javaFileInfo.getJavaName()) + MANAGER;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530494 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530495
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530496 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530497
498 List<String> methods = new ArrayList<>();
499
Bharat saraswal33dfa012016-05-17 19:59:16 +0530500 insertDataIntoJavaFile(file, LOGGER_STATEMENT);
501 methods.add(addActivateMethod());
502 methods.add(addDeActivateMethod());
503
Bharat saraswalb551aae2016-07-14 15:18:20 +0530504 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
505 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530506
Bharat saraswalb551aae2016-07-14 15:18:20 +0530507 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
508 tempJavaServiceFragmentFiles);
509 try {
510 /**
511 * Getter methods.
512 */
513 methods.add(getOverRideString() +
514 getGetterForClass(rootAttribute, GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
515 /**
516 * Setter methods.
517 */
518 methods.add(getOverRideString() +
519 getSetterForClass(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER)
520 + NEW_LINE);
521
522 methods.add(getAugmentsDataMethodForManager(curNode) + NEW_LINE);
523
Bharat saraswalc0e04842016-05-12 13:16:57 +0530524 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530525 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
526 /**
527 * Rpc methods
528 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530529 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530530 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530531 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530532 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530533
534 } catch (IOException e) {
535 throw new IOException("No data found in temporary java code fragment files for " + className
536 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530537 }
538
539 /**
540 * Add methods in builder class.
541 */
542 for (String method : methods) {
543 insertDataIntoJavaFile(file, method);
544 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530545 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530546 }
547
548 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530549 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530550 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530551 * @param file file
552 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530553 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530554 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530555 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530556 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530557 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530558 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530559 throws IOException {
560
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530561 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530562 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530563
janani b4a6711a2016-05-17 13:12:22 +0530564 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530565 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
566
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530567 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530568
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530569 List<String> methods = new ArrayList<>();
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530570 boolean isAugmentNode = false;
571 if (curNode instanceof YangAugment) {
572 isAugmentNode = true;
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530573 }
Bharat saraswalb551aae2016-07-14 15:18:20 +0530574 if (curNode instanceof YangAugmentableNode) {
575 insertDataIntoJavaFile(file, addAugmentationAttribute());
576 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530577 if (isAttrPresent) {
578 /**
579 * Add attribute strings.
580 */
581 try {
582 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530583 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
584 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530585 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530586 } catch (IOException e) {
587 throw new IOException("No data found in temporary java code fragment files for " + className
588 + " while impl class file generation");
589 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530590
Bharat saraswal2f11f652016-03-25 18:19:46 +0530591 try {
592 /**
593 * Getter methods.
594 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530595 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
596 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530597 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530598
599 /**
600 * Hash code method.
601 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530602 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530603 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
604 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530605 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530606 /**
607 * Equals method.
608 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530609 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
610 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
611 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
612 .getBeanTempFiles(), path)));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530613 /**
614 * To string method.
615 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530616 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
617 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530618 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530619 + getToStringMethodClose());
620
621 } catch (IOException e) {
622 throw new IOException("No data found in temporary java code fragment files for " + className
623 + " while impl class file generation");
624 }
625 } else {
626 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530627 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530628 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530629
Bharat saraswale2d51d62016-03-23 19:40:35 +0530630 /**
631 * Constructor.
632 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530633 String constructor = getConstructorStart(className, pluginConfig);
634 if (isAugmentNode) {
635 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
636 + BUILDER.toLowerCase() + OBJECT
637 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
638 }
639 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
640 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
641 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530642
643 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530644 } catch (IOException e) {
645 throw new IOException("No data found in temporary java code fragment files for " + className
646 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530647 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530648
Bharat saraswalb551aae2016-07-14 15:18:20 +0530649 if (curNode instanceof YangAugmentableNode) {
650 methods.add(getAddAugmentInfoMethodImpl());
651 methods.add(getAugmentInfoImpl());
652 }
653
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530654 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530655 * Add methods in impl class.
656 */
657 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530658 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530659 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530660
Bharat saraswal33dfa012016-05-17 19:59:16 +0530661 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530662 }
663
664 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530665 * Returns generated op param class file for current node.
666 *
667 * @param file file handle
668 * @param curNode current YANG node
669 * @param isAttrPresent if any attribute is present or not
670 * @param imports import list
671 * @return returns generated op param class file for current node
672 * @throws IOException when fails to write in file
673 */
674 public static File generateOpParamImplClassFile(File file, YangNode curNode,
675 boolean isAttrPresent, List<String> imports)
676 throws IOException {
677
678 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
679 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
680
681 String className = getCapitalCase(javaFileInfo.getJavaName());
682 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
683
684 initiateJavaFileGeneration(file, OPERATION_CLASS_MASK, imports, curNode, className);
685
686 List<String> methods = new ArrayList<>();
687
688 if (isAttrPresent) {
689 /**
690 * Add attribute strings.
691 */
692 try {
693 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STATIC +
694 SPACE + ENUM + SPACE + OPERATION_ENUM + SPACE + OPEN_CURLY_BRACKET +
695 NEW_LINE + EIGHT_SPACE_INDENTATION + MERGE +
696 NEW_LINE + EIGHT_SPACE_INDENTATION + REPLACE +
697 NEW_LINE + EIGHT_SPACE_INDENTATION + CREATE +
698 NEW_LINE + EIGHT_SPACE_INDENTATION + DELETE +
699 NEW_LINE + EIGHT_SPACE_INDENTATION + REMOVE +
700 NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
701
702 } catch (IOException e) {
703 throw new IOException("No data found in temporary java code fragment files for " + className
704 + " while impl class file generation");
705 }
706
707 /**
708 * Add attribute strings.
709 */
710 try {
711 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
712 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
713
714 } catch (IOException e) {
715 throw new IOException("No data found in temporary java code fragment files for " + className
716 + " while impl class file generation");
717 }
718
719 try {
720 if (curNode instanceof YangLeavesHolder) {
721 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
722 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
723 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
724
725 if (leaves != null && !leaves.isEmpty()) {
726 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
727 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
728 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
729 + SEMI_COLAN + NEW_LINE);
730
731 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
732 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
733 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
734 + SEMI_COLAN + NEW_LINE);
735 }
736
737 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
738 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
739 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
740 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
741 + SEMI_COLAN + NEW_LINE);
742
743 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
744 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
745 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
746 + SEMI_COLAN + NEW_LINE);
747 }
748 }
749
750 } catch (IOException e) {
751 throw new IOException("No data found in temporary java code fragment files for " + className
752 + " while impl class file generation");
753 }
754
755 if (curNode instanceof YangLeavesHolder) {
756 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
757 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
758 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
759
760 if (leaves != null && !leaves.isEmpty()) {
761 methods.add(getToStringLeafgetter());
762 methods.add(getToStringSelectLeafgetter());
763 }
764
765 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
766 methods.add(getToStringLeafListgetter());
767 methods.add(getToStringSelectLeafListgetter());
768 }
769 }
770
771 methods.add(getOperationTypegetter());
772 methods.add(getisFilterContentMatch(className, curNode, pluginConfig));
773
774 } else {
775 insertDataIntoJavaFile(file, NEW_LINE);
776 }
777 String constructor = getOpParamConstructorStart(className, pluginConfig);
778
779 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
780 + BUILDER.toLowerCase() + OBJECT
781 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
782
783 if (curNode instanceof YangLeavesHolder) {
784 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
785 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
786 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
787 String filterLeaf = "";
788 String filterLeafList = "";
789
790 if (leaves != null && !leaves.isEmpty()) {
791 filterLeaf = EIGHT_SPACE_INDENTATION + FILTER_LEAF + SPACE + EQUAL + SPACE
792 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF + OPEN_PARENTHESIS
793 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
794 }
795
796 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
797 filterLeafList = EIGHT_SPACE_INDENTATION + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE
798 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF_LIST + OPEN_PARENTHESIS
799 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
800 }
801
802 constructor = constructor + filterLeaf + filterLeafList;
803 }
804
805 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
806
807 /**
808 * Add methods in impl class.
809 */
810 for (String method : methods) {
811 insertDataIntoJavaFile(file, method);
812 }
813
814
815 return validateLineLength(file);
816 }
817
818 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530819 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530820 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530821 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530822 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530823 * @param imports imports for file
824 * @return type def class file
825 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530826 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530827 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
828 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530829
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530830 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530831 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530832
janani b4a6711a2016-05-17 13:12:22 +0530833 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530834 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530835
Bharat saraswal33dfa012016-05-17 19:59:16 +0530836 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530837
Bharat saraswale2d51d62016-03-23 19:40:35 +0530838 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530839
Bharat saraswale2d51d62016-03-23 19:40:35 +0530840 /**
841 * Add attribute strings.
Vinod Kumar S38046502016-03-23 15:30:27 +0530842 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530843 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530844 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530845 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
846 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530847 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530848 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530849 throw new IOException("No data found in temporary java code fragment files for " + className
850 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530851 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530852
Bharat saraswale2d51d62016-03-23 19:40:35 +0530853 /**
854 * Default constructor.
855 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530856 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530857 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530858
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530859 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530860
861 /**
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530862 * Type constructor.
863 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530864 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530865 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
866 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530867
868 /**
869 * Of method.
870 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530871 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530872 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
873 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530874
875 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530876 * Getter method.
877 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530878 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530879 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
880 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530881
882 /**
Bharat saraswale2d51d62016-03-23 19:40:35 +0530883 * Hash code method.
884 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530885 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530886 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
887 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530888 .getTypeTempFiles(), path)
889 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530890
891 /**
892 * Equals method.
893 */
894 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530895 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530896 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
897 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530898
899 /**
900 * To string method.
901 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530902 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530903 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
904 path) + getToStringMethodClose());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530905
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530906 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Gaurav Agrawal56527662016-04-20 15:49:17 +0530907 /**
908 * From string method.
909 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530910 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530911 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGeninfo.getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530912 .getTypeTempFiles(), path)
913 + getFromStringMethodClose());
Gaurav Agrawal56527662016-04-20 15:49:17 +0530914
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530915 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530916 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530917 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530918 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530919
Bharat saraswale2d51d62016-03-23 19:40:35 +0530920 for (String method : methods) {
921 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530922 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530923 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530924
Bharat saraswal33dfa012016-05-17 19:59:16 +0530925 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530926 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530927
928 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530929 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530930 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530931 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530932 * @param curNode current YANG node
933 * @param imports imports for file
934 * @return type def class file
935 * @throws IOException when fails to generate class file
936 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530937 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
938 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530939
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530940 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530941 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530942
janani b4a6711a2016-05-17 13:12:22 +0530943 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530944 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
945
Bharat saraswal33dfa012016-05-17 19:59:16 +0530946 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530947
948 List<String> methods = new ArrayList<>();
949
950 /**
951 * Add attribute strings.
952 */
953 try {
954 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530955 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
956 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530957 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530958 } catch (IOException e) {
959 throw new IOException("No data found in temporary java code fragment files for " + className
960 + " while union class file generation");
961 }
962
963 /**
964 * Default constructor.
965 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530966 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530967 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530968
969 try {
970
971 /**
972 * Type constructor.
973 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530974 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530975 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
976 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530977
978 /**
979 * Of string method.
980 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530981 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530982 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
983 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530984
985 /**
986 * Getter method.
987 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530988 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530989 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
990 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530991
992 /**
993 * Hash code method.
994 */
Bharat saraswal33dfa012016-05-17 19:59:16 +0530995 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530996 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
997 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530998 .getTypeTempFiles(), path)
999 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301000
1001 /**
1002 * Equals method.
1003 */
1004 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301005 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301006 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1007 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301008
1009 /**
1010 * To string method.
1011 */
1012 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301013 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1014 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301015 .getTypeTempFiles(), path)
1016 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301017
1018 /**
1019 * From string method.
1020 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301021 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301022 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301023 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1024 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301025 + getFromStringMethodClose());
1026
1027 } catch (IOException e) {
1028 throw new IOException("No data found in temporary java code fragment files for " + className
1029 + " while union class file generation");
1030 }
1031
1032 for (String method : methods) {
1033 insertDataIntoJavaFile(file, method);
1034 }
1035 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1036
Bharat saraswal33dfa012016-05-17 19:59:16 +05301037 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301038 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301039
1040 /**
1041 * Generates class file for type enum.
1042 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301043 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +05301044 * @param curNode current YANG node
1045 * @return class file for type enum
1046 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301047 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301048 public static File generateEnumClassFile(File file, YangNode curNode)
1049 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +05301050
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301051 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301052 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +05301053
janani b4a6711a2016-05-17 13:12:22 +05301054 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +05301055 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
1056
Bharat saraswal33dfa012016-05-17 19:59:16 +05301057 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswald72411a2016-04-19 01:00:16 +05301058 /**
1059 * Add attribute strings.
1060 */
1061 try {
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301062 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +05301063 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301064 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGeninfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301065 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +05301066 + SEMI_COLAN + NEW_LINE);
1067 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301068 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +05301069 + " while enum class file generation");
1070 }
1071
1072 /**
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301073 * Add an
1074 * attribute to get the enum's values.
Bharat saraswald72411a2016-04-19 01:00:16 +05301075 */
janani b4a6711a2016-05-17 13:12:22 +05301076 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +05301077
1078 /**
1079 * Add a constructor for enum.
1080 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301081 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301082 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301083
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301084 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1085 .getTempJavaCodeFragmentFiles()
1086 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +05301087 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +05301088 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301089 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301090 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301091 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +05301092
1093 /**
1094 * Add a getter method for enum.
1095 */
Bharat saraswal33dfa012016-05-17 19:59:16 +05301096 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301097 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301098
1099 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301100 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301101 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301102 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1103 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301104 + getFromStringMethodClose());
1105 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301106 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301107 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +05301108 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301109
1110 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1111
Bharat saraswal33dfa012016-05-17 19:59:16 +05301112 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +05301113 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301114
1115 /**
1116 * Generates interface file for rpc.
1117 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301118 * @param file generated file
1119 * @param curNode current YANG node
1120 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301121 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301122 * @throws IOException when fails to generate class file
1123 */
Bharat saraswalb551aae2016-07-14 15:18:20 +05301124 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301125 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +05301126
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301127 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +05301128
Bharat saraswalb551aae2016-07-14 15:18:20 +05301129 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1130 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b4a6711a2016-05-17 13:12:22 +05301131 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301132 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301133 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301134
1135 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301136 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1137 tempJavaServiceFragmentFiles);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301138
1139 try {
Bharat saraswalb551aae2016-07-14 15:18:20 +05301140 /**
1141 * Getter methods.
1142 */
1143 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1144 javaFileInfo.getPluginConfig()) + NEW_LINE);
1145 /**
1146 * Setter methods.
1147 */
1148 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1149 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301150
Bharat saraswalb551aae2016-07-14 15:18:20 +05301151 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1152
Bharat saraswalc0e04842016-05-12 13:16:57 +05301153 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
1154 JavaCodeGeneratorInfo javaGeninfo = (JavaCodeGeneratorInfo) curNode;
1155 /**
1156 * Rpc methods
1157 */
1158 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301159 javaGeninfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +05301160 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301161 } catch (IOException e) {
1162 throw new IOException("No data found in temporary java code fragment files for " + className
1163 + " while rpc class file generation");
1164 }
1165
1166 for (String method : methods) {
1167 insertDataIntoJavaFile(file, method);
1168 }
1169 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1170
Bharat saraswal33dfa012016-05-17 19:59:16 +05301171 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301172 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301173
1174 /**
1175 * Generates event file.
1176 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301177 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301178 * @param curNode current YANG node
1179 * @param imports imports for file
1180 * @throws IOException when fails to generate class file
1181 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301182 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301183
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301184 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1185 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301186
Bharat saraswal33dfa012016-05-17 19:59:16 +05301187 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1188 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301189
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301190 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1191 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301192 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1193 try {
1194 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301195 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +05301196 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1197
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301198 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301199
1200 } catch (IOException e) {
1201 throw new IOException("No data found in temporary java code fragment files for " + className
1202 + " while event class file generation");
1203 }
1204
1205 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1206 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301207 }
1208
1209 /**
1210 * Generates event listener file.
1211 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301212 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301213 * @param curNode current YANG node
1214 * @param imports imports for file
1215 * @throws IOException when fails to generate class file
1216 */
1217 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1218 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301219
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301220 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1221 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301222
Bharat saraswal33dfa012016-05-17 19:59:16 +05301223 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301224 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +05301225 validateLineLength(file);
1226 }
1227
1228 /**
1229 * Generates event subject's file.
1230 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301231 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +05301232 * @param curNode current YANG node
1233 * @throws IOException when fails to do IO exceptions
1234 */
1235 public static void generateEventSubjectFile(File file, YangNode curNode)
1236 throws IOException {
1237
1238 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1239 + EVENT_SUBJECT_NAME_SUFFIX;
1240
1241 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1242
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301243 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1244 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301245 TempJavaServiceFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1246 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
1247
1248 insertDataIntoJavaFile(file, NEW_LINE);
1249 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301250 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301251
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301252 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301253
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301254 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301255
1256 } catch (IOException e) {
1257 throw new IOException("No data found in temporary java code fragment files for " + className
1258 + " while event class file generation");
1259 }
1260
1261 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1262 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301263 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301264}