blob: 331878b9d3b1e4030becb9223beb773de914b55c [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;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053025import org.onosproject.yangutils.datamodel.YangAugmentableNode;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053026import org.onosproject.yangutils.datamodel.YangDerivedInfo;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053027import org.onosproject.yangutils.datamodel.YangLeaf;
28import org.onosproject.yangutils.datamodel.YangLeafList;
29import org.onosproject.yangutils.datamodel.YangLeavesHolder;
Bharat saraswald50c6382016-07-14 21:57:13 +053030import org.onosproject.yangutils.datamodel.YangModule;
Vinod Kumar S38046502016-03-23 15:30:27 +053031import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswale707f032016-07-14 23:33:55 +053032import org.onosproject.yangutils.datamodel.YangSubModule;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053033import org.onosproject.yangutils.datamodel.YangType;
Bharat saraswald50c6382016-07-14 21:57:13 +053034import org.onosproject.yangutils.datamodel.YangTypeDef;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053035import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Bharat saraswalb551aae2016-07-14 15:18:20 +053036import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053037import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053038import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053039import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053040import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053041import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
Bharat saraswalc0e04842016-05-12 13:16:57 +053042import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053043import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
Bharat saraswal33dfa012016-05-17 19:59:16 +053044import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
Bharat saraswale707f032016-07-14 23:33:55 +053045import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
Bharat saraswald50c6382016-07-14 21:57:13 +053046import org.onosproject.yangutils.translator.tojava.YangJavaModelUtils;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053047import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
Vinod Kumar S38046502016-03-23 15:30:27 +053048
49import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
50import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053051import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053052import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
53import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
Bharat saraswal33dfa012016-05-17 19:59:16 +053054import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053055import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Vinod Kumar S38046502016-03-23 15:30:27 +053056import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053057import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Vinod Kumar S38046502016-03-23 15:30:27 +053058import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.IMPL_CLASS_MASK;
59import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +053060import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_BUILDER_CLASS_MASK;
61import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.OPERATION_CLASS_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053062import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053063import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053064import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
Bharat saraswald72411a2016-04-19 01:00:16 +053065import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053066import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
Bharat saraswal33dfa012016-05-17 19:59:16 +053067import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
68import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
69import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
70import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
71import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053072import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053073import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
74import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
75import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
Gaurav Agrawal338735b2016-04-18 18:53:11 +053076import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
Gaurav Agrawal56527662016-04-20 15:49:17 +053077import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_IMPL_MASK;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +053078import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
Vinod Kumar S38046502016-03-23 15:30:27 +053079import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
80import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
81import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +053082import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053083import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
Bharat saraswalb551aae2016-07-14 15:18:20 +053084import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
85import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addAugmentationAttribute;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053086import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
Bharat saraswalb551aae2016-07-14 15:18:20 +053087import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
88import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswale2d51d62016-03-23 19:40:35 +053089import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
Bharat saraswal33dfa012016-05-17 19:59:16 +053090import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addActivateMethod;
91import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.addDeActivateMethod;
Bharat saraswalb551aae2016-07-14 15:18:20 +053092import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
93import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoImpl;
Bharat saraswald50c6382016-07-14 21:57:13 +053094import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentInfoMapImpl;
Bharat saraswalb551aae2016-07-14 15:18:20 +053095import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForManager;
96import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
Bharat saraswald50c6382016-07-14 21:57:13 +053097import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBaseClassMethodImpl;
Vinod Kumar S38046502016-03-23 15:30:27 +053098import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053099import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
Bharat saraswalc0e04842016-05-12 13:16:57 +0530100import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfMethod;
Vinod Kumar S38046502016-03-23 15:30:27 +0530101import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
102import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530103import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
104import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
Bharat saraswald72411a2016-04-19 01:00:16 +0530105import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530106import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
107import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
Vinod Kumar S38046502016-03-23 15:30:27 +0530108import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
109import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
Bharat saraswald50c6382016-07-14 21:57:13 +0530110import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getIsFilterContentMatch;
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530111import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOmitNullValueString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530112import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOpParamConstructorStart;
113import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypeSetter;
114import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOperationTypegetter;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530115import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOverRideString;
116import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530117import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeaf;
118import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForLeafList;
Bharat saraswalb551aae2016-07-14 15:18:20 +0530119import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530120import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafListgetter;
121import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringLeafgetter;
Vinod Kumar S38046502016-03-23 15:30:27 +0530122import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
123import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530124import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafListgetter;
125import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringSelectLeafgetter;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530126import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswale707f032016-07-14 23:33:55 +0530127import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530128import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530129import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
130import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530131import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Bharat saraswald72411a2016-04-19 01:00:16 +0530132import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswald50c6382016-07-14 21:57:13 +0530133import static org.onosproject.yangutils.utils.UtilConstants.CREATE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530134import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530135import static org.onosproject.yangutils.utils.UtilConstants.DELETE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530136import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530137import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswald50c6382016-07-14 21:57:13 +0530138import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
139import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
140import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530141import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
142import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530143import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
Bharat saraswald50c6382016-07-14 21:57:13 +0530144import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF;
145import static org.onosproject.yangutils.utils.UtilConstants.FILTER_LEAF_LIST;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530146import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530147import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530148import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF;
149import static org.onosproject.yangutils.utils.UtilConstants.GET_FILTER_LEAF_LIST;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530150import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
Bharat saraswald72411a2016-04-19 01:00:16 +0530151import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530152import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_IMPORT_BASE64_CLASS;
153import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_PKG;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530154import static org.onosproject.yangutils.utils.UtilConstants.LOGGER_STATEMENT;
janani bdd1314f2016-05-19 17:39:50 +0530155import static org.onosproject.yangutils.utils.UtilConstants.MANAGER;
Bharat saraswald50c6382016-07-14 21:57:13 +0530156import static org.onosproject.yangutils.utils.UtilConstants.MERGE;
157import static org.onosproject.yangutils.utils.UtilConstants.NEW;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530158import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530159import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
Bharat saraswald50c6382016-07-14 21:57:13 +0530160import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530161import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530162import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_ENUM;
163import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530164import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
165import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
166import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
167import static org.onosproject.yangutils.utils.UtilConstants.REMOVE;
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530168import static org.onosproject.yangutils.utils.UtilConstants.REPLACE;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530169import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswald50c6382016-07-14 21:57:13 +0530170import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
171import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF_LIST;
172import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
173import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
174import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
175import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530176import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswald50c6382016-07-14 21:57:13 +0530177import static org.onosproject.yangutils.utils.UtilConstants.SUPER;
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530178import static org.onosproject.yangutils.utils.UtilConstants.TO;
Bharat saraswald72411a2016-04-19 01:00:16 +0530179import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
180import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530181import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530182import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
Bharat saraswale2d51d62016-03-23 19:40:35 +0530183import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
Bharat saraswald72411a2016-04-19 01:00:16 +0530184import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal33dfa012016-05-17 19:59:16 +0530185import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
Bharat saraswale707f032016-07-14 23:33:55 +0530186import static java.util.Collections.sort;
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530187
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530188/**
Bharat saraswald9822e92016-04-05 15:13:44 +0530189 * Representation of java file generator.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530190 */
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530191public final class JavaFileGenerator {
192
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530193 private JavaFileGenerator() {
194 }
195
196 /**
197 * Returns generated interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530198 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530199 * @param file file
200 * @param imports imports for the file
201 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530202 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530203 * @return interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530204 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530205 */
Bharat saraswalc0e04842016-05-12 13:16:57 +0530206 public static File generateInterfaceFile(File file, List<String> imports, YangNode curNode,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530207 boolean isAttrPresent)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530208 throws IOException {
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530209
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530210 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswald50c6382016-07-14 21:57:13 +0530211
212 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530213 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530214 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
215 } else {
216 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
217 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530218
janani b4a6711a2016-05-17 13:12:22 +0530219 String className = getCapitalCase(javaFileInfo.getJavaName());
Vinod Kumar S38046502016-03-23 15:30:27 +0530220
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530221 initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode, className);
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530222
Bharat saraswal2f11f652016-03-25 18:19:46 +0530223 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530224 // Add getter methods to interface file.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530225 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530226 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530227 insertDataIntoJavaFile(file, getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
228 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530229 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530230 } catch (IOException e) {
231 throw new IOException("No data found in temporary java code fragment files for " + className
232 + " while interface file generation");
233 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530234 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530235 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530236 }
237
238 /**
Gaurav Agrawal56527662016-04-20 15:49:17 +0530239 * Returns generated builder interface file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530240 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530241 * @param file file
242 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530243 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530244 * @return builder interface file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530245 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530246 */
Bharat saraswal2f11f652016-03-25 18:19:46 +0530247 public static File generateBuilderInterfaceFile(File file, YangNode curNode, boolean isAttrPresent)
248 throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530249
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530250 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530251 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530252
janani b4a6711a2016-05-17 13:12:22 +0530253 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530254 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530255 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530256 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
257 } else {
258 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
259 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530260
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530261 initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530262 List<String> methods = new ArrayList<>();
Bharat saraswal2f11f652016-03-25 18:19:46 +0530263 if (isAttrPresent) {
264 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530265
266 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530267 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(GETTER_FOR_INTERFACE_MASK,
268 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530269 .getBeanTempFiles(), path));
Bharat saraswale707f032016-07-14 23:33:55 +0530270
271 //Setter methods.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530272 methods.add(NEW_LINE);
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530273 methods.add(FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(SETTER_FOR_INTERFACE_MASK,
274 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530275 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530276 } catch (IOException e) {
277 throw new IOException("No data found in temporary java code fragment files for " + className
278 + " while builder interface file generation");
279 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530280 }
Bharat saraswale707f032016-07-14 23:33:55 +0530281
282 //Add build method to builder interface file.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530283 methods.add(
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530284 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530285 .addBuildMethodForInterface(pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530286
Bharat saraswale707f032016-07-14 23:33:55 +0530287
288 //Add getters and setters in builder interface.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530289 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530290 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530291 }
292
Bharat saraswale2d51d62016-03-23 19:40:35 +0530293 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530294 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530295 }
296
297 /**
298 * Returns generated builder class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530299 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530300 * @param file file
301 * @param curNode current YANG node
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530302 * @param isAttrPresent if any attribute is present or not
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530303 * @return builder class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530304 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530305 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530306 public static File generateBuilderClassFile(File file, YangNode curNode,
307 boolean isAttrPresent) throws IOException {
Vinod Kumar S38046502016-03-23 15:30:27 +0530308
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530309 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530310 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530311
janani b4a6711a2016-05-17 13:12:22 +0530312 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530313
314 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530315 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530316 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
317 } else {
318 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
319 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530320
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530321 initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode, className);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530322 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530323
Bharat saraswal2f11f652016-03-25 18:19:46 +0530324 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530325
326 //Add attribute strings.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530327 try {
328 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530329 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
330 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530331 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530332 } catch (IOException e) {
333 throw new IOException("No data found in temporary java code fragment files for " + className
334 + " while builder class file generation");
335 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530336
Bharat saraswal2f11f652016-03-25 18:19:46 +0530337 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530338 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530339 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
340 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530341 .getBeanTempFiles(), path));
Bharat saraswale707f032016-07-14 23:33:55 +0530342 // Setter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530343 methods.add(getDataFromTempFileHandle(SETTER_FOR_CLASS_MASK,
344 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530345 .getBeanTempFiles(), path));
346
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530347 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswal2f11f652016-03-25 18:19:46 +0530348 } catch (IOException e) {
349 throw new IOException("No data found in temporary java code fragment files for " + className
350 + " while builder class file generation");
351 }
352 } else {
353 insertDataIntoJavaFile(file, NEW_LINE);
354 }
Bharat saraswale707f032016-07-14 23:33:55 +0530355
356 // Add default constructor and build method impl.
Bharat saraswalc0e04842016-05-12 13:16:57 +0530357 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
358 .addBuildMethodImpl());
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530359 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530360 .addDefaultConstructor(PUBLIC, BUILDER, pluginConfig));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530361
Bharat saraswale707f032016-07-14 23:33:55 +0530362
363 //Add methods in builder class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530364 for (String method : methods) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530365 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530366 }
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530367 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530368 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530369 }
370
371 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530372 * Returns generated op param builder class file for current node.
Bharat saraswald50c6382016-07-14 21:57:13 +0530373 *
374 * @param file file handle
375 * @param curNode current YANG node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530376 * @param isAttrPresent if any attribute is present or not
377 * @return builder class file
378 * @throws IOException when fails to write in file
379 */
380 public static File generateOpParamBuilderClassFile(File file, YangNode curNode,
Bharat saraswald50c6382016-07-14 21:57:13 +0530381 boolean isAttrPresent) throws IOException {
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530382
383 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
384 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
385
386 String className = getCapitalCase(javaFileInfo.getJavaName());
387
388 initiateJavaFileGeneration(file, OPERATION_BUILDER_CLASS_MASK, null, curNode, className);
389 List<String> methods = new ArrayList<>();
390
391 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530392 //Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530393 try {
394 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
395 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
396
397 } catch (IOException e) {
398 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530399 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530400 }
401
402 try {
403 if (curNode instanceof YangLeavesHolder) {
404 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
405 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
406 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
407
408 if (leaves != null && !leaves.isEmpty()) {
409 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
410 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
411 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN
412 + NEW_LINE);
413
414 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
415 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
416 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
417 + SEMI_COLAN + NEW_LINE);
418 }
419
420 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
421 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
422 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
423 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
424 + SEMI_COLAN + NEW_LINE);
425
426 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
427 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
428 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
429 + SEMI_COLAN + NEW_LINE);
430 }
431 }
432
433 } catch (IOException e) {
434 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530435 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530436 }
437
438 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530439 // Setter methods.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530440 methods.add(getSetterForLeaf(className, curNode, pluginConfig));
441 methods.add(getSetterForLeafList(className, curNode, pluginConfig));
442
443 if (curNode instanceof YangLeavesHolder) {
444 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
445 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
446 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
447
448 if (leaves != null && !leaves.isEmpty()) {
449 methods.add(getToStringLeafgetter());
450 methods.add(getToStringSelectLeafgetter());
451 }
452
453 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
454 methods.add(getToStringLeafListgetter());
455 methods.add(getToStringSelectLeafListgetter());
456 }
457 }
458
459 methods.add(getOperationTypegetter());
460 methods.add(getOperationTypeSetter());
461 insertDataIntoJavaFile(file, NEW_LINE);
462 } catch (IOException e) {
463 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530464 + " while builder class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530465 }
466 } else {
467 insertDataIntoJavaFile(file, NEW_LINE);
468 }
469
Bharat saraswale707f032016-07-14 23:33:55 +0530470 // Add methods in builder class.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530471 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 {
Bharat saraswale707f032016-07-14 23:33:55 +0530510 //Getter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +0530511 methods.add(getOverRideString() +
512 getGetterForClass(rootAttribute, GENERATE_SERVICE_AND_MANAGER) + NEW_LINE);
Bharat saraswale707f032016-07-14 23:33:55 +0530513 // Setter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +0530514 methods.add(getOverRideString() +
515 getSetterForClass(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER)
516 + NEW_LINE);
517
518 methods.add(getAugmentsDataMethodForManager(curNode) + NEW_LINE);
519
Bharat saraswalc0e04842016-05-12 13:16:57 +0530520 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswale707f032016-07-14 23:33:55 +0530521 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
522
523 //Rpc methods
Bharat saraswalc0e04842016-05-12 13:16:57 +0530524 methods.add(getDataFromTempFileHandle(RPC_IMPL_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +0530525 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530526 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530527 insertDataIntoJavaFile(file, NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530528
529 } catch (IOException e) {
530 throw new IOException("No data found in temporary java code fragment files for " + className
531 + " while manager class file generation");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530532 }
533
Bharat saraswale707f032016-07-14 23:33:55 +0530534 // Add methods in builder class.
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530535 for (String method : methods) {
536 insertDataIntoJavaFile(file, method);
537 }
Bharat saraswal33dfa012016-05-17 19:59:16 +0530538 return validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530539 }
540
541 /**
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530542 * Returns generated impl class file for current node.
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530543 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530544 * @param file file
545 * @param curNode current YANG node
Bharat saraswal2f11f652016-03-25 18:19:46 +0530546 * @param isAttrPresent if any attribute is present or not
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530547 * @param imports list of imports
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530548 * @return impl class file
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530549 * @throws IOException when fails to write in file
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530550 */
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530551 public static File generateImplClassFile(File file, YangNode curNode, boolean isAttrPresent, List<String> imports)
Vinod Kumar S38046502016-03-23 15:30:27 +0530552 throws IOException {
553
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530554 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530555 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530556
janani b4a6711a2016-05-17 13:12:22 +0530557 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswald50c6382016-07-14 21:57:13 +0530558 String path;
Bharat saraswale707f032016-07-14 23:33:55 +0530559 if (curNode instanceof YangModule || curNode instanceof YangSubModule) {
Bharat saraswald50c6382016-07-14 21:57:13 +0530560 path = javaFileInfo.getPluginConfig().getCodeGenDir() + javaFileInfo.getPackageFilePath();
561 } else {
562 path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
563 }
Vinod Kumar S38046502016-03-23 15:30:27 +0530564
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530565 initiateJavaFileGeneration(file, IMPL_CLASS_MASK, imports, curNode, className);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530566
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530567 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +0530568 if (curNode instanceof YangAugmentableNode) {
569 insertDataIntoJavaFile(file, addAugmentationAttribute());
570 }
Bharat saraswal2f11f652016-03-25 18:19:46 +0530571 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530572
573 //Add attribute strings.
Bharat saraswal2f11f652016-03-25 18:19:46 +0530574 try {
575 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530576 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
577 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530578 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530579 } catch (IOException e) {
580 throw new IOException("No data found in temporary java code fragment files for " + className
581 + " while impl class file generation");
582 }
Bharat saraswal8f2a6c52016-03-09 18:34:56 +0530583
Bharat saraswal2f11f652016-03-25 18:19:46 +0530584 try {
Bharat saraswale707f032016-07-14 23:33:55 +0530585 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530586 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
587 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530588 .getBeanTempFiles(), path));
Bharat saraswal2f11f652016-03-25 18:19:46 +0530589
Bharat saraswale707f032016-07-14 23:33:55 +0530590
591 // Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +0530592 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530593 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
594 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530595 .getBeanTempFiles(), path).replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale707f032016-07-14 23:33:55 +0530596
597 //Equals method.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530598 methods.add(getEqualsMethodClose(getEqualsMethodOpen(getCapitalCase(DEFAULT) + className)
599 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
600 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
601 .getBeanTempFiles(), path)));
Bharat saraswale707f032016-07-14 23:33:55 +0530602
603 // To string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530604 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
605 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530606 .getBeanTempFiles(), path)
Bharat saraswal2f11f652016-03-25 18:19:46 +0530607 + getToStringMethodClose());
608
609 } catch (IOException e) {
610 throw new IOException("No data found in temporary java code fragment files for " + className
611 + " while impl class file generation");
612 }
613 } else {
614 insertDataIntoJavaFile(file, NEW_LINE);
Vinod Kumar S38046502016-03-23 15:30:27 +0530615 }
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530616 try {
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530617
Bharat saraswale707f032016-07-14 23:33:55 +0530618 //Constructor.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530619 String constructor = getConstructorStart(className, pluginConfig);
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530620 constructor = constructor + getDataFromTempFileHandle(CONSTRUCTOR_IMPL_MASK,
621 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
622 .getBeanTempFiles(), path);
Bharat saraswalab4c6ba2016-05-17 14:19:38 +0530623
624 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
Vinod Kumar S38046502016-03-23 15:30:27 +0530625 } catch (IOException e) {
626 throw new IOException("No data found in temporary java code fragment files for " + className
627 + " while impl class file generation");
Vinod Kumar Sc4216002016-03-03 19:55:30 +0530628 }
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530629
Bharat saraswalb551aae2016-07-14 15:18:20 +0530630 if (curNode instanceof YangAugmentableNode) {
631 methods.add(getAddAugmentInfoMethodImpl());
632 methods.add(getAugmentInfoImpl());
Bharat saraswald50c6382016-07-14 21:57:13 +0530633 methods.add(getAugmentInfoMapImpl(javaFileInfo.getPluginConfig()));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530634 }
635
Bharat saraswale707f032016-07-14 23:33:55 +0530636 // Add methods in impl class.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530637 for (String method : methods) {
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530638 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530639 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530640
Bharat saraswal33dfa012016-05-17 19:59:16 +0530641 return validateLineLength(file);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530642 }
643
644 /**
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530645 * Returns generated op param class file for current node.
646 *
Bharat saraswald50c6382016-07-14 21:57:13 +0530647 * @param file file handle
648 * @param curNode current YANG node
649 * @param isAttrPresent if any attribute is present or not
650 * @param imports import list
651 * @return returns generated op param class file for current node
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530652 * @throws IOException when fails to write in file
653 */
654 public static File generateOpParamImplClassFile(File file, YangNode curNode,
655 boolean isAttrPresent, List<String> imports)
656 throws IOException {
657
658 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
659 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
660
661 String className = getCapitalCase(javaFileInfo.getJavaName());
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530662
663 initiateJavaFileGeneration(file, OPERATION_CLASS_MASK, imports, curNode, className);
664
665 List<String> methods = new ArrayList<>();
666
667 if (isAttrPresent) {
Bharat saraswale707f032016-07-14 23:33:55 +0530668
669 // Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530670 try {
671 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PUBLIC + SPACE + STATIC +
672 SPACE + ENUM + SPACE + OPERATION_ENUM + SPACE + OPEN_CURLY_BRACKET +
673 NEW_LINE + EIGHT_SPACE_INDENTATION + MERGE +
674 NEW_LINE + EIGHT_SPACE_INDENTATION + REPLACE +
675 NEW_LINE + EIGHT_SPACE_INDENTATION + CREATE +
676 NEW_LINE + EIGHT_SPACE_INDENTATION + DELETE +
677 NEW_LINE + EIGHT_SPACE_INDENTATION + REMOVE +
678 NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
679
680 } catch (IOException e) {
681 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530682 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530683 }
684
Bharat saraswale707f032016-07-14 23:33:55 +0530685
686 // Add attribute strings.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530687 try {
688 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
689 OPERATION_ENUM + SPACE + OP_PARAM_TYPE + SEMI_COLAN + NEW_LINE);
690
691 } catch (IOException e) {
692 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530693 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530694 }
695
696 try {
697 if (curNode instanceof YangLeavesHolder) {
698 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
699 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
700 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
701
702 if (leaves != null && !leaves.isEmpty()) {
703 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
704 BITSET + SPACE + FILTER_LEAF + SPACE + EQUAL + SPACE +
705 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
706 + SEMI_COLAN + NEW_LINE);
707
708 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
709 BITSET + SPACE + SELECT_LEAF + SPACE + EQUAL + SPACE +
710 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
711 + SEMI_COLAN + NEW_LINE);
712 }
713
714 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
715 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
716 BITSET + SPACE + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE +
717 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
718 + SEMI_COLAN + NEW_LINE);
719
720 insertDataIntoJavaFile(file, FOUR_SPACE_INDENTATION + PRIVATE + SPACE +
721 BITSET + SPACE + SELECT_LEAF_LIST + SPACE + EQUAL + SPACE +
722 NEW + SPACE + BITSET + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
723 + SEMI_COLAN + NEW_LINE);
724 }
725 }
726
727 } catch (IOException e) {
728 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswald50c6382016-07-14 21:57:13 +0530729 + " while impl class file generation");
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530730 }
731
732 if (curNode instanceof YangLeavesHolder) {
733 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
734 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
735 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
736
737 if (leaves != null && !leaves.isEmpty()) {
738 methods.add(getToStringLeafgetter());
739 methods.add(getToStringSelectLeafgetter());
740 }
741
742 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
743 methods.add(getToStringLeafListgetter());
744 methods.add(getToStringSelectLeafListgetter());
745 }
746 }
747
748 methods.add(getOperationTypegetter());
Bharat saraswald50c6382016-07-14 21:57:13 +0530749 methods.add(getIsFilterContentMatch(className, curNode, pluginConfig));
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530750
751 } else {
752 insertDataIntoJavaFile(file, NEW_LINE);
753 }
754 String constructor = getOpParamConstructorStart(className, pluginConfig);
755
756 constructor = constructor + EIGHT_SPACE_INDENTATION + SUPER + OPEN_PARENTHESIS
757 + BUILDER.toLowerCase() + OBJECT
758 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
759
760 if (curNode instanceof YangLeavesHolder) {
761 YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
762 List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
763 List<YangLeafList> listOfLeafList = leavesHolder.getListOfLeafList();
764 String filterLeaf = "";
765 String filterLeafList = "";
766
767 if (leaves != null && !leaves.isEmpty()) {
768 filterLeaf = EIGHT_SPACE_INDENTATION + FILTER_LEAF + SPACE + EQUAL + SPACE
769 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF + OPEN_PARENTHESIS
770 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
771 }
772
773 if (listOfLeafList != null && !listOfLeafList.isEmpty()) {
774 filterLeafList = EIGHT_SPACE_INDENTATION + FILTER_LEAF_LIST + SPACE + EQUAL + SPACE
775 + BUILDER.toLowerCase() + OBJECT + PERIOD + GET_FILTER_LEAF_LIST + OPEN_PARENTHESIS
776 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
777 }
778
779 constructor = constructor + filterLeaf + filterLeafList;
780 }
781
782 methods.add(constructor + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET);
783
Bharat saraswald50c6382016-07-14 21:57:13 +0530784 if (curNode instanceof YangAugment) {
785 String clsName = getCapitalCase(DEFAULT) +
786 getCapitalCase(YangJavaModelUtils.getAugmentClassName((YangAugment) curNode, pluginConfig));
787 methods.add(getBaseClassMethodImpl(clsName));
788 }
789
Bharat saraswale707f032016-07-14 23:33:55 +0530790 // Add methods in impl class.
Shankara-Huaweib9999eb2016-07-14 16:53:09 +0530791 for (String method : methods) {
792 insertDataIntoJavaFile(file, method);
793 }
794
795
796 return validateLineLength(file);
797 }
798
799 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530800 * Generates class file for type def.
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530801 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530802 * @param file generated file
Vinod Kumar S38046502016-03-23 15:30:27 +0530803 * @param curNode current YANG node
Bharat saraswale2d51d62016-03-23 19:40:35 +0530804 * @param imports imports for file
805 * @return type def class file
806 * @throws IOException when fails to generate class file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530807 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530808 public static File generateTypeDefClassFile(File file, YangNode curNode, List<String> imports)
809 throws IOException {
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530810
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530811 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530812 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Vinod Kumar S38046502016-03-23 15:30:27 +0530813
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530814 // import
janani b4a6711a2016-05-17 13:12:22 +0530815 String className = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswale2d51d62016-03-23 19:40:35 +0530816 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530817 YangTypeDef typeDef = (YangTypeDef) curNode;
818 List<YangType<?>> types = typeDef.getTypeList();
819 YangType type = types.get(0);
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530820 YangDataTypes yangDataTypes = type.getDataType();
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530821 if (type.getDataType().equals(YangDataTypes.BINARY)) {
822 imports.add(IMPORT + JAVA_UTIL_OBJECTS_IMPORT_PKG + PERIOD + JAVA_UTIL_IMPORT_BASE64_CLASS);
823 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530824
Bharat saraswal33dfa012016-05-17 19:59:16 +0530825 initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS, imports, path, pluginConfig);
Vinod Kumar S38046502016-03-23 15:30:27 +0530826
Bharat saraswale2d51d62016-03-23 19:40:35 +0530827 List<String> methods = new ArrayList<>();
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530828
Bharat saraswale707f032016-07-14 23:33:55 +0530829
830 //Add attribute strings.
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530831 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530832 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530833 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
834 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530835 .getTypeTempFiles(), path));
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530836 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530837 throw new IOException("No data found in temporary java code fragment files for " + className
838 + " while type def class file generation");
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530839 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530840
Bharat saraswale707f032016-07-14 23:33:55 +0530841
842 //Default constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530843 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +0530844 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Vinod Kumar S38046502016-03-23 15:30:27 +0530845
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530846 try {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530847
Bharat saraswale707f032016-07-14 23:33:55 +0530848
849 //Type constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530850 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530851 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
852 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530853
Bharat saraswale707f032016-07-14 23:33:55 +0530854
855 //Of method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530856 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530857 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
858 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530859
Bharat saraswale707f032016-07-14 23:33:55 +0530860 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530861 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530862 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
863 path));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530864
Bharat saraswale707f032016-07-14 23:33:55 +0530865
866 // Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +0530867 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530868 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
869 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530870 .getTypeTempFiles(), path)
871 .replace(NEW_LINE, EMPTY_STRING)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530872
Bharat saraswale707f032016-07-14 23:33:55 +0530873
874 //Equals method.
Bharat saraswale2d51d62016-03-23 19:40:35 +0530875 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530876 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530877 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
878 .getTypeTempFiles(), path)));
Bharat saraswale2d51d62016-03-23 19:40:35 +0530879
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530880
Bharat saraswale707f032016-07-14 23:33:55 +0530881 //To string method.
882 if (type.getDataType().equals(YangDataTypes.BINARY)) {
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530883 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswale707f032016-07-14 23:33:55 +0530884 getCapitalCase("binary"));
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530885
Bharat saraswale707f032016-07-14 23:33:55 +0530886 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "binary", null, false,
887 false);
888 String attributeName = attr.getAttributeName();
889 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
890 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
891 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
892 + RETURN + SPACE + BASE64 + PERIOD + GET_ENCODER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
893 + PERIOD + ENCODE_TO_STRING + OPEN_PARENTHESIS + attributeName + CLOSE_PARENTHESIS
894 + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
895 methods.add(bitsToStringMethod);
896 } else if (type.getDataType().equals(YangDataTypes.BITS)) {
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530897 JavaQualifiedTypeInfoTranslator qualifiedTypeInfo = getQualifiedTypeInfoOfCurNode(curNode,
Bharat saraswale707f032016-07-14 23:33:55 +0530898 getCapitalCase("bits"));
899
900 JavaAttributeInfo attr = getAttributeInfoForTheData(qualifiedTypeInfo, "bits", null, false, false);
901 String attributeName = attr.getAttributeName();
902 String bitsToStringMethod = MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC
903 + SPACE + STRING_DATA_TYPE + SPACE + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
904 + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION
905 + RETURN + SPACE + attributeName + PERIOD + TO + STRING_DATA_TYPE + OPEN_PARENTHESIS
906 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
907 + NEW_LINE;
908 methods.add(bitsToStringMethod);
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530909 } else {
910 methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +0530911 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
912 .getTypeTempFiles(), path) + getToStringMethodClose());
Mahesh Poojary Huawei30c116a2016-07-14 17:49:50 +0530913 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530914
Bharat saraswale707f032016-07-14 23:33:55 +0530915 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
916
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +0530917 if ((type.getDataType().equals(YangDataTypes.DERIVED))
918 && (((YangDerivedInfo) type.getDataTypeExtendedInfo()).getEffectiveBuiltInType()
919 .equals(YangDataTypes.IDENTITYREF))) {
920 yangDataTypes = YangDataTypes.IDENTITYREF;
921 }
922
923 if (type.getDataType().equals(YangDataTypes.IDENTITYREF)) {
924 yangDataTypes = YangDataTypes.IDENTITYREF;
925 }
926
927 if (!yangDataTypes.equals(YangDataTypes.IDENTITYREF)) {
928
929
930 //From string method.
931 methods.add(getFromStringMethodSignature(className, pluginConfig)
932 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK, javaGenInfo
933 .getTempJavaCodeFragmentFiles()
934 .getTypeTempFiles(), path)
935 + getFromStringMethodClose());
936 }
Gaurav Agrawal56527662016-04-20 15:49:17 +0530937
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530938 } catch (IOException e) {
Bharat saraswale2d51d62016-03-23 19:40:35 +0530939 throw new IOException("No data found in temporary java code fragment files for " + className
Bharat saraswalcc1cdab2016-04-16 02:28:25 +0530940 + " while type def class file generation");
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530941 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530942
Bharat saraswale2d51d62016-03-23 19:40:35 +0530943 for (String method : methods) {
944 insertDataIntoJavaFile(file, method);
Bharat saraswal4bf8b152016-02-25 02:26:43 +0530945 }
Bharat saraswale2d51d62016-03-23 19:40:35 +0530946 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530947
Bharat saraswal33dfa012016-05-17 19:59:16 +0530948 return validateLineLength(file);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530949 }
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530950
951 /**
Bharat saraswald72411a2016-04-19 01:00:16 +0530952 * Generates class file for union type.
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530953 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530954 * @param file generated file
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530955 * @param curNode current YANG node
956 * @param imports imports for file
957 * @return type def class file
958 * @throws IOException when fails to generate class file
959 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530960 public static File generateUnionClassFile(File file, YangNode curNode, List<String> imports)
961 throws IOException {
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530962
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530963 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530964 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530965
janani b4a6711a2016-05-17 13:12:22 +0530966 String className = getCapitalCase(javaFileInfo.getJavaName());
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530967 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
968
Bharat saraswale707f032016-07-14 23:33:55 +0530969 TempJavaTypeFragmentFiles tempJavaTypeFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
970 .getTempJavaCodeFragmentFiles().getTypeTempFiles();
971
972 boolean isIntConflict = false;
973 boolean isLongConflict = false;
974 JavaAttributeInfo intAttr = tempJavaTypeFragmentFiles.getIntAttribute();
975 if (intAttr == null) {
976 intAttr = tempJavaTypeFragmentFiles.getUIntAttribute();
977 }
978
979 JavaAttributeInfo longAttr = tempJavaTypeFragmentFiles.getLongAttribute();
980 if (longAttr == null) {
981 longAttr = tempJavaTypeFragmentFiles.getULongAttribute();
982 }
983
984 if (intAttr != null) {
985 isIntConflict = intAttr.isIntConflict();
986 }
987 if (longAttr != null) {
988 isLongConflict = longAttr.isLongConflict();
989 }
990
991 if (isLongConflict) {
992 imports.add(tempJavaTypeFragmentFiles.getJavaImportData().getBigIntegerImport());
993 sort(imports);
994 }
995
Bharat saraswal33dfa012016-05-17 19:59:16 +0530996 initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS, imports, path, pluginConfig);
Gaurav Agrawal338735b2016-04-18 18:53:11 +0530997
998 List<String> methods = new ArrayList<>();
999
Bharat saraswale707f032016-07-14 23:33:55 +05301000
1001 // Add attribute strings.
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301002 try {
Bharat saraswale707f032016-07-14 23:33:55 +05301003 if (isIntConflict) {
1004 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeIntRange(PRIVATE,
1005 tempJavaTypeFragmentFiles.getIntIndex() < tempJavaTypeFragmentFiles.getUIntIndex()));
1006 }
1007
1008 if (isLongConflict) {
1009 insertDataIntoJavaFile(file, JavaCodeSnippetGen.addStaticAttributeLongRange(PRIVATE,
1010 tempJavaTypeFragmentFiles.getLongIndex() < tempJavaTypeFragmentFiles.getULongIndex()));
1011 }
1012
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301013 insertDataIntoJavaFile(file,
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301014 NEW_LINE + FOUR_SPACE_INDENTATION + getDataFromTempFileHandle(ATTRIBUTES_MASK,
1015 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301016 .getTypeTempFiles(), path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301017 } catch (IOException e) {
1018 throw new IOException("No data found in temporary java code fragment files for " + className
1019 + " while union class file generation");
1020 }
1021
Bharat saraswale707f032016-07-14 23:33:55 +05301022
1023 //Default constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301024 methods.add(((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswal33dfa012016-05-17 19:59:16 +05301025 .addDefaultConstructor(PRIVATE, EMPTY_STRING, pluginConfig));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301026
1027 try {
1028
Bharat saraswale707f032016-07-14 23:33:55 +05301029
1030 //Type constructor.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301031 methods.add(getDataFromTempFileHandle(CONSTRUCTOR_FOR_TYPE_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301032 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1033 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301034
Bharat saraswale707f032016-07-14 23:33:55 +05301035
1036 // Of string method.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301037 methods.add(getDataFromTempFileHandle(OF_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301038 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1039 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301040
Bharat saraswale707f032016-07-14 23:33:55 +05301041 //Getter methods.
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301042 methods.add(getDataFromTempFileHandle(GETTER_FOR_CLASS_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301043 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles().getTypeTempFiles(),
1044 path));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301045
Bharat saraswale707f032016-07-14 23:33:55 +05301046
1047 //Hash code method.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301048 methods.add(getHashCodeMethodClose(getHashCodeMethodOpen() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301049 getDataFromTempFileHandle(HASH_CODE_IMPL_MASK,
1050 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301051 .getTypeTempFiles(), path)
1052 .replace(NEW_LINE, EMPTY_STRING)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301053
Bharat saraswale707f032016-07-14 23:33:55 +05301054 //Equals method.
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301055 methods.add(getEqualsMethodClose(getEqualsMethodOpen(className + EMPTY_STRING)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301056 + getDataFromTempFileHandle(EQUALS_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301057 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1058 .getTypeTempFiles(), path)));
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301059
Bharat saraswale707f032016-07-14 23:33:55 +05301060
1061 //To string method.
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301062 methods.add(getToStringMethodOpen() + getOmitNullValueString() +
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301063 getDataFromTempFileHandle(TO_STRING_IMPL_MASK,
1064 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301065 .getTypeTempFiles(), path)
1066 + getToStringMethodClose());
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301067
Bharat saraswale707f032016-07-14 23:33:55 +05301068
1069 //From string method.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301070 methods.add(getFromStringMethodSignature(className, pluginConfig)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301071 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301072 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1073 .getTypeTempFiles(), path)
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301074 + getFromStringMethodClose());
1075
Bharat saraswale707f032016-07-14 23:33:55 +05301076 if (isIntConflict) {
1077 methods.add(MethodsGenerator.getRangeValidatorMethodForUnion(INT));
1078 }
1079 if (isLongConflict) {
1080 methods.add(MethodsGenerator.getRangeValidatorMethodForUnion(BIG_INTEGER));
1081 }
1082
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301083 } catch (IOException e) {
1084 throw new IOException("No data found in temporary java code fragment files for " + className
1085 + " while union class file generation");
1086 }
1087
1088 for (String method : methods) {
1089 insertDataIntoJavaFile(file, method);
1090 }
1091 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1092
Bharat saraswal33dfa012016-05-17 19:59:16 +05301093 return validateLineLength(file);
Gaurav Agrawal338735b2016-04-18 18:53:11 +05301094 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301095
1096 /**
1097 * Generates class file for type enum.
1098 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301099 * @param file generated file
Bharat saraswald72411a2016-04-19 01:00:16 +05301100 * @param curNode current YANG node
1101 * @return class file for type enum
1102 * @throws IOException when fails to generate class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301103 */
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301104 public static File generateEnumClassFile(File file, YangNode curNode)
1105 throws IOException {
Bharat saraswald72411a2016-04-19 01:00:16 +05301106
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301107 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301108 YangPluginConfig pluginConfig = javaFileInfo.getPluginConfig();
Bharat saraswald72411a2016-04-19 01:00:16 +05301109
janani b4a6711a2016-05-17 13:12:22 +05301110 String className = javaFileInfo.getJavaName();
Bharat saraswald72411a2016-04-19 01:00:16 +05301111 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
1112
Bharat saraswal33dfa012016-05-17 19:59:16 +05301113 initiateJavaFileGeneration(file, getCapitalCase(className), GENERATE_ENUM_CLASS, null, path, pluginConfig);
Bharat saraswale707f032016-07-14 23:33:55 +05301114
1115 //Add attribute strings.
Bharat saraswald72411a2016-04-19 01:00:16 +05301116 try {
Bharat saraswale707f032016-07-14 23:33:55 +05301117 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
Bharat saraswald72411a2016-04-19 01:00:16 +05301118 insertDataIntoJavaFile(file,
Bharat saraswale707f032016-07-14 23:33:55 +05301119 trimAtLast(trimAtLast(getDataFromTempFileHandle(ENUM_IMPL_MASK, javaGenInfo
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301120 .getTempJavaCodeFragmentFiles().getEnumerationTempFiles(), path), COMMA), NEW_LINE)
Bharat saraswald72411a2016-04-19 01:00:16 +05301121 + SEMI_COLAN + NEW_LINE);
1122 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301123 throw new IOException("No data found in temporary java code fragment files for " + getCapitalCase(className)
Bharat saraswald72411a2016-04-19 01:00:16 +05301124 + " while enum class file generation");
1125 }
1126
Bharat saraswale707f032016-07-14 23:33:55 +05301127
1128 // Add an attribute to get the enum's values.
janani b4a6711a2016-05-17 13:12:22 +05301129 insertDataIntoJavaFile(file, getEnumsValueAttribute(getCapitalCase(className)));
Bharat saraswald72411a2016-04-19 01:00:16 +05301130
Bharat saraswale707f032016-07-14 23:33:55 +05301131 // Add a constructor for enum.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301132 insertDataIntoJavaFile(file, getJavaDoc(TYPE_CONSTRUCTOR, className, false, pluginConfig)
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301133 + getEnumsConstructor(getCapitalCase(className)) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301134
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301135 TempJavaEnumerationFragmentFiles enumFragFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1136 .getTempJavaCodeFragmentFiles()
1137 .getEnumerationTempFiles();
Bharat saraswalc0e04842016-05-12 13:16:57 +05301138 insertDataIntoJavaFile(file, getEnumsOfMethod(className,
Bharat saraswal33dfa012016-05-17 19:59:16 +05301139 enumFragFiles.getJavaAttributeForEnum(pluginConfig),
Bharat saraswalc0e04842016-05-12 13:16:57 +05301140 enumFragFiles.getEnumSetJavaMap(),
Bharat saraswal33dfa012016-05-17 19:59:16 +05301141 enumFragFiles.getEnumStringList(), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301142 + NEW_LINE);
Bharat saraswald72411a2016-04-19 01:00:16 +05301143
Bharat saraswale707f032016-07-14 23:33:55 +05301144 // Add a getter method for enum.
Bharat saraswal33dfa012016-05-17 19:59:16 +05301145 insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false, pluginConfig)
janani b4a6711a2016-05-17 13:12:22 +05301146 + getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
Bharat saraswalc0e04842016-05-12 13:16:57 +05301147
1148 try {
Bharat saraswal33dfa012016-05-17 19:59:16 +05301149 insertDataIntoJavaFile(file, getFromStringMethodSignature(getCapitalCase(className), pluginConfig)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301150 + getDataFromTempFileHandle(FROM_STRING_IMPL_MASK,
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301151 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
1152 .getEnumerationTempFiles(), path)
Bharat saraswalc0e04842016-05-12 13:16:57 +05301153 + getFromStringMethodClose());
1154 } catch (IOException e) {
janani b4a6711a2016-05-17 13:12:22 +05301155 throw new IOException("No data found in temporary java code fragment files for " +
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301156 getCapitalCase(className) + " while enum class file generation");
Bharat saraswalc0e04842016-05-12 13:16:57 +05301157 }
Bharat saraswald72411a2016-04-19 01:00:16 +05301158
1159 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1160
Bharat saraswal33dfa012016-05-17 19:59:16 +05301161 return validateLineLength(file);
Bharat saraswald72411a2016-04-19 01:00:16 +05301162 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301163
1164 /**
1165 * Generates interface file for rpc.
1166 *
Bharat saraswale707f032016-07-14 23:33:55 +05301167 * @param file generated file
1168 * @param curNode current YANG node
1169 * @param imports imports for file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301170 * @return rpc class file
Gaurav Agrawal56527662016-04-20 15:49:17 +05301171 * @throws IOException when fails to generate class file
1172 */
Bharat saraswalb551aae2016-07-14 15:18:20 +05301173 public static File generateServiceInterfaceFile(File file, YangNode curNode, List<String> imports)
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301174 throws IOException {
Gaurav Agrawal56527662016-04-20 15:49:17 +05301175
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +05301176 JavaFileInfo javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
Gaurav Agrawal56527662016-04-20 15:49:17 +05301177
Bharat saraswalb551aae2016-07-14 15:18:20 +05301178 TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = ((JavaCodeGeneratorInfo) curNode)
1179 .getTempJavaCodeFragmentFiles().getServiceTempFiles();
janani b4a6711a2016-05-17 13:12:22 +05301180 String className = getCapitalCase(javaFileInfo.getJavaName()) + SERVICE_METHOD_STRING;
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301181 String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo.getPackageFilePath();
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301182 initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports, curNode, className);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301183
1184 List<String> methods = new ArrayList<>();
Bharat saraswalb551aae2016-07-14 15:18:20 +05301185 JavaAttributeInfo rootAttribute = getCurNodeAsAttributeInTarget(curNode, curNode, false,
1186 tempJavaServiceFragmentFiles);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301187
1188 try {
Bharat saraswale707f032016-07-14 23:33:55 +05301189
1190 //Getter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +05301191 methods.add(getGetterString(rootAttribute, GENERATE_SERVICE_AND_MANAGER,
1192 javaFileInfo.getPluginConfig()) + NEW_LINE);
Bharat saraswale707f032016-07-14 23:33:55 +05301193 // Setter methods.
Bharat saraswalb551aae2016-07-14 15:18:20 +05301194 methods.add(getSetterString(rootAttribute, className, GENERATE_SERVICE_AND_MANAGER,
1195 javaFileInfo.getPluginConfig()) + NEW_LINE);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301196
Bharat saraswalb551aae2016-07-14 15:18:20 +05301197 methods.add(getAugmentsDataMethodForService(curNode) + NEW_LINE);
1198
Bharat saraswalc0e04842016-05-12 13:16:57 +05301199 if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles().getServiceTempFiles() != null) {
Bharat saraswale707f032016-07-14 23:33:55 +05301200 JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
1201
1202 // Rpc methods
Bharat saraswalc0e04842016-05-12 13:16:57 +05301203 methods.add(getDataFromTempFileHandle(RPC_INTERFACE_MASK,
Bharat saraswale707f032016-07-14 23:33:55 +05301204 javaGenInfo.getTempJavaCodeFragmentFiles().getServiceTempFiles(), path));
Bharat saraswalc0e04842016-05-12 13:16:57 +05301205 }
Gaurav Agrawal56527662016-04-20 15:49:17 +05301206 } catch (IOException e) {
1207 throw new IOException("No data found in temporary java code fragment files for " + className
1208 + " while rpc class file generation");
1209 }
1210
1211 for (String method : methods) {
1212 insertDataIntoJavaFile(file, method);
1213 }
1214 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1215
Bharat saraswal33dfa012016-05-17 19:59:16 +05301216 return validateLineLength(file);
Gaurav Agrawal56527662016-04-20 15:49:17 +05301217 }
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301218
1219 /**
1220 * Generates event file.
1221 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301222 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301223 * @param curNode current YANG node
1224 * @param imports imports for file
1225 * @throws IOException when fails to generate class file
1226 */
Bharat saraswalab4c6ba2016-05-17 14:19:38 +05301227 public static void generateEventFile(File file, YangNode curNode, List<String> imports) throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301228
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301229 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1230 + EVENT_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301231
Bharat saraswald50c6382016-07-14 21:57:13 +05301232 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1233 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301234
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301235 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1236 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301237 initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode, className);
1238 try {
1239 insertDataIntoJavaFile(file, NEW_LINE + getEventEnumTypeStart() +
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301240 trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK, tempFiles, path), COMMA)
Bharat saraswal33dfa012016-05-17 19:59:16 +05301241 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE);
1242
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301243 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_METHOD_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301244
1245 } catch (IOException e) {
1246 throw new IOException("No data found in temporary java code fragment files for " + className
1247 + " while event class file generation");
1248 }
1249
1250 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1251 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301252 }
1253
1254 /**
1255 * Generates event listener file.
1256 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301257 * @param file generated file
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301258 * @param curNode current YANG node
1259 * @param imports imports for file
1260 * @throws IOException when fails to generate class file
1261 */
1262 public static void generateEventListenerFile(File file, YangNode curNode, List<String> imports)
1263 throws IOException {
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301264
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301265 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1266 + EVENT_LISTENER_STRING;
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301267
Bharat saraswal33dfa012016-05-17 19:59:16 +05301268 initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE, imports, curNode, className);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301269 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
Bharat saraswal33dfa012016-05-17 19:59:16 +05301270 validateLineLength(file);
1271 }
1272
1273 /**
1274 * Generates event subject's file.
1275 *
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301276 * @param file file handle
Bharat saraswal33dfa012016-05-17 19:59:16 +05301277 * @param curNode current YANG node
1278 * @throws IOException when fails to do IO exceptions
1279 */
1280 public static void generateEventSubjectFile(File file, YangNode curNode)
1281 throws IOException {
1282
1283 String className = getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo().getJavaName())
1284 + EVENT_SUBJECT_NAME_SUFFIX;
1285
1286 initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null, curNode, className);
1287
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301288 String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo().getBaseCodeGenPath()
1289 + ((JavaFileInfoContainer) curNode).getJavaFileInfo().getPackageFilePath();
Bharat saraswald50c6382016-07-14 21:57:13 +05301290
1291 TempJavaEventFragmentFiles tempFiles = ((TempJavaCodeFragmentFilesContainer) curNode)
1292 .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
Bharat saraswal33dfa012016-05-17 19:59:16 +05301293
1294 insertDataIntoJavaFile(file, NEW_LINE);
1295 try {
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301296 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301297
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301298 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301299
Bharat saraswalb1170bd2016-07-14 13:26:18 +05301300 insertDataIntoJavaFile(file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK, tempFiles, path));
Bharat saraswal33dfa012016-05-17 19:59:16 +05301301
1302 } catch (IOException e) {
1303 throw new IOException("No data found in temporary java code fragment files for " + className
1304 + " while event class file generation");
1305 }
1306
1307 insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
1308 validateLineLength(file);
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +05301309 }
Bharat saraswal4bf8b152016-02-25 02:26:43 +05301310}