blob: e179903cf19442bd30ce47ee2c68ef1c3c0021fa [file] [log] [blame]
Bharat saraswal97459962016-02-20 21:57:16 +05301/*
Brian O'Connor0f7908b2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Bharat saraswal97459962016-02-20 21:57:16 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.translator.tojava.utils;
18
Bharat saraswal0663aff2016-10-18 23:16:14 +053019import org.onosproject.yangutils.datamodel.InvalidOpTypeHolder;
Bharat saraswalb41904b2016-10-20 19:22:36 +053020import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
Bharat saraswala5c28512016-11-10 21:09:23 +053021import org.onosproject.yangutils.datamodel.YangAppDataStructure;
Bharat saraswal039f59c2016-07-14 21:57:13 +053022import org.onosproject.yangutils.datamodel.YangAtomicPath;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053023import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
Bharat saraswala5c28512016-11-10 21:09:23 +053024import org.onosproject.yangutils.datamodel.YangDataStructure;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053025import org.onosproject.yangutils.datamodel.YangEnum;
26import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswala5c28512016-11-10 21:09:23 +053027import org.onosproject.yangutils.datamodel.YangIdentity;
28import org.onosproject.yangutils.datamodel.YangIdentityRef;
Bharat saraswal94844d62016-10-13 13:28:03 +053029import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswalaf413b82016-07-14 15:18:20 +053030import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053031import org.onosproject.yangutils.datamodel.YangType;
janani b0e4e8ae2016-07-13 21:06:41 +053032import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053033import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal039f59c2016-07-14 21:57:13 +053034import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053035import org.onosproject.yangutils.utils.io.YangPluginConfig;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053036import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
Bharat saraswal84366c52016-03-23 19:40:35 +053037
Bharat saraswala5c28512016-11-10 21:09:23 +053038import java.util.ArrayList;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053039import java.util.LinkedHashMap;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053040import java.util.List;
Bharat saraswala5c28512016-11-10 21:09:23 +053041import java.util.Map;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053042
Bharat saraswala5c28512016-11-10 21:09:23 +053043import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
Bharat saraswal715d3fc2016-05-17 19:59:16 +053044import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053045import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053046import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053047import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053048import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
49import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053050import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053051import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053052import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
Bharat saraswal039f59c2016-07-14 21:57:13 +053053import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053054import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053055import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053056import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
57import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.GETTER;
58import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
59import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.SETTER;
60import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.TO_STRING;
61import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
62import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
63import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053064import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
65import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053066import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
Bharat saraswal51c5d672016-11-13 09:03:48 +053067import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getExceptionThrowString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053068import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053069import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
70import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
Bharat saraswal0663aff2016-10-18 23:16:14 +053071import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053072import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053073import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getListAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053074import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053075import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
76import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
Bharat saraswal0663aff2016-10-18 23:16:14 +053077import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053078import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053079import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
80import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getPatternQuoteString;
81import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getQuotedString;
82import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnOfSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053083import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053084import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
Bharat saraswal94844d62016-10-13 13:28:03 +053085import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getStringBuilderAttr;
86import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getToStringCall;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053087import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTrySubString;
Bharat saraswala5c28512016-11-10 21:09:23 +053088import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053089import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
90import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
91import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
92import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
93import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
94import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
95import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
96import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
97import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal64e7e232016-07-14 23:33:55 +053098import static org.onosproject.yangutils.utils.UtilConstants.ADD;
Bharat saraswal84366c52016-03-23 19:40:35 +053099import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
100import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal94844d62016-10-13 13:28:03 +0530101import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
Bharat saraswal51c5d672016-11-13 09:03:48 +0530102import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_INIT;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530103import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530104import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530105import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530106import static org.onosproject.yangutils.utils.UtilConstants.BITS;
107import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530108import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
109import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
110import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530112import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530113import static org.onosproject.yangutils.utils.UtilConstants.CASE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530114import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
115import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530116import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
117import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530118import static org.onosproject.yangutils.utils.UtilConstants.COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530119import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswala5c28512016-11-10 21:09:23 +0530120import static org.onosproject.yangutils.utils.UtilConstants.COMPARE_TO;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530121import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530122import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530123import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswala5c28512016-11-10 21:09:23 +0530124import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
125import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530126import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530127import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530128import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal94844d62016-10-13 13:28:03 +0530129import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Bharat saraswal8beac342016-08-04 02:00:03 +0530130import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530131import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
132import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
Bharat saraswala5c28512016-11-10 21:09:23 +0530133import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
Bharat saraswal84366c52016-03-23 19:40:35 +0530134import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530135import static org.onosproject.yangutils.utils.UtilConstants.FOR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530136import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530137import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530138import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
139import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530140import static org.onosproject.yangutils.utils.UtilConstants.GET;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530141import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
Bharat saraswal94844d62016-10-13 13:28:03 +0530142import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530143import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
144import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
145import static org.onosproject.yangutils.utils.UtilConstants.HASH;
146import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
147import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal84366c52016-03-23 19:40:35 +0530148import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
149import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530150import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
Bharat saraswal8beac342016-08-04 02:00:03 +0530151import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
Bharat saraswala5c28512016-11-10 21:09:23 +0530152import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530153import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530154import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswala5c28512016-11-10 21:09:23 +0530155import static org.onosproject.yangutils.utils.UtilConstants.LINKED_HASH_MAP;
156import static org.onosproject.yangutils.utils.UtilConstants.LINKED_HASH_SET;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530157import static org.onosproject.yangutils.utils.UtilConstants.LONG;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530158import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
159import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
Bharat saraswala5c28512016-11-10 21:09:23 +0530160import static org.onosproject.yangutils.utils.UtilConstants.NEG_ONE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530161import static org.onosproject.yangutils.utils.UtilConstants.NEW;
162import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530163import static org.onosproject.yangutils.utils.UtilConstants.NOT;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530164import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
166import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
167import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
168import static org.onosproject.yangutils.utils.UtilConstants.OF;
Bharat saraswal94844d62016-10-13 13:28:03 +0530169import static org.onosproject.yangutils.utils.UtilConstants.OF_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530170import static org.onosproject.yangutils.utils.UtilConstants.ONE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530171import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530172import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
173import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswala5c28512016-11-10 21:09:23 +0530174import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
Bharat saraswal8beac342016-08-04 02:00:03 +0530175import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
177import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
178import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswala5c28512016-11-10 21:09:23 +0530179import static org.onosproject.yangutils.utils.UtilConstants.PRIORITY_QUEUE;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530180import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530181import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
182import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530183import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswala5c28512016-11-10 21:09:23 +0530184import static org.onosproject.yangutils.utils.UtilConstants.PUT;
Bharat saraswal94844d62016-10-13 13:28:03 +0530185import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Bharat saraswal84366c52016-03-23 19:40:35 +0530186import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
187import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530188import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530189import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530190import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
191import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530192import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal8beac342016-08-04 02:00:03 +0530193import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530194import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
Bharat saraswal84366c52016-03-23 19:40:35 +0530195import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
196import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530197import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
198import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530199import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Bharat saraswal94844d62016-10-13 13:28:03 +0530200import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
Bharat saraswal84366c52016-03-23 19:40:35 +0530201import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530202import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530203import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
Bharat saraswal250a7472016-05-12 13:16:57 +0530204import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
Bharat saraswal84366c52016-03-23 19:40:35 +0530205import static org.onosproject.yangutils.utils.UtilConstants.THIS;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530206import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530207import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530208import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530209import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530210import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
211import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530212import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530213import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswala5c28512016-11-10 21:09:23 +0530214import static org.onosproject.yangutils.utils.UtilConstants.VALUE_CAPS;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530215import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530216import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530217import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530218import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530219import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Bharat saraswala5c28512016-11-10 21:09:23 +0530220import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
Bharat saraswal84366c52016-03-23 19:40:35 +0530221import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
222import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
223import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530224import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530225import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530226import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530227import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530228import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530229import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530230import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530231import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530232import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530233import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530234import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530235import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530236import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
237import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
238import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530239import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +0530240
241/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530242 * Represents generator for methods of generated files based on the file type.
Bharat saraswal97459962016-02-20 21:57:16 +0530243 */
244public final class MethodsGenerator {
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530245 private static final String BIT_NAMES_VAR = "bitNames";
246 private static final String BIT_NAME_VAR = "bitName";
Bharat saraswal97459962016-02-20 21:57:16 +0530247
Bharat saraswal97459962016-02-20 21:57:16 +0530248 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530249 * Creates an instance of method generator.
Bharat saraswal97459962016-02-20 21:57:16 +0530250 */
251 private MethodsGenerator() {
252 }
253
254 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530255 * Returns the methods strings for builder interface.
256 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530257 * @param name attribute name
Vinod Kumar S08710982016-03-03 19:55:30 +0530258 * @return method string for builder interface
Bharat saraswal97459962016-02-20 21:57:16 +0530259 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530260 public static String parseBuilderInterfaceBuildMethodString(String name) {
261 return getJavaDoc(BUILD_METHOD, name, false, null) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530262 getBuildForInterface(name);
Bharat saraswal97459962016-02-20 21:57:16 +0530263 }
264
265 /**
266 * Returns getter string.
267 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530268 * @param attr attribute info
269 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530270 * @return getter string
271 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530272 public static String getGetterString(JavaAttributeInfo attr, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530273
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530274 String returnType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530275 String attributeName = attr.getAttributeName();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530276 String appDataStructure = null;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530277 StringBuilder builder = new StringBuilder();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530278 if (attr.getCompilerAnnotation() != null) {
Bharat saraswala5c28512016-11-10 21:09:23 +0530279 YangDataStructure data = getYangDataStructure(
280 attr.getCompilerAnnotation());
281 if (data != null) {
282 appDataStructure = data.name();
283 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530284 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530285 if (genType == GENERATE_SERVICE_AND_MANAGER) {
286 builder.append(generateForGetMethodWithAttribute(returnType))
287 .append(getGetterForInterface(
288 attributeName, returnType, attr.isListAttr(),
289 genType, attr.getCompilerAnnotation()));
290
291 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +0530292 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530293
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530294 builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
295 .isListAttr(), appDataStructure))
296 .append(getGetterForInterface(
297 attributeName, returnType, attr.isListAttr(),
298 genType, attr.getCompilerAnnotation()));
299
300 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530301 }
302
303 /**
304 * Returns setter string.
305 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530306 * @param attr attribute info
307 * @param className java class name
308 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530309 * @return setter string
310 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530311 public static String getSetterString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530312 String className, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530313
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530314 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530315 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530316 JavaDocGen.JavaDocType type;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530317 StringBuilder builder = new StringBuilder();
318 if (genType == GENERATE_SERVICE_AND_MANAGER) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530319 type = MANAGER_SETTER_METHOD;
320 } else {
321 type = SETTER_METHOD;
322 }
Bharat saraswal97459962016-02-20 21:57:16 +0530323
Vidyashree Ramab3670472016-08-06 15:49:56 +0530324 String appDataStructure = null;
Bharat saraswala5c28512016-11-10 21:09:23 +0530325 YangDataStructure ds = getYangDataStructure(
326 attr.getCompilerAnnotation());
327 if (ds != null) {
328 appDataStructure = ds.name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530329 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530330 builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
331 appDataStructure))
332 .append(getSetterForInterface(attributeName, attrType, className,
333 attr.isListAttr(), genType,
334 attr.getCompilerAnnotation()));
335 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530336 }
337
338 /**
339 * Returns constructor method string.
340 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530341 * @param name class name
Bharat saraswal97459962016-02-20 21:57:16 +0530342 * @return constructor string
343 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530344 private static String getConstructorString(String name) {
345 return getJavaDoc(CONSTRUCTOR, name, false, null);
Bharat saraswal97459962016-02-20 21:57:16 +0530346 }
347
348 /**
349 * Returns default constructor method string.
350 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530351 * @param name class name
Bharat saraswal022dae92016-03-04 20:08:09 +0530352 * @param modifierType modifier type
Bharat saraswal97459962016-02-20 21:57:16 +0530353 * @return default constructor string
354 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530355 public static String getDefaultConstructorString(String name,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530356 String modifierType) {
357 return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
Vidyashree Ramab3670472016-08-06 15:49:56 +0530358 + getDefaultConstructor(name, modifierType) + NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530359 }
360
361 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530362 * Returns build method string.
363 *
Bharat saraswal94844d62016-10-13 13:28:03 +0530364 * @param name class name
365 * @param isRoot true if root node
Bharat saraswal97459962016-02-20 21:57:16 +0530366 * @return build string
367 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530368 public static String getBuildString(String name, boolean isRoot) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530369 return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
Bharat saraswal94844d62016-10-13 13:28:03 +0530370 getBuild(name, isRoot);
Bharat saraswal97459962016-02-20 21:57:16 +0530371 }
372
373 /**
374 * Returns the getter method strings for class file.
375 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530376 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530377 * @param generatedJavaFiles for the type of java file being generated
Vinod Kumar S08710982016-03-03 19:55:30 +0530378 * @return getter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530379 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530380 public static String getGetterForClass(JavaAttributeInfo attr,
381 int generatedJavaFiles) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530382
Bharat saraswal8beac342016-08-04 02:00:03 +0530383 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530384 String attributeName = attr.getAttributeName();
Bharat saraswal022dae92016-03-04 20:08:09 +0530385
386 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530387 return getGetter(attrQualifiedType, attributeName,
388 generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530389 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530390 String attrParam = getListAttribute(attrQualifiedType,
391 attr.getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530392 return getGetter(attrParam, attributeName, generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530393 }
394
395 /**
396 * Returns getter for attribute.
397 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530398 * @param type return type
399 * @param name attribute name
400 * @param genType generated java files
Bharat saraswal022dae92016-03-04 20:08:09 +0530401 * @return getter for attribute
402 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530403 static String getGetter(String type, String name, int genType) {
404 StringBuilder builder = new StringBuilder();
405 if (genType == GENERATE_SERVICE_AND_MANAGER) {
406 //Append method signature.
407 builder.append(methodSignature(getCapitalCase(name), GET,
408 PUBLIC, null, type, null,
409 CLASS_TYPE))
410 //Append method body.
411 .append(methodBody(MANAGER_METHODS, null, null,
412 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530413 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530414 .append(signatureClose())
415 //Append method close.
416 .append(methodClose(FOUR_SPACE));
417 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530418 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530419 builder.append(methodSignature(name, EMPTY_STRING,
420 PUBLIC, null, type, null,
421 CLASS_TYPE))
422 //Append method body.
423 .append(methodBody(GETTER, name, name,
424 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530425 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530426 .append(signatureClose())
427 //Append method close.
428 .append(methodClose(FOUR_SPACE));
429 return builder.toString();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530430 }
431
Bharat saraswal97459962016-02-20 21:57:16 +0530432 /**
433 * Returns the setter method strings for class file.
434 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530435 * @param attr attribute info
436 * @param className name of the class
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530437 * @param generatedJavaFiles generated java files
Vinod Kumar S08710982016-03-03 19:55:30 +0530438 * @return setter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530439 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530440 public static String getSetterForClass(JavaAttributeInfo attr,
441 String className,
442 int generatedJavaFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530443 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530444 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530445 boolean isTypeNull = false;
446 if (attr.getAttributeType() == null) {
447 isTypeNull = true;
Bharat saraswal022dae92016-03-04 20:08:09 +0530448 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530449 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530450 return getSetter(className, attributeName, attrQualifiedType,
451 generatedJavaFiles, isTypeNull, false);
Bharat saraswal8beac342016-08-04 02:00:03 +0530452 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530453 String attrParam = getListAttribute(attrQualifiedType,
454 attr.getCompilerAnnotation());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530455 return getSetter(className, attributeName, attrParam,
456 generatedJavaFiles, isTypeNull, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530457 }
458
459 /**
460 * Returns setter for attribute.
461 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530462 * @param className class name
463 * @param name attribute name
464 * @param type return type
465 * @param isTypeNull if attribute type is null
466 * @param isList true if leaf-list
Bharat saraswal022dae92016-03-04 20:08:09 +0530467 * @return setter for attribute
468 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530469 private static String getSetter(String className, String name, String type,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530470 int genType,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530471 boolean isTypeNull, boolean isList) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530472 StringBuilder builder = new StringBuilder();
473 if (genType == GENERATE_SERVICE_AND_MANAGER) {
474 //Append method signature.
475 builder.append(methodSignature(getCapitalCase(name),
476 SET_METHOD_PREFIX,
477 PUBLIC, name, VOID, type,
478 CLASS_TYPE))
479 //Append method body.
480 .append(methodBody(MANAGER_METHODS, null, null,
481 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530482 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530483 .append(methodClose(FOUR_SPACE));
484 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530485 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530486 if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
487 builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
488 type, CLASS_TYPE))
Bharat saraswal8beac342016-08-04 02:00:03 +0530489
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530490 //Append method body.
491 .append(methodBody(SETTER, name, name,
492 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530493 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530494 .append(methodClose(FOUR_SPACE));
495 return builder.toString();
496 }
497 builder.append(methodSignature(name, EMPTY_STRING,
498 PUBLIC, name, getCapitalCase(className) +
499 BUILDER, type, CLASS_TYPE));
500 if (!isTypeNull && !isList) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530501 builder.append(getLeafFlagSetString(name, VALUE_LEAF, EIGHT_SPACE_INDENTATION,
502 SET_METHOD_PREFIX)).append(signatureClose());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530503 } else {
504 builder.append(EMPTY_STRING);
505 }
506 //Append method body.
507 builder.append(methodBody(SETTER, name, name,
508 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530509 true, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530510 //Append method close.
511 .append(methodClose(FOUR_SPACE));
512 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530513 }
514
515 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530516 * Returns the setter method strings for class file.
517 *
518 * @param attr attribute info
519 * @return setter method for class
520 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530521 static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530522
Bharat saraswal8beac342016-08-04 02:00:03 +0530523 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530524 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530525 return getTypeDefSetter(attrQualifiedType, attributeName);
Bharat saraswal022dae92016-03-04 20:08:09 +0530526 }
527
528 /**
529 * Returns type def's setter for attribute.
530 *
531 * @param type data type
532 * @param name attribute name
533 * @return setter for type def's attribute
534 */
535 private static String getTypeDefSetter(String type, String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530536 return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
537 name, VOID, type, CLASS_TYPE) +
538 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530539 null, false, null) + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530540 }
541
542 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530543 * Returns the getter method strings for interface file.
544 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530545 * @param yangName name of the attribute
546 * @param returnType return type of attribute
547 * @param isList is list attribute
548 * @param genType generated java files
549 * @param annotation compiler annotation
Vinod Kumar S08710982016-03-03 19:55:30 +0530550 * @return getter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530551 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530552 static String getGetterForInterface(String yangName, String returnType,
553 boolean isList,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530554 int genType,
555 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530556 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530557 return getGetterInterfaceString(returnType, yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530558 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530559 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530560 String listAttr = getListAttribute(returnType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530561 return getGetterInterfaceString(listAttr, yangName, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530562 }
563
564 /**
565 * Returns getter for attribute in interface.
566 *
567 * @param returnType return type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530568 * @param yangName attribute name
Bharat saraswal022dae92016-03-04 20:08:09 +0530569 * @return getter for interface
570 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530571 private static String getGetterInterfaceString(String returnType,
572 String yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530573 int genType) {
574 switch (genType) {
575 case GENERATE_SERVICE_AND_MANAGER:
576 return getGetMethodWithArgument(returnType, yangName);
577 default:
578 return methodSignature(yangName, EMPTY_STRING, null,
579 null, returnType, null, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530580 }
Bharat saraswal97459962016-02-20 21:57:16 +0530581 }
582
583 /**
584 * Returns the setter method strings for interface file.
585 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530586 * @param attrName name of the attribute
587 * @param attrType return type of attribute
588 * @param className name of the java class being generated
589 * @param isList is list attribute
590 * @param genType generated java files
591 * @param annotation compiler annotations
Vinod Kumar S08710982016-03-03 19:55:30 +0530592 * @return setter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530593 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530594 static String getSetterForInterface(String attrName, String attrType,
595 String className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 boolean isList, int genType,
597 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530598 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530599 return getSetterInterfaceString(className, attrName, attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530600 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530601 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530602
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530603 String listAttr = getListAttribute(attrType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530604 return getSetterInterfaceString(className, attrName, listAttr, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530605 }
606
607 /**
608 * Returns setter string for interface.
609 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530610 * @param name class name
611 * @param attrName attribute name
612 * @param attrType attribute type
Bharat saraswal022dae92016-03-04 20:08:09 +0530613 * @return setter string
614 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530615 private static String getSetterInterfaceString(String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530616 String attrName,
617 String attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530618 int genType) {
619 if (genType == GENERATE_SERVICE_AND_MANAGER) {
620 return methodSignature(getCapitalCase(attrName),
621 SET_METHOD_PREFIX,
622 null, attrName, VOID, attrType +
623 OP_PARAM, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530624 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530625 return methodSignature(attrName, EMPTY_STRING, null,
626 attrName, name + BUILDER, attrType, INTERFACE_TYPE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530627 }
628
629 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530630 * Returns return type for attribute.
631 *
632 * @param attr attribute info
633 * @return return type
634 */
635 private static String getReturnType(JavaAttributeInfo attr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530636 StringBuilder builder = new StringBuilder();
Bharat saraswala5c28512016-11-10 21:09:23 +0530637
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530638 if (attr.isQualifiedName() &&
639 attr.getImportInfo().getPkgInfo() != null) {
Bharat saraswal51c5d672016-11-13 09:03:48 +0530640 builder.append(attr.getImportInfo().getPkgInfo()).append(PERIOD);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530641 }
Bharat saraswal51c5d672016-11-13 09:03:48 +0530642 builder.append(attr.getImportInfo().getClassInfo());
Bharat saraswala5c28512016-11-10 21:09:23 +0530643
644 if (attr.getAttributeType() != null &&
645 attr.getAttributeType().getDataType() == IDENTITYREF) {
Bharat saraswal51c5d672016-11-13 09:03:48 +0530646 return CLASS_STRING + DIAMOND_OPEN_BRACKET +
Bharat saraswala5c28512016-11-10 21:09:23 +0530647 QUESTION_MARK + SPACE + EXTEND + SPACE +
Bharat saraswal51c5d672016-11-13 09:03:48 +0530648 builder.toString() + DIAMOND_CLOSE_BRACKET;
Bharat saraswala5c28512016-11-10 21:09:23 +0530649 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530650 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530651 }
652
653 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530654 * Returns the build method strings for interface file.
655 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530656 * @param yangName name of the interface
657 * @return build method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530658 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530659 static String getBuildForInterface(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530660 return methodSignature(BUILD, EMPTY_STRING, null, null,
661 yangName, null, INTERFACE_TYPE);
Bharat saraswal97459962016-02-20 21:57:16 +0530662 }
663
664 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530665 * Returns constructor string for impl class.
666 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 * @param yangName class name
668 * @param isRootNode if root node
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530669 * @return constructor string
670 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530671 static String getConstructorStart(String yangName,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530672 boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530673 StringBuilder builder = new StringBuilder(
674 getConstructorString(yangName));
Bharat saraswal8beac342016-08-04 02:00:03 +0530675
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530676 String name = getCapitalCase(yangName);
677 String returnType = DEFAULT_CAPS + name;
Bharat saraswal8beac342016-08-04 02:00:03 +0530678 if (isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530679 returnType = name + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +0530680 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530681 builder.append(methodSignature(
682 returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
683 null, name + BUILDER, CLASS_TYPE));
684 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530685 }
686
687 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530688 * Returns the constructor strings for class file.
689 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530690 * @param attr attribute info
691 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530692 * @return constructor for class
693 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530694 public static String getConstructor(JavaAttributeInfo attr, int genType) {
695 String attrName = attr.getAttributeName();
696 String attrCaps = getCapitalCase(attrName);
697 switch (genType) {
698 case GENERATE_SERVICE_AND_MANAGER:
699 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
700 attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530701 false, null);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530702 default:
703 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
704 attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530705 null, false, null);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530706 }
Bharat saraswal97459962016-02-20 21:57:16 +0530707 }
708
709 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530710 * Returns the rpc strings for service interface.
711 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530712 * @param rpcName name of the rpc
713 * @param input name of input
714 * @param output name of output
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530715 * @return rpc method string
716 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530717 public static String getRpcServiceMethod(String rpcName, String input,
718 String output) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530719 String inputVal = null;
720 if (input != null) {
721 inputVal = RPC_INPUT_VAR_NAME;
722 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530723 return methodSignature(rpcName, EMPTY_STRING, null,
724 inputVal, output, input, INTERFACE_TYPE) +
725 NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530726 }
727
728 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530729 * Returns the build method strings for class file.
730 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530731 * @param yangName class name
732 * @param isRootNode if root node
Vinod Kumar S08710982016-03-03 19:55:30 +0530733 * @return build method string for class
Bharat saraswal97459962016-02-20 21:57:16 +0530734 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530735 static String getBuild(String yangName, boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530736 String type = DEFAULT_CAPS + yangName;
Bharat saraswal8beac342016-08-04 02:00:03 +0530737 if (isRootNode) {
738 type = yangName + OP_PARAM;
739 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530740 return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
741 yangName, null,
742 CLASS_TYPE) +
743 methodBody(MethodBodyTypes.BUILD, type, BUILD,
744 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530745 null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530746 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530747 }
748
749 /**
750 * Returns the Default constructor strings for class file.
751 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530752 * @param name name of the class
Bharat saraswal022dae92016-03-04 20:08:09 +0530753 * @param modifierType modifier type for default constructor
Bharat saraswal97459962016-02-20 21:57:16 +0530754 * @return Default constructor for class
755 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530756 private static String getDefaultConstructor(String name,
757 String modifierType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530758 return methodSignature(name, EMPTY_STRING, modifierType, null,
759 null, null, CLASS_TYPE) +
760 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530761 }
762
Bharat saraswal022dae92016-03-04 20:08:09 +0530763 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530764 * Returns to string method's open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530765 *
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530766 * @return string method's open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530767 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530768 static String getToStringMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530769 StringBuilder builder = new StringBuilder(getOverRideString());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530770 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530771 PUBLIC, null, STRING_DATA_TYPE, null,
772 CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530773 builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
774 EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
775 .append(getOmitNullValueString());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530776 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530777 }
778
779 /**
780 * Returns to string method's close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530781 *
782 * @return to string method close string
783 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530784 static String getToStringMethodClose() {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530785 return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530786 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
787 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530788 }
789
790 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530791 * Returns to string method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530792 *
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530793 * @param attr java attribute
794 * @return to string method for class
Bharat saraswal022dae92016-03-04 20:08:09 +0530795 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530796 public static String getToStringMethod(JavaAttributeInfo attr) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530797 return methodBody(TO_STRING, attr.getAttributeName(), null,
798 TWELVE_SPACE_INDENTATION, null, null, false, null);
Bharat saraswal022dae92016-03-04 20:08:09 +0530799 }
800
801 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530802 * Returns from string method's open string.
803 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530804 * @param className name of the class
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530805 * @return from string method's open string
806 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530807 static String getFromStringMethodSignature(String className) {
808 return getJavaDoc(FROM_METHOD, className, false, null) +
809 methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
810 SPACE + STATIC, FROM_STRING_PARAM_NAME,
811 className, STRING_DATA_TYPE,
812 CLASS_TYPE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530813 }
814
815 /**
816 * Return from string method's close string.
817 *
818 * @return from string method's close string
819 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530820 static String getFromStringMethodClose() {
Bharat saraswal51c5d672016-11-13 09:03:48 +0530821 return methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530822 }
823
824 /**
825 * Return from string method's body string.
826 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530827 * @param attr attribute info
828 * @param fromAttr attribute info for the from string wrapper
829 * type
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530830 * @return from string method's body string
831 */
832 public static String getFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530833 JavaAttributeInfo fromAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530834
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530835 return EIGHT_SPACE_INDENTATION + getTrySubString() +
836 getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530837 getParsedSubString(attr, fromAttr) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530838 getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
Bharat saraswal51c5d672016-11-13 09:03:48 +0530839 getCatchSubString(attr.getCurHolderOrCount());
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530840 }
841
842 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530843 * Returns sub string with parsed statement for union's from string method.
844 *
845 * @param attr attribute info
846 * @return sub string with parsed statement for union's from string method
847 */
848 private static String getParsedSubString(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530849 JavaAttributeInfo fromStringAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530850
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530851 String targetDataType = getReturnType(attr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530852 YangDataTypes types = fromStringAttr.getAttributeType()
853 .getDataType();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530854 StringBuilder method = new StringBuilder();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530855 switch (types) {
856 case BITS:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530857 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530858 SPACE + getCapitalCase(attr.getAttributeName()) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530859 PERIOD + FROM_STRING_METHOD_NAME +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530860 getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
861 signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530862 case BINARY:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530863 return method.append(targetDataType).append(SPACE).append(TMP_VAL)
864 .append(SPACE).append(EQUAL).append(SPACE).append(
865 geStringConverterForBinary(FROM_STRING_PARAM_NAME))
866 .append(signatureClose()).toString();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530867 default:
868 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530869 SPACE + getParseFromStringMethod(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530870 targetDataType, fromStringAttr.getAttributeType()) +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530871 getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
872 signatureClose();
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530873 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530874 }
875
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530876 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530877 * Returns from string converter for binary type.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530878 *
879 * @param var variable name
880 * @return to string method body
881 */
882 private static String geStringConverterForBinary(String var) {
883 StringBuilder builder = new StringBuilder();
884 return builder.append(BASE64).append(PERIOD)
885 .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
Bharat saraswal0663aff2016-10-18 23:16:14 +0530886 .append(DECODE).append(getOpenCloseParaWithValue(var)).toString();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530887 }
888
889 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530890 * Returns to string converter for binary type.
891 *
892 * @param var variable name
893 * @return to string method body
894 */
895 private static String getToStringForBinary(String var) {
896 StringBuilder builder = new StringBuilder();
897 return builder.append(BASE64).append(PERIOD)
898 .append(GET_ENCODER).append(OPEN_CLOSE_BRACKET_STRING)
899 .append(PERIOD).append(ENCODE_TO_STRING)
Bharat saraswal0663aff2016-10-18 23:16:14 +0530900 .append(getOpenCloseParaWithValue(var)).toString();
Bharat saraswal94844d62016-10-13 13:28:03 +0530901 }
902
903 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530904 * Returns hash code method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530905 *
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530906 * @return hash code method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530907 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530908 static String getHashCodeMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530909 String line;
910 StringBuilder builder = new StringBuilder(getOverRideString());
911 builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
912 null, INT, null, CLASS_TYPE));
913 line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
914 OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
915 builder.append(line);
916 return builder.toString();
Bharat saraswal022dae92016-03-04 20:08:09 +0530917 }
918
919 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530920 * Returns hash code methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530921 *
922 * @param hashcodeString hash code string
923 * @return to hash code method close string
924 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530925 static String getHashCodeMethodClose(String hashcodeString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530926 String[] array = {SPACE, COMMA};
927 hashcodeString = trimAtLast(hashcodeString, array);
928 return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
929 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530930 }
931
932 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530933 * Returns hash code method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530934 *
935 * @param attr attribute info
936 * @return hash code method
937 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530938 public static String getHashCodeMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530939 return attr.getAttributeName() + COMMA + SPACE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530940 }
941
942 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530943 * Returns equals method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530944 *
945 * @param className class name
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530946 * @return equals method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530947 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530948 static String getEqualsMethodOpen(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530949 return getOverRideString() +
950 methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
951 BOOLEAN_DATA_TYPE, OBJECT_STRING,
952 CLASS_TYPE) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530953 getEqualsMethodsCommonIfCondition() +
954 getEqualsMethodsSpecificIfCondition(className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530955 }
956
957 /**
958 * Returns equal methods if condition string.
959 *
960 * @return if condition string
961 */
962 private static String getEqualsMethodsCommonIfCondition() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530963 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
964 EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
965 TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
966 + methodClose(EIGHT_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530967 }
968
969 /**
970 * Returns if condition for specific class object in equals method.
971 *
972 * @param className class name
973 * @return if condition string
974 */
975 private static String getEqualsMethodsSpecificIfCondition(String className) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530976 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
977 INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
978 OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
979 className + SPACE + OTHER + SPACE + EQUAL + SPACE +
980 OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530981 SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530982 NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530983 }
984
985 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530986 * Returns equals methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530987 *
988 * @param equalMethodString equal method string
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530989 * @return equals method close string
Bharat saraswal022dae92016-03-04 20:08:09 +0530990 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530991 static String getEqualsMethodClose(String equalMethodString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530992 String[] array = {NEW_LINE, AND, AND, SPACE};
993 equalMethodString = trimAtLast(equalMethodString, array) +
994 signatureClose();
995 return equalMethodString + methodClose(EIGHT_SPACE) +
996 getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
997 signatureClose() + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530998 }
999
1000 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +05301001 * Returns equals method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +05301002 *
1003 * @param attr attribute info
1004 * @return equals method
1005 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +05301006 public static String getEqualsMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +05301007 String attributeName = attr.getAttributeName();
Bharat saraswala5c28512016-11-10 21:09:23 +05301008 if (attributeName.contains(OPERATION_TYPE_ATTRIBUTE)) {
1009 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
1010 NEW_LINE + SIXTEEN_SPACE_INDENTATION +
1011 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
1012 COMMA + NEW_LINE + SIXTEEN_SPACE_INDENTATION + SPACE + OTHER
1013 + PERIOD + attributeName + CLOSE_PARENTHESIS + SPACE + AND +
1014 AND;
1015 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301016 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301017 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
1018 COMMA + SPACE + OTHER + PERIOD + attributeName +
1019 CLOSE_PARENTHESIS + SPACE + AND + AND;
Bharat saraswal022dae92016-03-04 20:08:09 +05301020 }
1021
1022 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301023 * Returns of method's string and java doc for special type.
1024 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301025 * @param attr attribute info
1026 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301027 * @return of method's string and java doc for special type
1028 */
Bharat saraswala5c28512016-11-10 21:09:23 +05301029
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301030 public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301031 String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301032 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301033 String attrName = attr.getAttributeName();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301034
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301035 return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
1036 false, null) + getOfMethodString(attrType, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301037 }
1038
1039 /**
1040 * Returns of method's string.
1041 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301042 * @param type data type
1043 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301044 * @return of method's string
1045 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301046 private static String getOfMethodString(String type, String name) {
1047 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
1048 VALUE, name, type, CLASS_TYPE) +
1049 methodBody(MethodBodyTypes.OF_METHOD, name, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301050 EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301051 methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301052 }
1053
1054 /**
1055 * Returns string and java doc for constructor of type class.
1056 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301057 * @param attr attribute info
1058 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301059 * @param genType generate file type
1060 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301061 * @return string and java doc for constructor of type class
1062 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301063 public static String getTypeConstructorStringAndJavaDoc(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301064 JavaAttributeInfo attr, String className, int genType, int count) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301065 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301066 String attrName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301067 return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301068 getTypeConstructorString(attrType, attrName, className,
1069 genType, count);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301070 }
1071
1072 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301073 * Returns string and java doc for constructor of type class.
1074 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301075 * @param attr1 first attribute info
1076 * @param attr2 second attribute info
1077 * @param genType class name
1078 * @param type conflict validate type
1079 * @param addFirst whether int came first or uInt came first
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301080 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301081 * @return string and java doc for constructor of type class
1082 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301083 public static String getTypeConstructorStringAndJavaDoc(
1084 JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301085 ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301086
Bharat saraswal64e7e232016-07-14 23:33:55 +05301087 String attrType = getReturnType(attr1);
1088 String attrName1 = "";
1089 String attrName2 = "";
1090 if (attr1 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301091 if (addFirst) {
1092 attrName1 = attr1.getAttributeName();
1093 } else {
1094 attrName2 = attr1.getAttributeName();
1095 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301096 }
1097 if (attr2 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301098 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301099 attrName2 = attr2.getAttributeName();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301100 } else {
1101 attrName1 = attr2.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301102 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301103 }
1104
Vidyashree Ramab3670472016-08-06 15:49:56 +05301105 String appDataStructure = null;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301106 if (attr1 != null && attr1.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301107 appDataStructure =
1108 attr1.getCompilerAnnotation().getYangAppDataStructure()
1109 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301110 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301111 String doc;
1112 if (attrName1.isEmpty()) {
1113 doc = attrName2;
1114 } else {
1115 doc = attrName1;
1116 }
1117 return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301118 getTypeConstructorString(attrType, attrName1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301119 attrName2, genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301120 type, addFirst, count);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301121 }
1122
1123 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301124 * Returns type constructor string.
1125 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301126 * @param type data type
1127 * @param name attribute name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301128 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301129 * @param genType generated file type
1130 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301131 * @return type constructor string
1132 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301133 private static String getTypeConstructorString(String type, String name,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301134 String className, int genType, int count) {
1135 StringBuilder builder = new StringBuilder();
1136 builder.append(
1137 methodSignature(className, EMPTY_STRING, PUBLIC, name,
1138 null, type, CLASS_TYPE));
1139 if (genType == GENERATE_UNION_CLASS) {
1140 builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1141 .append(PERIOD).append(SET_METHOD_PREFIX).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301142 getOpenCloseParaWithValue(count + EMPTY_STRING))
1143 .append(signatureClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301144 }
1145 builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
1146 EMPTY_STRING, null, false, null))
1147 .append(methodClose(FOUR_SPACE));
1148 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301149 }
1150
1151 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301152 * Returns type constructor string.
1153 *
1154 * @param type data type
1155 * @param attr1 attribute attr1
1156 * @param className class attr1
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301157 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301158 * @return type constructor string
1159 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301160 private static String getTypeConstructorString(
1161 String type, String attr1, String attr2, String className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301162 ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301163 StringBuilder constructor = new StringBuilder(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301164 methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301165 null, type, CLASS_TYPE))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301166 .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1167 .append(PERIOD).append(SET_METHOD_PREFIX).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301168 getOpenCloseParaWithValue(count + EMPTY_STRING))
1169 .append(signatureClose())
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301170 .append(ifConditionForIntInTypeDefConstructor(validatorType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301171 addInt, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301172 .append(methodBody(SETTER, attr1, null,
1173 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301174 null, false, attr1));
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301175 String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
1176 ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301177 constructor.append(str)
1178 .append(methodBody(SETTER, attr2, null,
1179 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301180 null, false, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301181 .append(methodClose(FOUR_SPACE))
1182 .append(methodClose(EIGHT_SPACE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301183
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301184 return constructor.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301185 }
1186
1187 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301188 * Returns interface of add augmentation.
1189 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301190 * @param className class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301191 * @return interface of add augmentation
1192 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301193 static String getAddAugmentInfoMethodInterface(String className) {
Bharat saraswal127461c2016-11-24 12:43:46 +05301194 StringBuilder builder = new StringBuilder(generateForAddAugmentation(className));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301195 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301196 map.put(VALUE, OBJECT_STRING);
1197 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301198 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
Bharat saraswala5c28512016-11-10 21:09:23 +05301199 null, null, className, map,
1200 INTERFACE_TYPE));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301201 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +05301202 }
1203
1204 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301205 * Returns implementation of add augmentation.
1206 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301207 * @param className class name
Bharat saraswalaf413b82016-07-14 15:18:20 +05301208 * @return implementation of add augmentation
1209 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301210 static String getAddAugmentInfoMethodImpl(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301211 StringBuilder builder = new StringBuilder(getOverRideString());
1212 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301213 map.put(VALUE, OBJECT_STRING);
1214 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301215 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
Bharat saraswala5c28512016-11-10 21:09:23 +05301216 null, PUBLIC,
Bharat saraswal94844d62016-10-13 13:28:03 +05301217 className, map, CLASS_TYPE))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301218 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301219 EIGHT_SPACE_INDENTATION, null, null, false, null))
Bharat saraswal94844d62016-10-13 13:28:03 +05301220 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1221 .append(signatureClose())
Bharat saraswala5c28512016-11-10 21:09:23 +05301222 .append(methodClose(FOUR_SPACE));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301223 return builder.toString();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301224 }
1225
1226 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301227 * Returns interface of get YANG augment info.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301228 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301229 * @return interface of get YANG augment info
Bharat saraswalaf413b82016-07-14 15:18:20 +05301230 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301231 static String getYangAugmentInfoInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301232 return generateForGetAugmentation() +
1233 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1234 null, CLASS + OBJECT_STRING,
1235 OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301236 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301237
Bharat saraswal8beac342016-08-04 02:00:03 +05301238 /**
1239 * Returns implementation of get YANG augment info.
1240 *
1241 * @return implementation of get YANG augment info
1242 */
1243 static String getYangAugmentInfoImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301244 return getOverRideString() +
1245 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1246 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
1247 CLASS_STRING, CLASS_TYPE) +
1248 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301249 EIGHT_SPACE_INDENTATION, null, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301250 methodClose(FOUR_SPACE);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301251 }
1252
1253 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301254 * Returns enum's constructor.
1255 *
1256 * @param className enum's class name
1257 * @return enum's constructor
1258 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301259 static String getEnumsConstructor(String className) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05301260 StringBuilder builder = new StringBuilder(
1261 getJavaDoc(TYPE_CONSTRUCTOR, className, false, null));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301262 String clsName = getSmallCase(className);
1263 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301264 map.put(clsName, INT);
1265 map.put(SCHEMA_NAME, STRING_DATA_TYPE);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301266 builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
1267 EMPTY_STRING, null,
1268 map, CLASS_TYPE))
1269 .append(methodBody(SETTER, clsName, EMPTY_STRING,
1270 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301271 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301272 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
1273 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301274 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301275 .append(methodClose(FOUR_SPACE));
1276
1277 return builder.toString();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301278 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301279
1280 /**
1281 * Returns of method for enum class.
1282 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301283 * @param className class name
1284 * @param type method body type
Bharat saraswal250a7472016-05-12 13:16:57 +05301285 * @return of method
1286 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301287 static String getEnumsOfValueMethod(String className,
1288 YangEnumeration enumeration,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301289 MethodBodyTypes type) {
1290 String name = getCapitalCase(className);
1291 StringBuilder builder = new StringBuilder(getJavaDoc(
1292 OF_METHOD, name + SPACE + FOR,
1293 false, null));
1294 //Switch statement.
Bharat saraswal0663aff2016-10-18 23:16:14 +05301295 String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE +
1296 getOpenCloseParaWithValue(VALUE) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301297 methodSignatureClose(CLASS_TYPE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301298 String str;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301299 switch (type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301300 case ENUM_METHOD_INT_VALUE:
1301 builder.append(getEnumValueMethodSignature(name, INT))
1302 .append(sw);
1303 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1304 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1305 .toUpperCase();
1306 builder.append(getEnumValueMethodCases(
1307 EMPTY_STRING + yangEnum.getValue(), str, name));
1308 }
1309 break;
1310 case ENUM_METHOD_STRING_VALUE:
1311 builder.append(getEnumValueMethodSignature(name,
1312 STRING_DATA_TYPE))
1313 .append(sw);
1314 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1315 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1316 .toUpperCase();
1317 builder.append(getEnumValueMethodCases(
1318 QUOTES + yangEnum.getNamedValue() + QUOTES, str,
1319 name));
1320 }
1321 break;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301322 default:
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301323 return null;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301324 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301325
1326 String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
1327 NEW_LINE;
1328 builder.append(method)
Bharat saraswal51c5d672016-11-13 09:03:48 +05301329 .append(getExceptionThrowString(SIXTEEN_SPACE_INDENTATION))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301330 .append(methodClose(EIGHT_SPACE))
1331 .append(methodClose(FOUR_SPACE));
1332
1333 return builder.toString();
1334 }
1335
1336 /**
1337 * Returns enum value method signature.
1338 *
1339 * @param name method name
1340 * @param type param type
1341 * @return enum value method signature
1342 */
1343 private static String getEnumValueMethodSignature(String name, String type) {
1344 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
1345 STATIC, VALUE, name, type, CLASS_TYPE);
1346 }
1347
1348 /**
1349 * Returns enum value method's cases.
1350 *
1351 * @param caseType case type
1352 * @param value return value
1353 * @param name name of class
1354 * @return enum value method's cases
1355 */
1356 private static String getEnumValueMethodCases(String caseType, String value,
1357 String name) {
1358 return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
1359 COLON + NEW_LINE + getReturnString(name,
1360 SIXTEEN_SPACE_INDENTATION) +
1361 PERIOD + value + signatureClose();
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301362 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301363
1364 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301365 * Returns augmented data getter and setter methods for service class.
1366 *
1367 * @param parent parent node
1368 * @return augmented data getter and setter methods for service class
1369 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301370 static String getAugmentsDataMethodForService(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301371 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal94844d62016-10-13 13:28:03 +05301372 if (targets.isEmpty()) {
1373 return EMPTY_STRING;
1374 }
1375 YangNode first = targets.get(0).getResolvedNode();
1376 //If target path is for notification then no need to generate get/set
1377 // for that augment in service class.
Bharat saraswal0663aff2016-10-18 23:16:14 +05301378 if (first instanceof InvalidOpTypeHolder) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301379 return EMPTY_STRING;
1380 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301381 YangNode augmentedNode;
1382 String curNodeName;
1383 String method;
1384 StringBuilder methods = new StringBuilder();
1385 String parentName;
1386 String returnType;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301387 YangNode methodNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301388 YangPluginConfig pluginConfig =
1389 ((JavaFileInfoContainer) parent).getJavaFileInfo()
1390 .getPluginConfig();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301391 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301392 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301393 methodNode = nodeId.getResolvedNode();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301394 if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1395 .getJavaName() != null) {
1396 curNodeName =
1397 ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1398 .getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301399 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301400 curNodeName = getCapitalCase(
1401 getCamelCase(methodNode.getName(),
1402 pluginConfig.getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301403 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301404 returnType =
1405 getAugmentedClassNameForDataMethods(augmentedNode, parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301406 parentName = getCurNodeName(augmentedNode,
1407 pluginConfig);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301408 method = generateForGetMethodWithAttribute(returnType) +
1409 getGetMethodWithArgument(returnType, AUGMENTED +
1410 parentName + getCapitalCase(curNodeName)) + NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301411 methods.append(method);
1412
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301413 method = getJavaDoc(MANAGER_SETTER_METHOD,
1414 AUGMENTED + getCapitalCase(parentName) +
1415 getCapitalCase(curNodeName), false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301416 null) +
Bharat saraswalaf413b82016-07-14 15:18:20 +05301417 getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301418 getCapitalCase(curNodeName),
1419 returnType, parentName, false,
1420 GENERATE_SERVICE_AND_MANAGER, null) +
1421 NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301422 methods.append(method);
1423 }
1424 return methods.toString();
1425 }
1426
1427 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301428 * Returns validator method for range in union class.
1429 *
1430 * @param type type
1431 * @return validator method for range in union class
1432 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301433 static String getRangeValidatorMethodForUnion(String type) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301434 String newType;
1435 if (type.contentEquals(BIG_INTEGER)) {
1436 newType = LONG;
1437 } else {
1438 newType = INT;
1439 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301440 StringBuilder builder = new StringBuilder(generateForValidatorMethod());
1441 String var = getSmallCase(BIG_INTEGER);
1442 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1443 map.put(MIN_RANGE, type);
1444 map.put(MAX_RANGE, type);
1445 map.put(VALUE, newType);
1446 builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
1447 PRIVATE, BOOLEAN_DATA_TYPE, map,
1448 CLASS_TYPE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301449 if (type.contentEquals(BIG_INTEGER)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301450 //Create new instance of big integer.
1451 builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
1452 QUOTES + SPACE + QUOTES + SPACE +
1453 ADD + SPACE + VALUE))
1454 //Add return string.
1455 .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
1456 //Add compareTo string
1457 .append(getCompareToString())
1458 //Add && condition.
1459 .append(ifAndAndCondition(
1460 //Add == condition
1461 ifEqualEqualCondition(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301462 getOpenCloseParaWithValue(MIN_RANGE), ONE),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301463 var))
1464 //Add compareTo string.
1465 .append(getCompareToString())
1466 //Add == condition.
1467 .append(ifEqualEqualCondition(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301468 getOpenCloseParaWithValue(MAX_RANGE), ONE))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301469 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301470 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301471 builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
1472 .append(getGreaterThanCondition())
1473 .append(ifAndAndCondition(MIN_RANGE, VALUE))
1474 .append(getLesserThanCondition())
1475 .append(MAX_RANGE)
1476 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301477 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301478 builder.append(methodClose(FOUR_SPACE));
1479 return builder.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301480 }
1481
Bharat saraswal8beac342016-08-04 02:00:03 +05301482 //Get method with arguments.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301483 private static String getGetMethodWithArgument(String returnType,
1484 String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301485 return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
1486 null, getSmallCase(returnType),
1487 returnType, returnType + OP_PARAM,
1488 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301489 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301490
Bharat saraswal8beac342016-08-04 02:00:03 +05301491 /**
1492 * Returns add to list method interface.
1493 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301494 * @param attr java attribute
1495 * @param className name of the class
Bharat saraswal8beac342016-08-04 02:00:03 +05301496 * @return add to list method interface
1497 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301498 public static String getAddToListMethodInterface(JavaAttributeInfo attr,
1499 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301500
Bharat saraswala5c28512016-11-10 21:09:23 +05301501 String methodName = ADD_STRING + TO_CAPS + getCapitalCase(
1502 attr.getAttributeName());
1503 String retType = getReturnType(attr);
1504 YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
1505 if (struct != null) {
1506 switch (struct) {
1507 case MAP:
1508 Map<String, String> param = new LinkedHashMap<>();
1509 param.put(attr.getAttributeName() + KEYS, retType + KEYS);
1510 param.put(attr.getAttributeName() + VALUE_CAPS, retType);
1511 return multiAttrMethodSignature(methodName, null, null,
1512 className + BUILDER, param,
1513 INTERFACE_TYPE);
1514 default:
1515 return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
1516 className + BUILDER, retType,
1517 INTERFACE_TYPE);
1518 }
1519 }
1520 return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301521 className + BUILDER, getReturnType(attr),
1522 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301523 }
1524
1525 /**
Bharat saraswala5c28512016-11-10 21:09:23 +05301526 * Returns YANG data structure from java attribute.
1527 *
1528 * @param annotation compiler annotation
1529 * @return YANG data structure from java attribute
1530 */
1531 public static YangDataStructure getYangDataStructure(
1532 YangCompilerAnnotation annotation) {
1533 if (annotation != null) {
1534 YangAppDataStructure data = annotation.getYangAppDataStructure();
1535 if (data != null) {
1536 return data.getDataStructure();
1537 }
1538 }
1539 return null;
1540 }
1541
1542 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301543 * Returns add to list method impl.
1544 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301545 * @param attr java attribute
1546 * @param name class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301547 * @return add to list method impl
1548 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301549 public static String getAddToListMethodImpl(JavaAttributeInfo attr,
Bharat saraswal94844d62016-10-13 13:28:03 +05301550 String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301551 String attrName = attr.getAttributeName();
Bharat saraswal94844d62016-10-13 13:28:03 +05301552 String retString = getOverRideString();
Bharat saraswala5c28512016-11-10 21:09:23 +05301553 String methodName = ADD_STRING + TO_CAPS + getCapitalCase(attrName);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301554 StringBuilder builder = new StringBuilder(retString);
Bharat saraswala5c28512016-11-10 21:09:23 +05301555 String retType = getReturnType(attr);
1556 YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
1557 if (struct != null) {
1558 switch (struct) {
1559 case MAP:
1560 Map<String, String> param = new LinkedHashMap<>();
1561 param.put(attr.getAttributeName() + KEYS, retType + KEYS);
1562 param.put(attr.getAttributeName() + VALUE_CAPS, retType);
1563 builder.append(multiAttrMethodSignature(methodName,
1564 null, PUBLIC,
1565 name + BUILDER, param,
1566 CLASS_TYPE))
1567 .append(getIfConditionForAddToListMethod(attr));
1568 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD +
1569 PUT + getOpenCloseParaWithValue(
1570 attrName + KEYS + COMMA + SPACE + attrName +
1571 VALUE_CAPS);
1572 break;
1573 default:
1574 builder.append(methodSignature(methodName,
1575 null, PUBLIC,
1576 ADD_STRING + TO_CAPS,
1577 name + BUILDER, retType,
1578 CLASS_TYPE))
1579 .append(getIfConditionForAddToListMethod(attr));
1580 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1581 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1582
1583 }
1584 } else {
1585 builder.append(methodSignature(ADD_STRING + TO_CAPS +
1586 getCapitalCase(attrName),
1587 null, PUBLIC, ADD_STRING + TO_CAPS,
1588 name + BUILDER, retType,
1589 CLASS_TYPE))
1590 .append(getIfConditionForAddToListMethod(attr));
1591 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1592 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1593 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301594 builder.append(retString)
1595 .append(signatureClose())
1596 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1597 .append(signatureClose())
1598 .append(methodClose(FOUR_SPACE));
1599 return builder.toString();
Bharat saraswala5c28512016-11-10 21:09:23 +05301600
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301601 }
1602
1603 // Returns if condition for add to list method.
Bharat saraswala5c28512016-11-10 21:09:23 +05301604
1605 private static String getIfConditionForAddToListMethod(JavaAttributeInfo attr) {
1606 String name = attr.getAttributeName();
1607 String type;
1608 YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
1609 if (struct != null) {
1610 switch (struct) {
1611 case QUEUE:
1612 type = PRIORITY_QUEUE;
1613 break;
1614
1615 case LIST:
Bharat saraswal51c5d672016-11-13 09:03:48 +05301616 type = ARRAY_LIST_INIT;
Bharat saraswala5c28512016-11-10 21:09:23 +05301617 break;
1618
1619 case MAP:
1620 type = LINKED_HASH_MAP;
1621 break;
1622
1623 case SET:
1624 type = LINKED_HASH_SET;
1625 break;
1626
1627 default:
Bharat saraswal51c5d672016-11-13 09:03:48 +05301628 type = ARRAY_LIST_INIT;
Bharat saraswala5c28512016-11-10 21:09:23 +05301629 break;
1630
1631 }
1632 } else {
Bharat saraswal51c5d672016-11-13 09:03:48 +05301633 type = ARRAY_LIST_INIT;
Bharat saraswala5c28512016-11-10 21:09:23 +05301634 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301635 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
1636 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
1637 name + SPACE + EQUAL + SPACE +
Bharat saraswala5c28512016-11-10 21:09:23 +05301638 NEW + SPACE + type + signatureClose() + methodClose(
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301639 EIGHT_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301640 }
1641
1642 /**
1643 * Returns builder method for class.
1644 *
1645 * @param name name of class
1646 * @return builder method for class
1647 */
1648 static String builderMethod(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301649 return generateForBuilderMethod(name) +
1650 methodSignature(BUILDER_LOWER_CASE,
1651 EMPTY_STRING, PUBLIC + SPACE +
1652 STATIC, null, name + BUILDER, null, CLASS_TYPE) +
1653 getReturnString(NEW + SPACE + name + BUILDER,
1654 EIGHT_SPACE_INDENTATION) +
1655 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
1656 methodClose(FOUR_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301657 }
1658
1659 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301660 * Returns is value set interface.
1661 *
1662 * @return is value set interface
1663 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301664 static String isLeafValueSetInterface() {
1665 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301666 " * Checks if the leaf value is set.\n" +
1667 " *\n" +
1668 " * @param leaf leaf whose value status needs to checked\n" +
1669 " * @return result of leaf value set in object\n" +
1670 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301671 return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
1672 LEAF, BOOLEAN_DATA_TYPE,
1673 LEAF_IDENTIFIER, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301674 }
1675
1676 /**
1677 * Returns is select leaf set interface.
1678 *
1679 * @return is select leaf set interface
1680 */
1681 static String isSelectLeafSetInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301682 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301683 " * Checks if the leaf is set to be a selected leaf.\n" +
1684 " *\n" +
1685 " * @param leaf if leaf needs to be selected\n" +
1686 " * @return result of leaf value set in object\n" +
1687 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301688 return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
1689 LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
1690 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301691 }
1692
1693 /**
1694 * Returns set select leaf set interface.
1695 *
1696 * @param name node name
1697 * @return set select leaf set interface
1698 */
1699 static String setSelectLeafSetInterface(String name) {
1700 String method = " /**\n" +
1701 " * Set a leaf to be selected.\n" +
1702 " *\n" +
1703 " * @param leaf leaf needs to be selected\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301704 " * @return builder object for select leaf\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301705 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301706 return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
1707 null, LEAF, name +
1708 BUILDER, LEAF_IDENTIFIER,
1709 INTERFACE_TYPE) + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301710 }
1711
1712 /**
1713 * Returns leaf identifier interface enum signature.
1714 *
1715 * @param name name of node
1716 * @return leaf identifier interface enum signature
1717 */
1718 static String getInterfaceLeafIdEnumSignature(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301719 String start = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301720 " * Identify the leaf of " + name + PERIOD + NEW_LINE +
1721 " */\n";
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301722 return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
1723 LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301724 }
1725
1726 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301727 * Returns setter for select leaf.
1728 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301729 * @param name name of node
Bharat saraswal8beac342016-08-04 02:00:03 +05301730 * @return setter for select leaf
1731 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301732 static String getSetterForSelectLeaf(String name) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301733 return "\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301734 " " + OVERRIDE + "\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301735 " public " + name + BUILDER +
1736 " selectLeaf(LeafIdentifier leaf) {\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301737 " selectLeafFlags.set(leaf.getLeafIndex());\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301738 " return this;\n" +
1739 " }\n";
1740 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301741
1742 /**
1743 * Generates fromString code for bits.
1744 *
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301745 * @return generated fromString code for bits.
1746 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301747 private static String getFromStringForBits(String bitClassName) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301748 /* generate code will look like this.
1749 public static BitSet fromString(String valInString) {
1750 BitSet tmpVal = new BitSet();
1751 String[] bitNames = valInString.trim().split(Pattern.quote(" "));
1752 for (String bitName : bitNames) {
1753 Bits bits = of(bitName);
1754 if (bits != null) {
1755 tmpVal.set(bits.bits());
1756 }
1757 }
1758 if (tmpVal.isEmpty()) {
1759 throw new NoSuchElementException("no such element found in bits");
1760 }
1761 return tmpVal;
1762 }*/
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301763 StringBuilder sBuild = new StringBuilder();
1764 sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
1765 PUBLIC + SPACE + STATIC,
1766 FROM_STRING_PARAM_NAME,
1767 BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
1768 .append(EIGHT_SPACE_INDENTATION)
1769 .append(getBitSetAttr(EMPTY_STRING));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301770 // Split the input string and check each bit name falls in configured yang file
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301771 sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
1772 .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
1773 .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
1774 .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
Bharat saraswal0663aff2016-10-18 23:16:14 +05301775 .append(PERIOD).append(SPLIT_STRING).append(getOpenCloseParaWithValue(
1776 getPatternQuoteString(SPACE))).append(signatureClose()).append(
1777 getForLoopString(EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
1778 BIT_NAMES_VAR));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301779
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301780 String small = getSmallCase(bitClassName);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301781 sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append(
1782 SPACE).append(small).append(SPACE).append(EQUAL).append(
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301783 SPACE).append(OF).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301784 getOpenCloseParaWithValue(BIT_NAME_VAR)).append(signatureClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301785 String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
1786 sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301787 .append(SIXTEEN_SPACE_INDENTATION)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301788 .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
1789 .append(OPEN_PARENTHESIS)
1790 .append(small).append(PERIOD).append(small).append(
1791 OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
1792 .append(signatureClose()).append(methodClose(TWELVE_SPACE))
1793 .append(methodClose(EIGHT_SPACE));
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301794
1795 condition = TMP_VAL + PERIOD + IS_EMPTY;
1796 sBuild.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, condition));
Bharat saraswal51c5d672016-11-13 09:03:48 +05301797 sBuild.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION))
1798 .append(methodClose(EIGHT_SPACE))
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301799 .append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301800 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1801 return sBuild.toString();
1802 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301803
Bharat saraswal94844d62016-10-13 13:28:03 +05301804
1805 /**
1806 * Returns to string method for typedef.
1807 *
Bharat saraswal0663aff2016-10-18 23:16:14 +05301808 * @param attr attribute name
Bharat saraswal94844d62016-10-13 13:28:03 +05301809 * @return to string method for typedef
1810 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301811 static String getToStringForType(String attr, YangType type) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301812 StringBuilder builder = new StringBuilder(getOverRideString())
1813 .append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
1814 STRING_DATA_TYPE, null, CLASS_TYPE));
1815 builder.append(getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301816 getToStringForSpecialType(type, attr), EIGHT_SPACE_INDENTATION))
Bharat saraswal94844d62016-10-13 13:28:03 +05301817 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1818 return builder.toString();
1819 }
1820
1821 /**
1822 * Returns to string method body for type class.
1823 *
Bharat saraswal0663aff2016-10-18 23:16:14 +05301824 * @param type type of attribute
1825 * @param name @return to string method body for typedef class
Bharat saraswal94844d62016-10-13 13:28:03 +05301826 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301827 private static String getToStringForSpecialType(YangType type, String name) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301828 switch (type.getDataType()) {
1829 case INT8:
1830 case INT16:
1831 case INT32:
1832 case INT64:
1833 case UINT8:
1834 case UINT16:
1835 case UINT32:
Bharat saraswal0663aff2016-10-18 23:16:14 +05301836 return STRING_DATA_TYPE + PERIOD + VALUE + OF_CAPS +
1837 getOpenCloseParaWithValue(name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301838
1839 case BINARY:
1840 return getToStringCall(getToStringForBinary(name));
1841
1842 case BITS:
Bharat saraswal0663aff2016-10-18 23:16:14 +05301843 return getCapitalCase(name) + PERIOD +
1844 TO_STRING_METHOD + getOpenCloseParaWithValue(name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301845
1846 case BOOLEAN:
1847 case EMPTY:
1848 return name + SPACE + QUESTION_MARK + SPACE + getQuotedString(TRUE)
1849 + SPACE + COLON + SPACE + getQuotedString(FALSE);
1850
1851 case LEAFREF:
1852 YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
1853 YangType<?> rt = lri.isInGrouping() ? null : lri
1854 .getEffectiveDataType();
1855 return rt == null ? getToStringCall(name) :
Bharat saraswal0663aff2016-10-18 23:16:14 +05301856 getToStringForSpecialType(rt, name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301857
Bharat saraswala5c28512016-11-10 21:09:23 +05301858 case IDENTITYREF:
1859 YangIdentityRef ir = (YangIdentityRef) type
1860 .getDataTypeExtendedInfo();
1861 YangIdentity identity = ir.getReferredIdentity();
1862 String idName = getCamelCase(identity.getName(), null);
1863 return getCapitalCase(idName) + PERIOD + idName + TO_CAPS +
1864 STRING_DATA_TYPE + OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal94844d62016-10-13 13:28:03 +05301865 case ENUMERATION:
1866 case INSTANCE_IDENTIFIER:
1867 case UINT64:
1868 case DECIMAL64:
1869 case DERIVED:
Bharat saraswal94844d62016-10-13 13:28:03 +05301870 case UNION:
1871 return getToStringCall(name);
1872
1873 default:
1874 return name;
1875 }
1876 }
1877
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301878 /**
1879 * Returns union class's to string method.
1880 *
1881 * @param types list of types
1882 * @return union class's to string method
1883 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301884 static String getUnionToStringMethod(List<YangType<?>> types) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301885
1886 StringBuilder builder = new StringBuilder(getOverRideString());
1887 builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
Bharat saraswal94844d62016-10-13 13:28:03 +05301888 STRING_DATA_TYPE, null, CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301889 for (YangType type : types) {
1890 builder.append(getIfConditionBegin(
1891 EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
Bharat saraswal94844d62016-10-13 13:28:03 +05301892 types.indexOf(type)))).append(getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301893 getToStringForSpecialType(type,
Bharat saraswal94844d62016-10-13 13:28:03 +05301894 getCamelCase(type.getDataTypeName(), null)),
1895 TWELVE_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301896 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1897 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301898 builder.append(getReturnString(NULL, EIGHT_SPACE_INDENTATION)).append(signatureClose())
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301899 .append(methodClose(FOUR_SPACE));
1900 return builder.toString();
1901 }
1902
1903 /**
1904 * Returns from string method for bits class.
1905 *
1906 * @param className bits class name
1907 * @return from string method for bits class
1908 */
1909 static String getBitSetEnumClassFromString(String className) {
1910 return getJavaDoc(FROM_METHOD, className, false, null) +
1911 getFromStringForBits(className);
1912 }
1913
Bharat saraswal94844d62016-10-13 13:28:03 +05301914 /**
1915 * Returns to string method for bits type.
1916 *
1917 * @param className class name
1918 * @param enumeration enumeration
1919 * @return to string method
1920 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301921 static String getBitSetEnumClassToString(String className,
1922 YangEnumeration enumeration) {
1923
1924 StringBuilder builder = new StringBuilder();
Bharat saraswal94844d62016-10-13 13:28:03 +05301925 builder.append(methodSignature(TO_STRING_METHOD, null,
1926 PUBLIC + SPACE + STATIC, BITS,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301927 STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
Bharat saraswal94844d62016-10-13 13:28:03 +05301928 .append(getStringBuilderAttr(EMPTY_STRING, EIGHT_SPACE_INDENTATION));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301929 String condition;
1930 String name;
1931 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1932 name = yangEnum.getNamedValue();
1933 condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
1934 className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
1935 + PERIOD + getSmallCase(className)
1936 + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
1937
1938
1939 builder.append(getIfConditionBegin(
1940 EIGHT_SPACE_INDENTATION, condition))
Bharat saraswal94844d62016-10-13 13:28:03 +05301941 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1942 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301943 .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
Bharat saraswal94844d62016-10-13 13:28:03 +05301944 .append(signatureClose())
1945 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1946 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
1947 .append(getQuotedString(SPACE)).append(CLOSE_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301948 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1949 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301950 builder.append(getReturnString(STRING_BUILDER_VAR, EIGHT_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301951 .append(PERIOD).append(TO_STRING_METHOD)
1952 .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
1953 .append(methodClose(FOUR_SPACE));
1954 return builder.toString();
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301955 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301956
1957 /**
1958 * Returns to string method for enum class.
1959 *
1960 * @return to string method for enum class
1961 */
1962 static String getToStringForEnumClass() {
1963 StringBuilder builder = new StringBuilder(getOverRideString());
1964 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
1965 PUBLIC, null, STRING_DATA_TYPE, null,
1966 CLASS_TYPE));
1967 builder.append(getReturnString(SCHEMA_NAME, EIGHT_SPACE_INDENTATION))
1968 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1969 return builder.toString();
1970 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05301971
1972 /**
1973 * Returns is filter content match interface.
1974 *
1975 * @param name name of node
1976 * @return is filter content match interface
1977 */
1978 static String processSubtreeFilteringInterface(String name) {
1979 String method = " /**\n" +
1980 " * Checks if the passed " + name +
1981 " maps the content match query condition.\n" +
1982 " *\n" +
1983 " * @param " + getSmallCase(name) + SPACE +
1984 getSmallCase(name) + SPACE + "being passed to check" +
1985 " for" +
1986 " content match\n" +
1987 " * @param isSelectAllSchemaChild is select all schema child\n" +
1988 " * @return match result\n" +
1989 " */\n";
1990 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1991 map.put(getSmallCase(name), name);
1992 map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
1993
1994 return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
1995 EMPTY_STRING, EMPTY_STRING,
1996 name, map, INTERFACE_TYPE);
1997 }
1998
1999 /**
Bharat saraswalb41904b2016-10-20 19:22:36 +05302000 * Returns build method for subtree filtering in class.
Bharat saraswal0663aff2016-10-18 23:16:14 +05302001 *
Bharat saraswalb41904b2016-10-20 19:22:36 +05302002 * @param node YANG node
2003 * @return build method for subtree filtering in class
Bharat saraswal0663aff2016-10-18 23:16:14 +05302004 */
Bharat saraswalb41904b2016-10-20 19:22:36 +05302005 static String generateBuildMethodForSubTree(YangNode node) {
2006 String name = getCapitalCase(node.getJavaClassNameOrBuiltInType());
Bharat saraswal0663aff2016-10-18 23:16:14 +05302007 StringBuilder builder = new StringBuilder(getJavaDoc(BUILD_METHOD,
2008 name, false, null));
2009 String def = DEFAULT_CAPS + name;
Bharat saraswalb41904b2016-10-20 19:22:36 +05302010 if (node instanceof RpcNotificationContainer) {
2011 def = name + OP_PARAM;
2012 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05302013 builder.append(methodSignature(BUILD_FOR_FILTER, null, PUBLIC, null,
2014 name, null, CLASS_TYPE))
2015 .append(EIGHT_SPACE_INDENTATION).append(SUBTREE_FILTERED)
2016 .append(SPACE).append(EQUAL).append(SPACE).append(TRUE)
2017 .append(signatureClose()).append(methodBody(
2018 MethodBodyTypes.BUILD, def, null, EIGHT_SPACE_INDENTATION,
2019 null, null, false, null)).append(methodClose(FOUR_SPACE));
2020 return builder.toString();
2021 }
2022
Bharat saraswala5c28512016-11-10 21:09:23 +05302023 /**
2024 * To string method for identity.
2025 *
2026 * @param name name of identity
2027 * @return to string method
2028 */
2029 public static String getToStringMethodForIdentity(String name) {
2030 StringBuilder builder = new StringBuilder(NEW_LINE);
Bharat saraswald5b684f2016-11-17 13:06:26 +05302031 builder.append(getJavaDoc(GETTER_METHOD, name, false, null));
Bharat saraswala5c28512016-11-10 21:09:23 +05302032 String returnVal = getQuotedString(name);
2033 String methodName = getCamelCase(name, null) + TO_CAPS + STRING_DATA_TYPE;
2034 builder.append(methodSignature(methodName, null, PUBLIC + SPACE + STATIC,
2035 null, STRING_DATA_TYPE, null, CLASS_TYPE))
2036 .append(getReturnString(returnVal, EIGHT_SPACE_INDENTATION))
2037 .append(signatureClose()).append(methodClose(FOUR_SPACE));
2038 return builder.toString();
2039 }
2040
2041 /**
2042 * Returns from string method for identity class.
2043 *
2044 * @param name name of identity
2045 * @param schemaName schema name
2046 * @return from string method
2047 */
2048 public static String getFromStringMethodForIdentity(String name,
2049 String schemaName) {
2050 StringBuilder builder = new StringBuilder(NEW_LINE);
Bharat saraswald5b684f2016-11-17 13:06:26 +05302051 builder.append(getJavaDoc(FROM_METHOD, name, false, null));
Bharat saraswala5c28512016-11-10 21:09:23 +05302052 String caps = getCapitalCase(name);
2053 String returnVal = caps + PERIOD + CLASS;
2054 String cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
2055 getQuotedString(schemaName));
2056 builder.append(methodSignature(FROM_STRING_METHOD_NAME, null,
2057 PUBLIC + SPACE + STATIC,
2058 FROM_STRING_PARAM_NAME, CLASS_STRING,
2059 STRING_DATA_TYPE, CLASS_TYPE))
2060 .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond))
2061 .append(getReturnString(returnVal, TWELVE_SPACE_INDENTATION))
2062 .append(signatureClose()).append(methodClose(EIGHT_SPACE))
Bharat saraswal51c5d672016-11-13 09:03:48 +05302063 .append(getExceptionThrowString(EIGHT_SPACE_INDENTATION))
2064 .append(methodClose(FOUR_SPACE));
Bharat saraswala5c28512016-11-10 21:09:23 +05302065 return builder.toString();
2066 }
2067
2068 /**
2069 * Returns compare to method for key class.
2070 *
2071 * @param attrs attribute list
2072 * @param className class name
2073 * @return compare to method
2074 */
2075 public static String getCompareToForKeyClass(
2076 List<JavaAttributeInfo> attrs, String className) {
2077
2078 StringBuilder builder = new StringBuilder(getOverRideString());
2079 builder.append(methodSignature(COMPARE_TO, null, PUBLIC, VALUE, INT,
2080 className, CLASS_TYPE));
2081 String cond;
2082 String attrName;
2083 String para;
2084 StringBuilder space = new StringBuilder();
2085 List<String> spaces = new ArrayList<>();
2086 int count = 1;
2087 for (JavaAttributeInfo attr : attrs) {
2088 attrName = attr.getAttributeName();
2089 para = VALUE + PERIOD + attrName;
2090 cond = getTwoParaEqualsString(attrName, para);
2091 if (count == 1) {
2092 space.append(EIGHT_SPACE_INDENTATION);
2093 } else {
2094 space.append(FOUR_SPACE_INDENTATION);
2095 }
2096 spaces.add(space.toString());
2097 count++;
2098 builder.append(getIfConditionBegin(space.toString(), cond));
2099 }
2100 space.append(FOUR_SPACE_INDENTATION);
2101 builder.append(getReturnString(ZERO, space.toString()))
2102 .append(signatureClose());
2103 for (int i = spaces.size() - 1; i >= 0; i--) {
2104 builder.append(spaces.get(i)).append(CLOSE_CURLY_BRACKET)
2105 .append(NEW_LINE);
2106 }
2107 builder.append(getReturnString(NEG_ONE, EIGHT_SPACE_INDENTATION))
2108 .append(signatureClose()).append(methodClose(FOUR_SPACE));
2109 return builder.toString();
2110 }
2111
Bharat saraswal97459962016-02-20 21:57:16 +05302112}