blob: b0a70327fb625817a89bf6925afb5385a9681a76 [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 saraswal039f59c2016-07-14 21:57:13 +053021import org.onosproject.yangutils.datamodel.YangAtomicPath;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053022import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053023import org.onosproject.yangutils.datamodel.YangEnum;
24import org.onosproject.yangutils.datamodel.YangEnumeration;
Bharat saraswal94844d62016-10-13 13:28:03 +053025import org.onosproject.yangutils.datamodel.YangLeafRef;
Bharat saraswalaf413b82016-07-14 15:18:20 +053026import org.onosproject.yangutils.datamodel.YangNode;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053027import org.onosproject.yangutils.datamodel.YangType;
janani b0e4e8ae2016-07-13 21:06:41 +053028import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vinod Kumar S9f26ae52016-03-23 15:30:27 +053029import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal039f59c2016-07-14 21:57:13 +053030import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
Gaurav Agrawal8a147522016-08-10 13:43:01 +053031import org.onosproject.yangutils.utils.io.YangPluginConfig;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053032import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
Bharat saraswal84366c52016-03-23 19:40:35 +053033
Bharat saraswal9fab16b2016-09-23 23:27:24 +053034import java.util.LinkedHashMap;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053035import java.util.List;
36
Bharat saraswal715d3fc2016-05-17 19:59:16 +053037import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +053038import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053039import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053040import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053041import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
42import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053043import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +053044import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053045import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
Bharat saraswal039f59c2016-07-14 21:57:13 +053046import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
Bharat saraswal748fc3c2016-09-06 16:38:20 +053047import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053048import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053049import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
50import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.GETTER;
51import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
52import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.SETTER;
53import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.TO_STRING;
54import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
55import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
56import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053057import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053059import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053060import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053061import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
62import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
Bharat saraswal0663aff2016-10-18 23:16:14 +053063import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053064import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053065import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getListAttribute;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053066import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053067import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
68import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
Bharat saraswal0663aff2016-10-18 23:16:14 +053069import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053070import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053071import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
72import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getPatternQuoteString;
73import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getQuotedString;
74import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnOfSubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053075import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053076import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
Bharat saraswal94844d62016-10-13 13:28:03 +053077import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getStringBuilderAttr;
78import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getToStringCall;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053079import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTrySubString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053080import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
81import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
82import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
83import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
84import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
85import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
86import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
87import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
88import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
Bharat saraswal64e7e232016-07-14 23:33:55 +053089import static org.onosproject.yangutils.utils.UtilConstants.ADD;
Bharat saraswal84366c52016-03-23 19:40:35 +053090import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
91import static org.onosproject.yangutils.utils.UtilConstants.AND;
Bharat saraswal94844d62016-10-13 13:28:03 +053092import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053093import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST;
Bharat saraswalaf413b82016-07-14 15:18:20 +053094import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +053095import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
Bharat saraswald14cbe82016-07-14 13:26:18 +053096import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
Bharat saraswal54e4bab2016-10-05 23:32:14 +053097import static org.onosproject.yangutils.utils.UtilConstants.BITS;
98import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +053099import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
100import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
101import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530102import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530103import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
Bharat saraswal250a7472016-05-12 13:16:57 +0530104import static org.onosproject.yangutils.utils.UtilConstants.CASE;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530105import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
106import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530107import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
108import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530109import static org.onosproject.yangutils.utils.UtilConstants.COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530110import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530111import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
Bharat saraswal250a7472016-05-12 13:16:57 +0530112import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530113import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530114import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530115import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530116import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
Bharat saraswal94844d62016-10-13 13:28:03 +0530117import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
Bharat saraswal8beac342016-08-04 02:00:03 +0530118import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530119import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
120import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530121import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530122import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530123import static org.onosproject.yangutils.utils.UtilConstants.FOR;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530124import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530125import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530126import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
127import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530128import static org.onosproject.yangutils.utils.UtilConstants.GET;
Mahesh Poojary Huawei41547ad2016-07-14 17:49:50 +0530129import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
Bharat saraswal94844d62016-10-13 13:28:03 +0530130import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
Bharat saraswal84366c52016-03-23 19:40:35 +0530131import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
132import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
133import static org.onosproject.yangutils.utils.UtilConstants.HASH;
134import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
135import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal84366c52016-03-23 19:40:35 +0530136import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
137import static org.onosproject.yangutils.utils.UtilConstants.INT;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530138import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
Bharat saraswal8beac342016-08-04 02:00:03 +0530139import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530140import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530141import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530142import static org.onosproject.yangutils.utils.UtilConstants.LONG;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530143import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
144import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530145import static org.onosproject.yangutils.utils.UtilConstants.NEW;
146import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530147import static org.onosproject.yangutils.utils.UtilConstants.NOT;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530148import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal84366c52016-03-23 19:40:35 +0530149import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
150import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
151import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
152import static org.onosproject.yangutils.utils.UtilConstants.OF;
Bharat saraswal94844d62016-10-13 13:28:03 +0530153import static org.onosproject.yangutils.utils.UtilConstants.OF_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530154import static org.onosproject.yangutils.utils.UtilConstants.ONE;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530155import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530156import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
157import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal8beac342016-08-04 02:00:03 +0530158import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
Bharat saraswal84366c52016-03-23 19:40:35 +0530159import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
160import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
161import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530162import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530163import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
164import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530165import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
Bharat saraswal94844d62016-10-13 13:28:03 +0530166import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
Bharat saraswal84366c52016-03-23 19:40:35 +0530167import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
168import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530169import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
Bharat saraswal748fc3c2016-09-06 16:38:20 +0530170import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530171import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
172import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
Bharat saraswal84366c52016-03-23 19:40:35 +0530173import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
Bharat saraswal8beac342016-08-04 02:00:03 +0530174import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530175import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
Bharat saraswal84366c52016-03-23 19:40:35 +0530176import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
177import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530178import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
179import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
Bharat saraswal84366c52016-03-23 19:40:35 +0530180import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
Bharat saraswal94844d62016-10-13 13:28:03 +0530181import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
Bharat saraswal84366c52016-03-23 19:40:35 +0530182import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530183import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
Bharat saraswal84366c52016-03-23 19:40:35 +0530184import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
Bharat saraswal250a7472016-05-12 13:16:57 +0530185import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
Bharat saraswal84366c52016-03-23 19:40:35 +0530186import static org.onosproject.yangutils.utils.UtilConstants.THIS;
Bharat saraswalc2fd3222016-10-19 16:10:27 +0530187import static org.onosproject.yangutils.utils.UtilConstants.THROW_NEW;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530188import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530189import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530190import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
Bharat saraswal039f59c2016-07-14 21:57:13 +0530191import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
Bharat saraswal84366c52016-03-23 19:40:35 +0530192import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
193import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530194import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530195import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530196import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
Bharat saraswal8beac342016-08-04 02:00:03 +0530197import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
Bharat saraswal84366c52016-03-23 19:40:35 +0530198import static org.onosproject.yangutils.utils.UtilConstants.VOID;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530199import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530200import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
Bharat saraswal84366c52016-03-23 19:40:35 +0530201import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
202import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
203import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530204import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530205import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530206import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530207import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
Bharat saraswal84366c52016-03-23 19:40:35 +0530208import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530209import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530210import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530211import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
Bharat saraswalaf413b82016-07-14 15:18:20 +0530212import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
Bharat saraswal8beac342016-08-04 02:00:03 +0530213import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
Bharat saraswal64e7e232016-07-14 23:33:55 +0530214import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
Bharat saraswald14cbe82016-07-14 13:26:18 +0530215import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530216import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
217import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
218import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
Bharat saraswal84366c52016-03-23 19:40:35 +0530219import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
Bharat saraswal97459962016-02-20 21:57:16 +0530220
221/**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530222 * Represents generator for methods of generated files based on the file type.
Bharat saraswal97459962016-02-20 21:57:16 +0530223 */
224public final class MethodsGenerator {
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +0530225 private static final String BIT_NAMES_VAR = "bitNames";
226 private static final String BIT_NAME_VAR = "bitName";
Bharat saraswal97459962016-02-20 21:57:16 +0530227
Bharat saraswal97459962016-02-20 21:57:16 +0530228 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530229 * Creates an instance of method generator.
Bharat saraswal97459962016-02-20 21:57:16 +0530230 */
231 private MethodsGenerator() {
232 }
233
234 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530235 * Returns the methods strings for builder interface.
236 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530237 * @param name attribute name
Vinod Kumar S08710982016-03-03 19:55:30 +0530238 * @return method string for builder interface
Bharat saraswal97459962016-02-20 21:57:16 +0530239 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530240 public static String parseBuilderInterfaceBuildMethodString(String name) {
241 return getJavaDoc(BUILD_METHOD, name, false, null) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530242 getBuildForInterface(name);
Bharat saraswal97459962016-02-20 21:57:16 +0530243 }
244
245 /**
246 * Returns getter string.
247 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530248 * @param attr attribute info
249 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530250 * @return getter string
251 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530252 public static String getGetterString(JavaAttributeInfo attr, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530253
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530254 String returnType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530255 String attributeName = attr.getAttributeName();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530256 String appDataStructure = null;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530257 StringBuilder builder = new StringBuilder();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530258 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530259 appDataStructure =
260 attr.getCompilerAnnotation().getYangAppDataStructure()
261 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530262 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530263 if (genType == GENERATE_SERVICE_AND_MANAGER) {
264 builder.append(generateForGetMethodWithAttribute(returnType))
265 .append(getGetterForInterface(
266 attributeName, returnType, attr.isListAttr(),
267 genType, attr.getCompilerAnnotation()));
268
269 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +0530270 }
Vinod Kumar S08710982016-03-03 19:55:30 +0530271
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530272 builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
273 .isListAttr(), appDataStructure))
274 .append(getGetterForInterface(
275 attributeName, returnType, attr.isListAttr(),
276 genType, attr.getCompilerAnnotation()));
277
278 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530279 }
280
281 /**
282 * Returns setter string.
283 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530284 * @param attr attribute info
285 * @param className java class name
286 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530287 * @return setter string
288 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530289 public static String getSetterString(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530290 String className, int genType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530291
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530292 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530293 String attributeName = attr.getAttributeName();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530294 JavaDocGen.JavaDocType type;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530295 StringBuilder builder = new StringBuilder();
296 if (genType == GENERATE_SERVICE_AND_MANAGER) {
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530297 type = MANAGER_SETTER_METHOD;
298 } else {
299 type = SETTER_METHOD;
300 }
Bharat saraswal97459962016-02-20 21:57:16 +0530301
Vidyashree Ramab3670472016-08-06 15:49:56 +0530302 String appDataStructure = null;
303 if (attr.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530304 appDataStructure =
305 attr.getCompilerAnnotation().getYangAppDataStructure()
306 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +0530307 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530308 builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
309 appDataStructure))
310 .append(getSetterForInterface(attributeName, attrType, className,
311 attr.isListAttr(), genType,
312 attr.getCompilerAnnotation()));
313 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530314 }
315
316 /**
317 * Returns constructor method string.
318 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530319 * @param name class name
Bharat saraswal97459962016-02-20 21:57:16 +0530320 * @return constructor string
321 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530322 private static String getConstructorString(String name) {
323 return getJavaDoc(CONSTRUCTOR, name, false, null);
Bharat saraswal97459962016-02-20 21:57:16 +0530324 }
325
326 /**
327 * Returns default constructor method string.
328 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530329 * @param name class name
Bharat saraswal022dae92016-03-04 20:08:09 +0530330 * @param modifierType modifier type
Bharat saraswal97459962016-02-20 21:57:16 +0530331 * @return default constructor string
332 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530333 public static String getDefaultConstructorString(String name,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530334 String modifierType) {
335 return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
Vidyashree Ramab3670472016-08-06 15:49:56 +0530336 + getDefaultConstructor(name, modifierType) + NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530337 }
338
339 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530340 * Returns build method string.
341 *
Bharat saraswal94844d62016-10-13 13:28:03 +0530342 * @param name class name
343 * @param isRoot true if root node
Bharat saraswal97459962016-02-20 21:57:16 +0530344 * @return build string
345 */
Bharat saraswal94844d62016-10-13 13:28:03 +0530346 public static String getBuildString(String name, boolean isRoot) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530347 return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
Bharat saraswal94844d62016-10-13 13:28:03 +0530348 getBuild(name, isRoot);
Bharat saraswal97459962016-02-20 21:57:16 +0530349 }
350
351 /**
352 * Returns the getter method strings for class file.
353 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530354 * @param attr attribute info
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530355 * @param generatedJavaFiles for the type of java file being generated
Vinod Kumar S08710982016-03-03 19:55:30 +0530356 * @return getter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530357 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530358 public static String getGetterForClass(JavaAttributeInfo attr,
359 int generatedJavaFiles) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530360
Bharat saraswal8beac342016-08-04 02:00:03 +0530361 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530362 String attributeName = attr.getAttributeName();
Bharat saraswal022dae92016-03-04 20:08:09 +0530363
364 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530365 return getGetter(attrQualifiedType, attributeName,
366 generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530367 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530368 String attrParam = getListAttribute(attrQualifiedType,
369 attr.getCompilerAnnotation());
Vidyashree Ramab3670472016-08-06 15:49:56 +0530370 return getGetter(attrParam, attributeName, generatedJavaFiles);
Bharat saraswal022dae92016-03-04 20:08:09 +0530371 }
372
373 /**
374 * Returns getter for attribute.
375 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530376 * @param type return type
377 * @param name attribute name
378 * @param genType generated java files
Bharat saraswal022dae92016-03-04 20:08:09 +0530379 * @return getter for attribute
380 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530381 static String getGetter(String type, String name, int genType) {
382 StringBuilder builder = new StringBuilder();
383 if (genType == GENERATE_SERVICE_AND_MANAGER) {
384 //Append method signature.
385 builder.append(methodSignature(getCapitalCase(name), GET,
386 PUBLIC, null, type, null,
387 CLASS_TYPE))
388 //Append method body.
389 .append(methodBody(MANAGER_METHODS, null, null,
390 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530391 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530392 .append(signatureClose())
393 //Append method close.
394 .append(methodClose(FOUR_SPACE));
395 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530396 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530397 builder.append(methodSignature(name, EMPTY_STRING,
398 PUBLIC, null, type, null,
399 CLASS_TYPE))
400 //Append method body.
401 .append(methodBody(GETTER, name, name,
402 EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530403 type, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530404 .append(signatureClose())
405 //Append method close.
406 .append(methodClose(FOUR_SPACE));
407 return builder.toString();
Bharat saraswal4aaab4d2016-05-17 14:19:38 +0530408 }
409
Bharat saraswal97459962016-02-20 21:57:16 +0530410 /**
411 * Returns the setter method strings for class file.
412 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530413 * @param attr attribute info
414 * @param className name of the class
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530415 * @param generatedJavaFiles generated java files
Vinod Kumar S08710982016-03-03 19:55:30 +0530416 * @return setter method for class
Bharat saraswal97459962016-02-20 21:57:16 +0530417 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530418 public static String getSetterForClass(JavaAttributeInfo attr,
419 String className,
420 int generatedJavaFiles) {
Bharat saraswal8beac342016-08-04 02:00:03 +0530421 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530422 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530423 boolean isTypeNull = false;
424 if (attr.getAttributeType() == null) {
425 isTypeNull = true;
Bharat saraswal022dae92016-03-04 20:08:09 +0530426 }
Bharat saraswal8beac342016-08-04 02:00:03 +0530427 if (!attr.isListAttr()) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530428 return getSetter(className, attributeName, attrQualifiedType,
429 generatedJavaFiles, isTypeNull, false);
Bharat saraswal8beac342016-08-04 02:00:03 +0530430 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530431 String attrParam = getListAttribute(attrQualifiedType,
432 attr.getCompilerAnnotation());
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530433 return getSetter(className, attributeName, attrParam,
434 generatedJavaFiles, isTypeNull, true);
Bharat saraswal022dae92016-03-04 20:08:09 +0530435 }
436
437 /**
438 * Returns setter for attribute.
439 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530440 * @param className class name
441 * @param name attribute name
442 * @param type return type
443 * @param isTypeNull if attribute type is null
444 * @param isList true if leaf-list
Bharat saraswal022dae92016-03-04 20:08:09 +0530445 * @return setter for attribute
446 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530447 private static String getSetter(String className, String name, String type,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530448 int genType,
Bharat saraswal2da23bf2016-08-25 15:28:39 +0530449 boolean isTypeNull, boolean isList) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530450 StringBuilder builder = new StringBuilder();
451 if (genType == GENERATE_SERVICE_AND_MANAGER) {
452 //Append method signature.
453 builder.append(methodSignature(getCapitalCase(name),
454 SET_METHOD_PREFIX,
455 PUBLIC, name, VOID, type,
456 CLASS_TYPE))
457 //Append method body.
458 .append(methodBody(MANAGER_METHODS, null, null,
459 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530460 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530461 .append(methodClose(FOUR_SPACE));
462 return builder.toString();
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530463 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530464 if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
465 builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
466 type, CLASS_TYPE))
Bharat saraswal8beac342016-08-04 02:00:03 +0530467
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530468 //Append method body.
469 .append(methodBody(SETTER, name, name,
470 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530471 false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530472 .append(methodClose(FOUR_SPACE));
473 return builder.toString();
474 }
475 builder.append(methodSignature(name, EMPTY_STRING,
476 PUBLIC, name, getCapitalCase(className) +
477 BUILDER, type, CLASS_TYPE));
478 if (!isTypeNull && !isList) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530479 builder.append(getLeafFlagSetString(name, VALUE_LEAF, EIGHT_SPACE_INDENTATION,
480 SET_METHOD_PREFIX)).append(signatureClose());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530481 } else {
482 builder.append(EMPTY_STRING);
483 }
484 //Append method body.
485 builder.append(methodBody(SETTER, name, name,
486 EIGHT_SPACE_INDENTATION, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530487 true, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530488 //Append method close.
489 .append(methodClose(FOUR_SPACE));
490 return builder.toString();
Bharat saraswal97459962016-02-20 21:57:16 +0530491 }
492
493 /**
Bharat saraswal022dae92016-03-04 20:08:09 +0530494 * Returns the setter method strings for class file.
495 *
496 * @param attr attribute info
497 * @return setter method for class
498 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530499 static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530500
Bharat saraswal8beac342016-08-04 02:00:03 +0530501 String attrQualifiedType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +0530502 String attributeName = attr.getAttributeName();
Bharat saraswal8beac342016-08-04 02:00:03 +0530503 return getTypeDefSetter(attrQualifiedType, attributeName);
Bharat saraswal022dae92016-03-04 20:08:09 +0530504 }
505
506 /**
507 * Returns type def's setter for attribute.
508 *
509 * @param type data type
510 * @param name attribute name
511 * @return setter for type def's attribute
512 */
513 private static String getTypeDefSetter(String type, String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530514 return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
515 name, VOID, type, CLASS_TYPE) +
516 methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530517 null, false, null) + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530518 }
519
520 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530521 * Returns the getter method strings for interface file.
522 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530523 * @param yangName name of the attribute
524 * @param returnType return type of attribute
525 * @param isList is list attribute
526 * @param genType generated java files
527 * @param annotation compiler annotation
Vinod Kumar S08710982016-03-03 19:55:30 +0530528 * @return getter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530529 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530530 static String getGetterForInterface(String yangName, String returnType,
531 boolean isList,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530532 int genType,
533 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530534 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530535 return getGetterInterfaceString(returnType, yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530536 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530537 }
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530538 String listAttr = getListAttribute(returnType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530539 return getGetterInterfaceString(listAttr, yangName, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530540 }
541
542 /**
543 * Returns getter for attribute in interface.
544 *
545 * @param returnType return type
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530546 * @param yangName attribute name
Bharat saraswal022dae92016-03-04 20:08:09 +0530547 * @return getter for interface
548 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530549 private static String getGetterInterfaceString(String returnType,
550 String yangName,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530551 int genType) {
552 switch (genType) {
553 case GENERATE_SERVICE_AND_MANAGER:
554 return getGetMethodWithArgument(returnType, yangName);
555 default:
556 return methodSignature(yangName, EMPTY_STRING, null,
557 null, returnType, null, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530558 }
Bharat saraswal97459962016-02-20 21:57:16 +0530559 }
560
561 /**
562 * Returns the setter method strings for interface file.
563 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530564 * @param attrName name of the attribute
565 * @param attrType return type of attribute
566 * @param className name of the java class being generated
567 * @param isList is list attribute
568 * @param genType generated java files
569 * @param annotation compiler annotations
Vinod Kumar S08710982016-03-03 19:55:30 +0530570 * @return setter method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530571 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530572 static String getSetterForInterface(String attrName, String attrType,
573 String className,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530574 boolean isList, int genType,
575 YangCompilerAnnotation annotation) {
Bharat saraswal022dae92016-03-04 20:08:09 +0530576 if (!isList) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530577 return getSetterInterfaceString(className, attrName, attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530578 genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530579 }
Vidyashree Ramab3670472016-08-06 15:49:56 +0530580
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530581 String listAttr = getListAttribute(attrType, annotation);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530582 return getSetterInterfaceString(className, attrName, listAttr, genType);
Bharat saraswal022dae92016-03-04 20:08:09 +0530583 }
584
585 /**
586 * Returns setter string for interface.
587 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530588 * @param name class name
589 * @param attrName attribute name
590 * @param attrType attribute type
Bharat saraswal022dae92016-03-04 20:08:09 +0530591 * @return setter string
592 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530593 private static String getSetterInterfaceString(String name,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530594 String attrName,
595 String attrType,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530596 int genType) {
597 if (genType == GENERATE_SERVICE_AND_MANAGER) {
598 return methodSignature(getCapitalCase(attrName),
599 SET_METHOD_PREFIX,
600 null, attrName, VOID, attrType +
601 OP_PARAM, INTERFACE_TYPE);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530602 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530603 return methodSignature(attrName, EMPTY_STRING, null,
604 attrName, name + BUILDER, attrType, INTERFACE_TYPE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530605 }
606
607 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530608 * Returns return type for attribute.
609 *
610 * @param attr attribute info
611 * @return return type
612 */
613 private static String getReturnType(JavaAttributeInfo attr) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530614 String returnType;
615 StringBuilder builder = new StringBuilder();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530616 if (attr.isQualifiedName() &&
617 attr.getImportInfo().getPkgInfo() != null) {
Bharat saraswal84366c52016-03-23 19:40:35 +0530618 returnType = attr.getImportInfo().getPkgInfo() + PERIOD;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530619 builder.append(returnType);
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530620 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530621 returnType = attr.getImportInfo().getClassInfo();
622 builder.append(returnType);
623 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530624 }
625
626 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530627 * Returns the build method strings for interface file.
628 *
Vinod Kumar S08710982016-03-03 19:55:30 +0530629 * @param yangName name of the interface
630 * @return build method for interface
Bharat saraswal97459962016-02-20 21:57:16 +0530631 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530632 static String getBuildForInterface(String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530633 return methodSignature(BUILD, EMPTY_STRING, null, null,
634 yangName, null, INTERFACE_TYPE);
Bharat saraswal97459962016-02-20 21:57:16 +0530635 }
636
637 /**
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530638 * Returns constructor string for impl class.
639 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530640 * @param yangName class name
641 * @param isRootNode if root node
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530642 * @return constructor string
643 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530644 static String getConstructorStart(String yangName,
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530645 boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530646 StringBuilder builder = new StringBuilder(
647 getConstructorString(yangName));
Bharat saraswal8beac342016-08-04 02:00:03 +0530648
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530649 String name = getCapitalCase(yangName);
650 String returnType = DEFAULT_CAPS + name;
Bharat saraswal8beac342016-08-04 02:00:03 +0530651 if (isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530652 returnType = name + OP_PARAM;
Bharat saraswal8beac342016-08-04 02:00:03 +0530653 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530654 builder.append(methodSignature(
655 returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
656 null, name + BUILDER, CLASS_TYPE));
657 return builder.toString();
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530658 }
659
660 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530661 * Returns the constructor strings for class file.
662 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530663 * @param attr attribute info
664 * @param genType generated java files
Bharat saraswal97459962016-02-20 21:57:16 +0530665 * @return constructor for class
666 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530667 public static String getConstructor(JavaAttributeInfo attr, int genType) {
668 String attrName = attr.getAttributeName();
669 String attrCaps = getCapitalCase(attrName);
670 switch (genType) {
671 case GENERATE_SERVICE_AND_MANAGER:
672 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
673 attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530674 false, null);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530675 default:
676 return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
677 attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530678 null, false, null);
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530679 }
Bharat saraswal97459962016-02-20 21:57:16 +0530680 }
681
682 /**
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530683 * Returns the rpc strings for service interface.
684 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530685 * @param rpcName name of the rpc
686 * @param input name of input
687 * @param output name of output
Gaurav Agrawal02a60de2016-04-20 15:49:17 +0530688 * @return rpc method string
689 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530690 public static String getRpcServiceMethod(String rpcName, String input,
691 String output) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530692 String inputVal = null;
693 if (input != null) {
694 inputVal = RPC_INPUT_VAR_NAME;
695 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530696 return methodSignature(rpcName, EMPTY_STRING, null,
697 inputVal, output, input, INTERFACE_TYPE) +
698 NEW_LINE;
VinodKumarS-Huawei6266db32016-05-10 17:58:57 +0530699 }
700
701 /**
Bharat saraswal97459962016-02-20 21:57:16 +0530702 * Returns the build method strings for class file.
703 *
Bharat saraswal8beac342016-08-04 02:00:03 +0530704 * @param yangName class name
705 * @param isRootNode if root node
Vinod Kumar S08710982016-03-03 19:55:30 +0530706 * @return build method string for class
Bharat saraswal97459962016-02-20 21:57:16 +0530707 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530708 static String getBuild(String yangName, boolean isRootNode) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530709 String type = DEFAULT_CAPS + yangName;
Bharat saraswal8beac342016-08-04 02:00:03 +0530710 if (isRootNode) {
711 type = yangName + OP_PARAM;
712 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530713 return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
714 yangName, null,
715 CLASS_TYPE) +
716 methodBody(MethodBodyTypes.BUILD, type, BUILD,
717 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530718 null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530719 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530720 }
721
722 /**
723 * Returns the Default constructor strings for class file.
724 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +0530725 * @param name name of the class
Bharat saraswal022dae92016-03-04 20:08:09 +0530726 * @param modifierType modifier type for default constructor
Bharat saraswal97459962016-02-20 21:57:16 +0530727 * @return Default constructor for class
728 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530729 private static String getDefaultConstructor(String name,
730 String modifierType) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530731 return methodSignature(name, EMPTY_STRING, modifierType, null,
732 null, null, CLASS_TYPE) +
733 methodClose(FOUR_SPACE);
Bharat saraswal97459962016-02-20 21:57:16 +0530734 }
735
Bharat saraswal022dae92016-03-04 20:08:09 +0530736 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530737 * Returns to string method's open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530738 *
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530739 * @return string method's open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530740 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530741 static String getToStringMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530742 StringBuilder builder = new StringBuilder(getOverRideString());
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530743 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530744 PUBLIC, null, STRING_DATA_TYPE, null,
745 CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530746 builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
747 EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
748 .append(getOmitNullValueString());
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530749 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530750 }
751
752 /**
753 * Returns to string method's close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530754 *
755 * @return to string method close string
756 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530757 static String getToStringMethodClose() {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530758 return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530759 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
760 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530761 }
762
763 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530764 * Returns to string method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530765 *
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530766 * @param attr java attribute
767 * @return to string method for class
Bharat saraswal022dae92016-03-04 20:08:09 +0530768 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530769 public static String getToStringMethod(JavaAttributeInfo attr) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530770 return methodBody(TO_STRING, attr.getAttributeName(), null,
771 TWELVE_SPACE_INDENTATION, null, null, false, null);
Bharat saraswal022dae92016-03-04 20:08:09 +0530772 }
773
774 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530775 * Returns from string method's open string.
776 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530777 * @param className name of the class
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530778 * @return from string method's open string
779 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530780 static String getFromStringMethodSignature(String className) {
781 return getJavaDoc(FROM_METHOD, className, false, null) +
782 methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
783 SPACE + STATIC, FROM_STRING_PARAM_NAME,
784 className, STRING_DATA_TYPE,
785 CLASS_TYPE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530786 }
787
788 /**
789 * Return from string method's close string.
790 *
791 * @return from string method's close string
792 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530793 static String getFromStringMethodClose() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530794 return getReturnString(NULL, EIGHT_SPACE_INDENTATION) +
795 signatureClose() + methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530796 }
797
798 /**
799 * Return from string method's body string.
800 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530801 * @param attr attribute info
802 * @param fromAttr attribute info for the from string wrapper
803 * type
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530804 * @return from string method's body string
805 */
806 public static String getFromStringMethod(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530807 JavaAttributeInfo fromAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530808
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530809 return EIGHT_SPACE_INDENTATION + getTrySubString() +
810 getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530811 getParsedSubString(attr, fromAttr) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530812 getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
813 getCatchSubString() +
814 getNewLineAndSpace(EIGHT_SPACE_INDENTATION) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530815 CLOSE_CURLY_BRACKET;
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530816 }
817
818 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530819 * Returns sub string with parsed statement for union's from string method.
820 *
821 * @param attr attribute info
822 * @return sub string with parsed statement for union's from string method
823 */
824 private static String getParsedSubString(JavaAttributeInfo attr,
Bharat saraswal0663aff2016-10-18 23:16:14 +0530825 JavaAttributeInfo fromStringAttr) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530826
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530827 String targetDataType = getReturnType(attr);
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530828 YangDataTypes types = fromStringAttr.getAttributeType()
829 .getDataType();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530830 StringBuilder method = new StringBuilder();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530831 switch (types) {
832 case BITS:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530833 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530834 SPACE + getCapitalCase(attr.getAttributeName()) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530835 PERIOD + FROM_STRING_METHOD_NAME +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530836 getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
837 signatureClose();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530838 case BINARY:
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530839 return method.append(targetDataType).append(SPACE).append(TMP_VAL)
840 .append(SPACE).append(EQUAL).append(SPACE).append(
841 geStringConverterForBinary(FROM_STRING_PARAM_NAME))
842 .append(signatureClose()).toString();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530843 default:
844 return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530845 SPACE + getParseFromStringMethod(
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530846 targetDataType, fromStringAttr.getAttributeType()) +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530847 getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
848 signatureClose();
Mahesh Poojary Huawei2cd44332016-07-14 12:38:17 +0530849 }
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530850 }
851
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530852 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530853 * Returns from string converter for binary type.
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530854 *
855 * @param var variable name
856 * @return to string method body
857 */
858 private static String geStringConverterForBinary(String var) {
859 StringBuilder builder = new StringBuilder();
860 return builder.append(BASE64).append(PERIOD)
861 .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
Bharat saraswal0663aff2016-10-18 23:16:14 +0530862 .append(DECODE).append(getOpenCloseParaWithValue(var)).toString();
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530863 }
864
865 /**
Bharat saraswal94844d62016-10-13 13:28:03 +0530866 * Returns to string converter for binary type.
867 *
868 * @param var variable name
869 * @return to string method body
870 */
871 private static String getToStringForBinary(String var) {
872 StringBuilder builder = new StringBuilder();
873 return builder.append(BASE64).append(PERIOD)
874 .append(GET_ENCODER).append(OPEN_CLOSE_BRACKET_STRING)
875 .append(PERIOD).append(ENCODE_TO_STRING)
Bharat saraswal0663aff2016-10-18 23:16:14 +0530876 .append(getOpenCloseParaWithValue(var)).toString();
Bharat saraswal94844d62016-10-13 13:28:03 +0530877 }
878
879 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530880 * Returns hash code method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530881 *
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530882 * @return hash code method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530883 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530884 static String getHashCodeMethodOpen() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530885 String line;
886 StringBuilder builder = new StringBuilder(getOverRideString());
887 builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
888 null, INT, null, CLASS_TYPE));
889 line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
890 OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
891 builder.append(line);
892 return builder.toString();
Bharat saraswal022dae92016-03-04 20:08:09 +0530893 }
894
895 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530896 * Returns hash code methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530897 *
898 * @param hashcodeString hash code string
899 * @return to hash code method close string
900 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530901 static String getHashCodeMethodClose(String hashcodeString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530902 String[] array = {SPACE, COMMA};
903 hashcodeString = trimAtLast(hashcodeString, array);
904 return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
905 methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530906 }
907
908 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530909 * Returns hash code method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530910 *
911 * @param attr attribute info
912 * @return hash code method
913 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530914 public static String getHashCodeMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530915 return attr.getAttributeName() + COMMA + SPACE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530916 }
917
918 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530919 * Returns equals method open strings.
Bharat saraswal022dae92016-03-04 20:08:09 +0530920 *
921 * @param className class name
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530922 * @return equals method open string
Bharat saraswal022dae92016-03-04 20:08:09 +0530923 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530924 static String getEqualsMethodOpen(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530925 return getOverRideString() +
926 methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
927 BOOLEAN_DATA_TYPE, OBJECT_STRING,
928 CLASS_TYPE) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530929 getEqualsMethodsCommonIfCondition() +
930 getEqualsMethodsSpecificIfCondition(className);
Bharat saraswal022dae92016-03-04 20:08:09 +0530931 }
932
933 /**
934 * Returns equal methods if condition string.
935 *
936 * @return if condition string
937 */
938 private static String getEqualsMethodsCommonIfCondition() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530939 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
940 EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
941 TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
942 + methodClose(EIGHT_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530943 }
944
945 /**
946 * Returns if condition for specific class object in equals method.
947 *
948 * @param className class name
949 * @return if condition string
950 */
951 private static String getEqualsMethodsSpecificIfCondition(String className) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530952 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
953 INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
954 OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
955 className + SPACE + OTHER + SPACE + EQUAL + SPACE +
956 OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530957 SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530958 NEW_LINE;
Bharat saraswal022dae92016-03-04 20:08:09 +0530959 }
960
961 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530962 * Returns equals methods close string.
Bharat saraswal022dae92016-03-04 20:08:09 +0530963 *
964 * @param equalMethodString equal method string
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530965 * @return equals method close string
Bharat saraswal022dae92016-03-04 20:08:09 +0530966 */
Bharat saraswal8beac342016-08-04 02:00:03 +0530967 static String getEqualsMethodClose(String equalMethodString) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530968 String[] array = {NEW_LINE, AND, AND, SPACE};
969 equalMethodString = trimAtLast(equalMethodString, array) +
970 signatureClose();
971 return equalMethodString + methodClose(EIGHT_SPACE) +
972 getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
973 signatureClose() + methodClose(FOUR_SPACE);
Bharat saraswal022dae92016-03-04 20:08:09 +0530974 }
975
976 /**
Bharat saraswal63f26fb2016-04-05 15:13:44 +0530977 * Returns equals method for class.
Bharat saraswal022dae92016-03-04 20:08:09 +0530978 *
979 * @param attr attribute info
980 * @return equals method
981 */
Vinod Kumar S9f26ae52016-03-23 15:30:27 +0530982 public static String getEqualsMethod(JavaAttributeInfo attr) {
janani b703cfe42016-05-17 13:12:22 +0530983 String attributeName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530984 return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530985 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
986 COMMA + SPACE + OTHER + PERIOD + attributeName +
987 CLOSE_PARENTHESIS + SPACE + AND + AND;
Bharat saraswal022dae92016-03-04 20:08:09 +0530988 }
989
990 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530991 * Returns of method's string and java doc for special type.
992 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530993 * @param attr attribute info
994 * @param className class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530995 * @return of method's string and java doc for special type
996 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +0530997 public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530998 String className) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +0530999 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301000 String attrName = attr.getAttributeName();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301001
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301002 return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
1003 false, null) + getOfMethodString(attrType, className);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301004 }
1005
1006 /**
1007 * Returns of method's string.
1008 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301009 * @param type data type
1010 * @param name class name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301011 * @return of method's string
1012 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301013 private static String getOfMethodString(String type, String name) {
1014 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
1015 VALUE, name, type, CLASS_TYPE) +
1016 methodBody(MethodBodyTypes.OF_METHOD, name, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301017 EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301018 methodClose(FOUR_SPACE);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301019 }
1020
1021 /**
1022 * Returns string and java doc for constructor of type class.
1023 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301024 * @param attr attribute info
1025 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301026 * @param genType generate file type
1027 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301028 * @return string and java doc for constructor of type class
1029 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301030 public static String getTypeConstructorStringAndJavaDoc(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301031 JavaAttributeInfo attr, String className, int genType, int count) {
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301032 String attrType = getReturnType(attr);
janani b703cfe42016-05-17 13:12:22 +05301033 String attrName = attr.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301034 return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301035 getTypeConstructorString(attrType, attrName, className,
1036 genType, count);
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301037 }
1038
1039 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301040 * Returns string and java doc for constructor of type class.
1041 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301042 * @param attr1 first attribute info
1043 * @param attr2 second attribute info
1044 * @param genType class name
1045 * @param type conflict validate type
1046 * @param addFirst whether int came first or uInt came first
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301047 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301048 * @return string and java doc for constructor of type class
1049 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301050 public static String getTypeConstructorStringAndJavaDoc(
1051 JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301052 ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301053
Bharat saraswal64e7e232016-07-14 23:33:55 +05301054 String attrType = getReturnType(attr1);
1055 String attrName1 = "";
1056 String attrName2 = "";
1057 if (attr1 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301058 if (addFirst) {
1059 attrName1 = attr1.getAttributeName();
1060 } else {
1061 attrName2 = attr1.getAttributeName();
1062 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301063 }
1064 if (attr2 != null) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301065 if (addFirst) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301066 attrName2 = attr2.getAttributeName();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301067 } else {
1068 attrName1 = attr2.getAttributeName();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301069 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301070 }
1071
Vidyashree Ramab3670472016-08-06 15:49:56 +05301072 String appDataStructure = null;
Bharat saraswal2da23bf2016-08-25 15:28:39 +05301073 if (attr1 != null && attr1.getCompilerAnnotation() != null) {
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301074 appDataStructure =
1075 attr1.getCompilerAnnotation().getYangAppDataStructure()
1076 .getDataStructure().name();
Vidyashree Ramab3670472016-08-06 15:49:56 +05301077 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301078 String doc;
1079 if (attrName1.isEmpty()) {
1080 doc = attrName2;
1081 } else {
1082 doc = attrName1;
1083 }
1084 return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301085 getTypeConstructorString(attrType, attrName1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301086 attrName2, genType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301087 type, addFirst, count);
Bharat saraswal64e7e232016-07-14 23:33:55 +05301088 }
1089
1090 /**
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301091 * Returns type constructor string.
1092 *
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301093 * @param type data type
1094 * @param name attribute name
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301095 * @param className class name
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301096 * @param genType generated file type
1097 * @param count type count
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301098 * @return type constructor string
1099 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301100 private static String getTypeConstructorString(String type, String name,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301101 String className, int genType, int count) {
1102 StringBuilder builder = new StringBuilder();
1103 builder.append(
1104 methodSignature(className, EMPTY_STRING, PUBLIC, name,
1105 null, type, CLASS_TYPE));
1106 if (genType == GENERATE_UNION_CLASS) {
1107 builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1108 .append(PERIOD).append(SET_METHOD_PREFIX).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301109 getOpenCloseParaWithValue(count + EMPTY_STRING))
1110 .append(signatureClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301111 }
1112 builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
1113 EMPTY_STRING, null, false, null))
1114 .append(methodClose(FOUR_SPACE));
1115 return builder.toString();
Gaurav Agrawal97a5e1c2016-04-18 18:53:11 +05301116 }
1117
1118 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301119 * Returns type constructor string.
1120 *
1121 * @param type data type
1122 * @param attr1 attribute attr1
1123 * @param className class attr1
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301124 * @param count type count
Bharat saraswal64e7e232016-07-14 23:33:55 +05301125 * @return type constructor string
1126 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301127 private static String getTypeConstructorString(
1128 String type, String attr1, String attr2, String className,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301129 ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301130 StringBuilder constructor = new StringBuilder(
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301131 methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301132 null, type, CLASS_TYPE))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301133 .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
1134 .append(PERIOD).append(SET_METHOD_PREFIX).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301135 getOpenCloseParaWithValue(count + EMPTY_STRING))
1136 .append(signatureClose())
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301137 .append(ifConditionForIntInTypeDefConstructor(validatorType,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301138 addInt, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301139 .append(methodBody(SETTER, attr1, null,
1140 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301141 null, false, attr1));
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301142 String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
1143 ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301144 constructor.append(str)
1145 .append(methodBody(SETTER, attr2, null,
1146 TWELVE_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301147 null, false, attr1))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301148 .append(methodClose(FOUR_SPACE))
1149 .append(methodClose(EIGHT_SPACE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301150
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301151 return constructor.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301152 }
1153
1154 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301155 * Returns interface of add augmentation.
1156 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301157 * @param className class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301158 * @return interface of add augmentation
1159 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301160 static String getAddAugmentInfoMethodInterface(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301161 StringBuilder builder = new StringBuilder(generateForAddAugmentation());
1162 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301163 map.put(VALUE, OBJECT_STRING);
1164 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301165 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1166 EMPTY_STRING, EMPTY_STRING,
Bharat saraswal94844d62016-10-13 13:28:03 +05301167 className, map, INTERFACE_TYPE));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301168 return builder.toString();
Bharat saraswal8beac342016-08-04 02:00:03 +05301169 }
1170
1171 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301172 * Returns implementation of add augmentation.
1173 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301174 * @param className class name
Bharat saraswalaf413b82016-07-14 15:18:20 +05301175 * @return implementation of add augmentation
1176 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301177 static String getAddAugmentInfoMethodImpl(String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301178 StringBuilder builder = new StringBuilder(getOverRideString());
1179 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301180 map.put(VALUE, OBJECT_STRING);
1181 map.put(CLASS + OBJECT_STRING, CLASS_STRING);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301182 builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
1183 EMPTY_STRING, PUBLIC,
Bharat saraswal94844d62016-10-13 13:28:03 +05301184 className, map, CLASS_TYPE))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301185 .append(methodBody(AUGMENTED_MAP_ADD, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301186 EIGHT_SPACE_INDENTATION, null, null, false, null))
Bharat saraswal94844d62016-10-13 13:28:03 +05301187 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1188 .append(signatureClose())
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301189 .append(methodClose(FOUR_SPACE))
1190 .append(NEW_LINE);
1191 return builder.toString();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301192 }
1193
1194 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301195 * Returns interface of get YANG augment info.
Bharat saraswalaf413b82016-07-14 15:18:20 +05301196 *
Bharat saraswal8beac342016-08-04 02:00:03 +05301197 * @return interface of get YANG augment info
Bharat saraswalaf413b82016-07-14 15:18:20 +05301198 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301199 static String getYangAugmentInfoInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301200 return generateForGetAugmentation() +
1201 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1202 null, CLASS + OBJECT_STRING,
1203 OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301204 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301205
Bharat saraswal8beac342016-08-04 02:00:03 +05301206 /**
1207 * Returns implementation of get YANG augment info.
1208 *
1209 * @return implementation of get YANG augment info
1210 */
1211 static String getYangAugmentInfoImpl() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301212 return getOverRideString() +
1213 methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
1214 PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
1215 CLASS_STRING, CLASS_TYPE) +
1216 methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301217 EIGHT_SPACE_INDENTATION, null, null, false, null) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301218 methodClose(FOUR_SPACE);
Bharat saraswalaf413b82016-07-14 15:18:20 +05301219 }
1220
1221 /**
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301222 * Returns enum's constructor.
1223 *
1224 * @param className enum's class name
1225 * @return enum's constructor
1226 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301227 static String getEnumsConstructor(String className) {
Bharat saraswalb41904b2016-10-20 19:22:36 +05301228 StringBuilder builder = new StringBuilder(
1229 getJavaDoc(TYPE_CONSTRUCTOR, className, false, null));
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301230 String clsName = getSmallCase(className);
1231 LinkedHashMap<String, String> map = new LinkedHashMap<>();
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301232 map.put(clsName, INT);
1233 map.put(SCHEMA_NAME, STRING_DATA_TYPE);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301234 builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
1235 EMPTY_STRING, null,
1236 map, CLASS_TYPE))
1237 .append(methodBody(SETTER, clsName, EMPTY_STRING,
1238 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301239 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301240 .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
1241 EIGHT_SPACE_INDENTATION, EMPTY_STRING,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301242 EMPTY_STRING, false, null))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301243 .append(methodClose(FOUR_SPACE));
1244
1245 return builder.toString();
Bharat saraswal68fa0d12016-04-19 01:00:16 +05301246 }
Bharat saraswal250a7472016-05-12 13:16:57 +05301247
1248 /**
1249 * Returns of method for enum class.
1250 *
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301251 * @param className class name
1252 * @param type method body type
Bharat saraswal250a7472016-05-12 13:16:57 +05301253 * @return of method
1254 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301255 static String getEnumsOfValueMethod(String className,
1256 YangEnumeration enumeration,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301257 MethodBodyTypes type) {
1258 String name = getCapitalCase(className);
1259 StringBuilder builder = new StringBuilder(getJavaDoc(
1260 OF_METHOD, name + SPACE + FOR,
1261 false, null));
1262 //Switch statement.
Bharat saraswal0663aff2016-10-18 23:16:14 +05301263 String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE +
1264 getOpenCloseParaWithValue(VALUE) +
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301265 methodSignatureClose(CLASS_TYPE);
Bharat saraswal748fc3c2016-09-06 16:38:20 +05301266 String str;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301267 switch (type) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301268 case ENUM_METHOD_INT_VALUE:
1269 builder.append(getEnumValueMethodSignature(name, INT))
1270 .append(sw);
1271 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1272 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1273 .toUpperCase();
1274 builder.append(getEnumValueMethodCases(
1275 EMPTY_STRING + yangEnum.getValue(), str, name));
1276 }
1277 break;
1278 case ENUM_METHOD_STRING_VALUE:
1279 builder.append(getEnumValueMethodSignature(name,
1280 STRING_DATA_TYPE))
1281 .append(sw);
1282 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1283 str = getEnumJavaAttribute(yangEnum.getNamedValue())
1284 .toUpperCase();
1285 builder.append(getEnumValueMethodCases(
1286 QUOTES + yangEnum.getNamedValue() + QUOTES, str,
1287 name));
1288 }
1289 break;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301290 default:
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301291 return null;
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301292 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301293
1294 String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
1295 NEW_LINE;
1296 builder.append(method)
1297 .append(getReturnString(NULL, SIXTEEN_SPACE_INDENTATION))
1298 .append(signatureClose())
1299 .append(methodClose(EIGHT_SPACE))
1300 .append(methodClose(FOUR_SPACE));
1301
1302 return builder.toString();
1303 }
1304
1305 /**
1306 * Returns enum value method signature.
1307 *
1308 * @param name method name
1309 * @param type param type
1310 * @return enum value method signature
1311 */
1312 private static String getEnumValueMethodSignature(String name, String type) {
1313 return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
1314 STATIC, VALUE, name, type, CLASS_TYPE);
1315 }
1316
1317 /**
1318 * Returns enum value method's cases.
1319 *
1320 * @param caseType case type
1321 * @param value return value
1322 * @param name name of class
1323 * @return enum value method's cases
1324 */
1325 private static String getEnumValueMethodCases(String caseType, String value,
1326 String name) {
1327 return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
1328 COLON + NEW_LINE + getReturnString(name,
1329 SIXTEEN_SPACE_INDENTATION) +
1330 PERIOD + value + signatureClose();
Gaurav Agrawalbfce9342016-06-15 13:58:01 +05301331 }
Bharat saraswald14cbe82016-07-14 13:26:18 +05301332
1333 /**
Bharat saraswalaf413b82016-07-14 15:18:20 +05301334 * Returns augmented data getter and setter methods for service class.
1335 *
1336 * @param parent parent node
1337 * @return augmented data getter and setter methods for service class
1338 */
Bharat saraswal039f59c2016-07-14 21:57:13 +05301339 static String getAugmentsDataMethodForService(YangNode parent) {
Bharat saraswalaf413b82016-07-14 15:18:20 +05301340 List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
Bharat saraswal94844d62016-10-13 13:28:03 +05301341 if (targets.isEmpty()) {
1342 return EMPTY_STRING;
1343 }
1344 YangNode first = targets.get(0).getResolvedNode();
1345 //If target path is for notification then no need to generate get/set
1346 // for that augment in service class.
Bharat saraswal0663aff2016-10-18 23:16:14 +05301347 if (first instanceof InvalidOpTypeHolder) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301348 return EMPTY_STRING;
1349 }
Bharat saraswalaf413b82016-07-14 15:18:20 +05301350 YangNode augmentedNode;
1351 String curNodeName;
1352 String method;
1353 StringBuilder methods = new StringBuilder();
1354 String parentName;
1355 String returnType;
Bharat saraswal64e7e232016-07-14 23:33:55 +05301356 YangNode methodNode;
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301357 YangPluginConfig pluginConfig =
1358 ((JavaFileInfoContainer) parent).getJavaFileInfo()
1359 .getPluginConfig();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301360 for (YangAtomicPath nodeId : targets) {
Bharat saraswal039f59c2016-07-14 21:57:13 +05301361 augmentedNode = nodeId.getResolvedNode().getParent();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301362 methodNode = nodeId.getResolvedNode();
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301363 if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1364 .getJavaName() != null) {
1365 curNodeName =
1366 ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
1367 .getJavaName();
Bharat saraswalaf413b82016-07-14 15:18:20 +05301368 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301369 curNodeName = getCapitalCase(
1370 getCamelCase(methodNode.getName(),
1371 pluginConfig.getConflictResolver()));
Bharat saraswalaf413b82016-07-14 15:18:20 +05301372 }
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301373 returnType =
1374 getAugmentedClassNameForDataMethods(augmentedNode, parent);
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301375 parentName = getCurNodeName(augmentedNode,
1376 pluginConfig);
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301377 method = generateForGetMethodWithAttribute(returnType) +
1378 getGetMethodWithArgument(returnType, AUGMENTED +
1379 parentName + getCapitalCase(curNodeName)) + NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301380 methods.append(method);
1381
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301382 method = getJavaDoc(MANAGER_SETTER_METHOD,
1383 AUGMENTED + getCapitalCase(parentName) +
1384 getCapitalCase(curNodeName), false,
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301385 null) +
Bharat saraswalaf413b82016-07-14 15:18:20 +05301386 getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301387 getCapitalCase(curNodeName),
1388 returnType, parentName, false,
1389 GENERATE_SERVICE_AND_MANAGER, null) +
1390 NEW_LINE;
Bharat saraswalaf413b82016-07-14 15:18:20 +05301391 methods.append(method);
1392 }
1393 return methods.toString();
1394 }
1395
1396 /**
Bharat saraswal64e7e232016-07-14 23:33:55 +05301397 * Returns validator method for range in union class.
1398 *
1399 * @param type type
1400 * @return validator method for range in union class
1401 */
Bharat saraswal8beac342016-08-04 02:00:03 +05301402 static String getRangeValidatorMethodForUnion(String type) {
Bharat saraswal64e7e232016-07-14 23:33:55 +05301403 String newType;
1404 if (type.contentEquals(BIG_INTEGER)) {
1405 newType = LONG;
1406 } else {
1407 newType = INT;
1408 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301409 StringBuilder builder = new StringBuilder(generateForValidatorMethod());
1410 String var = getSmallCase(BIG_INTEGER);
1411 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1412 map.put(MIN_RANGE, type);
1413 map.put(MAX_RANGE, type);
1414 map.put(VALUE, newType);
1415 builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
1416 PRIVATE, BOOLEAN_DATA_TYPE, map,
1417 CLASS_TYPE));
Bharat saraswal64e7e232016-07-14 23:33:55 +05301418 if (type.contentEquals(BIG_INTEGER)) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301419 //Create new instance of big integer.
1420 builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
1421 QUOTES + SPACE + QUOTES + SPACE +
1422 ADD + SPACE + VALUE))
1423 //Add return string.
1424 .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
1425 //Add compareTo string
1426 .append(getCompareToString())
1427 //Add && condition.
1428 .append(ifAndAndCondition(
1429 //Add == condition
1430 ifEqualEqualCondition(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301431 getOpenCloseParaWithValue(MIN_RANGE), ONE),
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301432 var))
1433 //Add compareTo string.
1434 .append(getCompareToString())
1435 //Add == condition.
1436 .append(ifEqualEqualCondition(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301437 getOpenCloseParaWithValue(MAX_RANGE), ONE))
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301438 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301439 } else {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301440 builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
1441 .append(getGreaterThanCondition())
1442 .append(ifAndAndCondition(MIN_RANGE, VALUE))
1443 .append(getLesserThanCondition())
1444 .append(MAX_RANGE)
1445 .append(signatureClose());
Bharat saraswal64e7e232016-07-14 23:33:55 +05301446 }
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301447 builder.append(methodClose(FOUR_SPACE));
1448 return builder.toString();
Bharat saraswal64e7e232016-07-14 23:33:55 +05301449 }
1450
Bharat saraswal8beac342016-08-04 02:00:03 +05301451 //Get method with arguments.
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301452 private static String getGetMethodWithArgument(String returnType,
1453 String yangName) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301454 return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
1455 null, getSmallCase(returnType),
1456 returnType, returnType + OP_PARAM,
1457 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301458 }
Bharat saraswal64e7e232016-07-14 23:33:55 +05301459
Bharat saraswal8beac342016-08-04 02:00:03 +05301460 /**
1461 * Returns add to list method interface.
1462 *
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301463 * @param attr java attribute
1464 * @param className name of the class
Bharat saraswal8beac342016-08-04 02:00:03 +05301465 * @return add to list method interface
1466 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301467 public static String getAddToListMethodInterface(JavaAttributeInfo attr,
1468 String className) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301469
1470 return methodSignature(ADD_STRING + TO_CAPS + getCapitalCase(
1471 attr.getAttributeName()), EMPTY_STRING, EMPTY_STRING,
1472 ADD_STRING + TO_CAPS,
1473 className + BUILDER, getReturnType(attr),
1474 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301475 }
1476
1477 /**
1478 * Returns add to list method impl.
1479 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301480 * @param attr java attribute
1481 * @param name class name
Bharat saraswal8beac342016-08-04 02:00:03 +05301482 * @return add to list method impl
1483 */
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301484 public static String getAddToListMethodImpl(JavaAttributeInfo attr,
Bharat saraswal94844d62016-10-13 13:28:03 +05301485 String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301486 String attrName = attr.getAttributeName();
Bharat saraswal94844d62016-10-13 13:28:03 +05301487 String retString = getOverRideString();
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301488 StringBuilder builder = new StringBuilder(retString);
1489 builder.append(methodSignature(ADD_STRING + TO_CAPS +
1490 getCapitalCase(attrName),
1491 EMPTY_STRING, PUBLIC, ADD_STRING + TO_CAPS,
1492 name + BUILDER, getReturnType(attr),
1493 CLASS_TYPE))
1494 .append(getIfConditionForAddToListMethod(attrName));
1495 retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
1496 OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
1497 builder.append(retString)
1498 .append(signatureClose())
1499 .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
1500 .append(signatureClose())
1501 .append(methodClose(FOUR_SPACE));
1502 return builder.toString();
1503 }
1504
1505 // Returns if condition for add to list method.
1506 static String getIfConditionForAddToListMethod(String name) {
1507 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
1508 EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
1509 name + SPACE + EQUAL + SPACE +
1510 NEW + SPACE + ARRAY_LIST + signatureClose() + methodClose(
1511 EIGHT_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301512 }
1513
1514 /**
1515 * Returns builder method for class.
1516 *
1517 * @param name name of class
1518 * @return builder method for class
1519 */
1520 static String builderMethod(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301521 return generateForBuilderMethod(name) +
1522 methodSignature(BUILDER_LOWER_CASE,
1523 EMPTY_STRING, PUBLIC + SPACE +
1524 STATIC, null, name + BUILDER, null, CLASS_TYPE) +
1525 getReturnString(NEW + SPACE + name + BUILDER,
1526 EIGHT_SPACE_INDENTATION) +
1527 brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
1528 methodClose(FOUR_SPACE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301529 }
1530
1531 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301532 * Returns is value set interface.
1533 *
1534 * @return is value set interface
1535 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301536 static String isLeafValueSetInterface() {
1537 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301538 " * Checks if the leaf value is set.\n" +
1539 " *\n" +
1540 " * @param leaf leaf whose value status needs to checked\n" +
1541 " * @return result of leaf value set in object\n" +
1542 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301543 return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
1544 LEAF, BOOLEAN_DATA_TYPE,
1545 LEAF_IDENTIFIER, INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301546 }
1547
1548 /**
1549 * Returns is select leaf set interface.
1550 *
1551 * @return is select leaf set interface
1552 */
1553 static String isSelectLeafSetInterface() {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301554 String method = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301555 " * Checks if the leaf is set to be a selected leaf.\n" +
1556 " *\n" +
1557 " * @param leaf if leaf needs to be selected\n" +
1558 " * @return result of leaf value set in object\n" +
1559 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301560 return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
1561 LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
1562 INTERFACE_TYPE);
Bharat saraswal8beac342016-08-04 02:00:03 +05301563 }
1564
1565 /**
1566 * Returns set select leaf set interface.
1567 *
1568 * @param name node name
1569 * @return set select leaf set interface
1570 */
1571 static String setSelectLeafSetInterface(String name) {
1572 String method = " /**\n" +
1573 " * Set a leaf to be selected.\n" +
1574 " *\n" +
1575 " * @param leaf leaf needs to be selected\n" +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +05301576 " * @return builder object for select leaf\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301577 " */\n";
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301578 return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
1579 null, LEAF, name +
1580 BUILDER, LEAF_IDENTIFIER,
1581 INTERFACE_TYPE) + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301582 }
1583
1584 /**
1585 * Returns leaf identifier interface enum signature.
1586 *
1587 * @param name name of node
1588 * @return leaf identifier interface enum signature
1589 */
1590 static String getInterfaceLeafIdEnumSignature(String name) {
Bharat saraswal9fab16b2016-09-23 23:27:24 +05301591 String start = "\n /**\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301592 " * Identify the leaf of " + name + PERIOD + NEW_LINE +
1593 " */\n";
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301594 return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
1595 LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
Bharat saraswal8beac342016-08-04 02:00:03 +05301596 }
1597
1598 /**
Bharat saraswal8beac342016-08-04 02:00:03 +05301599 * Returns setter for select leaf.
1600 *
Bharat saraswal94844d62016-10-13 13:28:03 +05301601 * @param name name of node
Bharat saraswal8beac342016-08-04 02:00:03 +05301602 * @return setter for select leaf
1603 */
Bharat saraswal94844d62016-10-13 13:28:03 +05301604 static String getSetterForSelectLeaf(String name) {
Bharat saraswal8beac342016-08-04 02:00:03 +05301605 return "\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301606 " " + OVERRIDE + "\n" +
Gaurav Agrawal3b57f362016-09-07 13:16:35 +05301607 " public " + name + BUILDER +
1608 " selectLeaf(LeafIdentifier leaf) {\n" +
Bharat saraswal94844d62016-10-13 13:28:03 +05301609 " selectLeafFlags.set(leaf.getLeafIndex());\n" +
Bharat saraswal8beac342016-08-04 02:00:03 +05301610 " return this;\n" +
1611 " }\n";
1612 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301613
1614 /**
1615 * Generates fromString code for bits.
1616 *
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301617 * @return generated fromString code for bits.
1618 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301619 private static String getFromStringForBits(String bitClassName) {
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301620 /* generate code will look like this.
1621 public static BitSet fromString(String valInString) {
1622 BitSet tmpVal = new BitSet();
1623 String[] bitNames = valInString.trim().split(Pattern.quote(" "));
1624 for (String bitName : bitNames) {
1625 Bits bits = of(bitName);
1626 if (bits != null) {
1627 tmpVal.set(bits.bits());
1628 }
1629 }
1630 if (tmpVal.isEmpty()) {
1631 throw new NoSuchElementException("no such element found in bits");
1632 }
1633 return tmpVal;
1634 }*/
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301635 StringBuilder sBuild = new StringBuilder();
1636 sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
1637 PUBLIC + SPACE + STATIC,
1638 FROM_STRING_PARAM_NAME,
1639 BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
1640 .append(EIGHT_SPACE_INDENTATION)
1641 .append(getBitSetAttr(EMPTY_STRING));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301642 // Split the input string and check each bit name falls in configured yang file
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301643 sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
1644 .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
1645 .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
1646 .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
Bharat saraswal0663aff2016-10-18 23:16:14 +05301647 .append(PERIOD).append(SPLIT_STRING).append(getOpenCloseParaWithValue(
1648 getPatternQuoteString(SPACE))).append(signatureClose()).append(
1649 getForLoopString(EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
1650 BIT_NAMES_VAR));
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301651
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301652 String small = getSmallCase(bitClassName);
Bharat saraswal0663aff2016-10-18 23:16:14 +05301653 sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append(
1654 SPACE).append(small).append(SPACE).append(EQUAL).append(
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301655 SPACE).append(OF).append(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301656 getOpenCloseParaWithValue(BIT_NAME_VAR)).append(signatureClose());
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301657 String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
1658 sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301659 .append(SIXTEEN_SPACE_INDENTATION)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301660 .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
1661 .append(OPEN_PARENTHESIS)
1662 .append(small).append(PERIOD).append(small).append(
1663 OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
1664 .append(signatureClose()).append(methodClose(TWELVE_SPACE))
1665 .append(methodClose(EIGHT_SPACE));
Bharat saraswalc2fd3222016-10-19 16:10:27 +05301666
1667 condition = TMP_VAL + PERIOD + IS_EMPTY;
1668 sBuild.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, condition));
1669 sBuild.append(TWELVE_SPACE_INDENTATION).append(THROW_NEW)
1670 .append(EXCEPTION_STRING).append(methodClose(EIGHT_SPACE))
1671 .append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301672 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1673 return sBuild.toString();
1674 }
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301675
Bharat saraswal94844d62016-10-13 13:28:03 +05301676
1677 /**
1678 * Returns to string method for typedef.
1679 *
Bharat saraswal0663aff2016-10-18 23:16:14 +05301680 * @param attr attribute name
Bharat saraswal94844d62016-10-13 13:28:03 +05301681 * @return to string method for typedef
1682 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301683 static String getToStringForType(String attr, YangType type) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301684 StringBuilder builder = new StringBuilder(getOverRideString())
1685 .append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
1686 STRING_DATA_TYPE, null, CLASS_TYPE));
1687 builder.append(getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301688 getToStringForSpecialType(type, attr), EIGHT_SPACE_INDENTATION))
Bharat saraswal94844d62016-10-13 13:28:03 +05301689 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1690 return builder.toString();
1691 }
1692
1693 /**
1694 * Returns to string method body for type class.
1695 *
Bharat saraswal0663aff2016-10-18 23:16:14 +05301696 * @param type type of attribute
1697 * @param name @return to string method body for typedef class
Bharat saraswal94844d62016-10-13 13:28:03 +05301698 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301699 private static String getToStringForSpecialType(YangType type, String name) {
Bharat saraswal94844d62016-10-13 13:28:03 +05301700 switch (type.getDataType()) {
1701 case INT8:
1702 case INT16:
1703 case INT32:
1704 case INT64:
1705 case UINT8:
1706 case UINT16:
1707 case UINT32:
Bharat saraswal0663aff2016-10-18 23:16:14 +05301708 return STRING_DATA_TYPE + PERIOD + VALUE + OF_CAPS +
1709 getOpenCloseParaWithValue(name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301710
1711 case BINARY:
1712 return getToStringCall(getToStringForBinary(name));
1713
1714 case BITS:
Bharat saraswal0663aff2016-10-18 23:16:14 +05301715 return getCapitalCase(name) + PERIOD +
1716 TO_STRING_METHOD + getOpenCloseParaWithValue(name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301717
1718 case BOOLEAN:
1719 case EMPTY:
1720 return name + SPACE + QUESTION_MARK + SPACE + getQuotedString(TRUE)
1721 + SPACE + COLON + SPACE + getQuotedString(FALSE);
1722
1723 case LEAFREF:
1724 YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
1725 YangType<?> rt = lri.isInGrouping() ? null : lri
1726 .getEffectiveDataType();
1727 return rt == null ? getToStringCall(name) :
Bharat saraswal0663aff2016-10-18 23:16:14 +05301728 getToStringForSpecialType(rt, name);
Bharat saraswal94844d62016-10-13 13:28:03 +05301729
1730 case ENUMERATION:
1731 case INSTANCE_IDENTIFIER:
1732 case UINT64:
1733 case DECIMAL64:
1734 case DERIVED:
1735 case IDENTITYREF:
1736 case UNION:
1737 return getToStringCall(name);
1738
1739 default:
1740 return name;
1741 }
1742 }
1743
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301744 /**
1745 * Returns union class's to string method.
1746 *
1747 * @param types list of types
1748 * @return union class's to string method
1749 */
Bharat saraswal0663aff2016-10-18 23:16:14 +05301750 static String getUnionToStringMethod(List<YangType<?>> types) {
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301751
1752 StringBuilder builder = new StringBuilder(getOverRideString());
1753 builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
Bharat saraswal94844d62016-10-13 13:28:03 +05301754 STRING_DATA_TYPE, null, CLASS_TYPE));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301755 for (YangType type : types) {
1756 builder.append(getIfConditionBegin(
1757 EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
Bharat saraswal94844d62016-10-13 13:28:03 +05301758 types.indexOf(type)))).append(getReturnString(
Bharat saraswal0663aff2016-10-18 23:16:14 +05301759 getToStringForSpecialType(type,
Bharat saraswal94844d62016-10-13 13:28:03 +05301760 getCamelCase(type.getDataTypeName(), null)),
1761 TWELVE_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301762 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1763 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301764 builder.append(getReturnString(NULL, EIGHT_SPACE_INDENTATION)).append(signatureClose())
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301765 .append(methodClose(FOUR_SPACE));
1766 return builder.toString();
1767 }
1768
1769 /**
1770 * Returns from string method for bits class.
1771 *
1772 * @param className bits class name
1773 * @return from string method for bits class
1774 */
1775 static String getBitSetEnumClassFromString(String className) {
1776 return getJavaDoc(FROM_METHOD, className, false, null) +
1777 getFromStringForBits(className);
1778 }
1779
Bharat saraswal94844d62016-10-13 13:28:03 +05301780 /**
1781 * Returns to string method for bits type.
1782 *
1783 * @param className class name
1784 * @param enumeration enumeration
1785 * @return to string method
1786 */
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301787 static String getBitSetEnumClassToString(String className,
1788 YangEnumeration enumeration) {
1789
1790 StringBuilder builder = new StringBuilder();
Bharat saraswal94844d62016-10-13 13:28:03 +05301791 builder.append(methodSignature(TO_STRING_METHOD, null,
1792 PUBLIC + SPACE + STATIC, BITS,
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301793 STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
Bharat saraswal94844d62016-10-13 13:28:03 +05301794 .append(getStringBuilderAttr(EMPTY_STRING, EIGHT_SPACE_INDENTATION));
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301795 String condition;
1796 String name;
1797 for (YangEnum yangEnum : enumeration.getEnumSet()) {
1798 name = yangEnum.getNamedValue();
1799 condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
1800 className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
1801 + PERIOD + getSmallCase(className)
1802 + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
1803
1804
1805 builder.append(getIfConditionBegin(
1806 EIGHT_SPACE_INDENTATION, condition))
Bharat saraswal94844d62016-10-13 13:28:03 +05301807 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1808 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301809 .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
Bharat saraswal94844d62016-10-13 13:28:03 +05301810 .append(signatureClose())
1811 .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
1812 PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
1813 .append(getQuotedString(SPACE)).append(CLOSE_PARENTHESIS)
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301814 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
1815 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301816 builder.append(getReturnString(STRING_BUILDER_VAR, EIGHT_SPACE_INDENTATION))
Bharat saraswal54e4bab2016-10-05 23:32:14 +05301817 .append(PERIOD).append(TO_STRING_METHOD)
1818 .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
1819 .append(methodClose(FOUR_SPACE));
1820 return builder.toString();
Mahesh Poojary Huawei1025a172016-09-27 16:06:07 +05301821 }
Bharat saraswal94844d62016-10-13 13:28:03 +05301822
1823 /**
1824 * Returns to string method for enum class.
1825 *
1826 * @return to string method for enum class
1827 */
1828 static String getToStringForEnumClass() {
1829 StringBuilder builder = new StringBuilder(getOverRideString());
1830 builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
1831 PUBLIC, null, STRING_DATA_TYPE, null,
1832 CLASS_TYPE));
1833 builder.append(getReturnString(SCHEMA_NAME, EIGHT_SPACE_INDENTATION))
1834 .append(signatureClose()).append(methodClose(FOUR_SPACE));
1835 return builder.toString();
1836 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05301837
1838 /**
1839 * Returns is filter content match interface.
1840 *
1841 * @param name name of node
1842 * @return is filter content match interface
1843 */
1844 static String processSubtreeFilteringInterface(String name) {
1845 String method = " /**\n" +
1846 " * Checks if the passed " + name +
1847 " maps the content match query condition.\n" +
1848 " *\n" +
1849 " * @param " + getSmallCase(name) + SPACE +
1850 getSmallCase(name) + SPACE + "being passed to check" +
1851 " for" +
1852 " content match\n" +
1853 " * @param isSelectAllSchemaChild is select all schema child\n" +
1854 " * @return match result\n" +
1855 " */\n";
1856 LinkedHashMap<String, String> map = new LinkedHashMap<>();
1857 map.put(getSmallCase(name), name);
1858 map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
1859
1860 return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
1861 EMPTY_STRING, EMPTY_STRING,
1862 name, map, INTERFACE_TYPE);
1863 }
1864
1865 /**
Bharat saraswalb41904b2016-10-20 19:22:36 +05301866 * Returns build method for subtree filtering in class.
Bharat saraswal0663aff2016-10-18 23:16:14 +05301867 *
Bharat saraswalb41904b2016-10-20 19:22:36 +05301868 * @param node YANG node
1869 * @return build method for subtree filtering in class
Bharat saraswal0663aff2016-10-18 23:16:14 +05301870 */
Bharat saraswalb41904b2016-10-20 19:22:36 +05301871 static String generateBuildMethodForSubTree(YangNode node) {
1872 String name = getCapitalCase(node.getJavaClassNameOrBuiltInType());
Bharat saraswal0663aff2016-10-18 23:16:14 +05301873 StringBuilder builder = new StringBuilder(getJavaDoc(BUILD_METHOD,
1874 name, false, null));
1875 String def = DEFAULT_CAPS + name;
Bharat saraswalb41904b2016-10-20 19:22:36 +05301876 if (node instanceof RpcNotificationContainer) {
1877 def = name + OP_PARAM;
1878 }
Bharat saraswal0663aff2016-10-18 23:16:14 +05301879 builder.append(methodSignature(BUILD_FOR_FILTER, null, PUBLIC, null,
1880 name, null, CLASS_TYPE))
1881 .append(EIGHT_SPACE_INDENTATION).append(SUBTREE_FILTERED)
1882 .append(SPACE).append(EQUAL).append(SPACE).append(TRUE)
1883 .append(signatureClose()).append(methodBody(
1884 MethodBodyTypes.BUILD, def, null, EIGHT_SPACE_INDENTATION,
1885 null, null, false, null)).append(methodClose(FOUR_SPACE));
1886 return builder.toString();
1887 }
1888
Bharat saraswal97459962016-02-20 21:57:16 +05301889}