blob: c815027ec9b035a567b2fe9ca7344c006e0ab51e [file] [log] [blame]
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
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.RpcNotificationContainer;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053020import org.onosproject.yangutils.datamodel.YangAugment;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053021import org.onosproject.yangutils.datamodel.YangChoice;
22import org.onosproject.yangutils.datamodel.YangLeafRef;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053023import org.onosproject.yangutils.datamodel.YangLeavesHolder;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053024import org.onosproject.yangutils.datamodel.YangNode;
25import org.onosproject.yangutils.datamodel.YangType;
26import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
Bharat saraswal0663aff2016-10-18 23:16:14 +053027import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053028import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
29import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
Bharat saraswal0663aff2016-10-18 23:16:14 +053030import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053031import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053032import org.onosproject.yangutils.utils.io.YangPluginConfig;
33
Bharat saraswal9fab16b2016-09-23 23:27:24 +053034import java.io.IOException;
Bharat saraswal0663aff2016-10-18 23:16:14 +053035import java.util.HashMap;
36import java.util.LinkedHashMap;
37import java.util.Map;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053038
39import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
40import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
41import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
42import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
Bharat saraswal0663aff2016-10-18 23:16:14 +053043import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053044import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053045import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053046import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.SIXTEEN_SPACE;
47import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
48import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_FOUR_SPACE;
49import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_SPACE;
50import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
Bharat saraswal0663aff2016-10-18 23:16:14 +053051import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
52import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getAppInstanceAttrString;
53import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getChoiceChildNodes;
54import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCollectionIteratorForLoopBegin;
55import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getElseIfConditionBegin;
56import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getEqualEqualString;
57import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
58import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
59import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
60import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
61import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053062import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
Bharat saraswal0663aff2016-10-18 23:16:14 +053063import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
64import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
65import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.valueAssign;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053066import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
67import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
68import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
69import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053070import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053071import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
72import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
73import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
Bharat saraswal0663aff2016-10-18 23:16:14 +053074import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
75import static org.onosproject.yangutils.utils.UtilConstants.CHOICE_STF_METHOD_NAME;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053076import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
77import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053078import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
Bharat saraswal0663aff2016-10-18 23:16:14 +053079import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053080import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053081import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
Bharat saraswal0663aff2016-10-18 23:16:14 +053082import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053083import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
84import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053085import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053086import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
Bharat saraswal0663aff2016-10-18 23:16:14 +053087import static org.onosproject.yangutils.utils.UtilConstants.GET;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053088import static org.onosproject.yangutils.utils.UtilConstants.IF;
Bharat saraswal0663aff2016-10-18 23:16:14 +053089import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053090import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053091import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
Bharat saraswal9fab16b2016-09-23 23:27:24 +053092import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053093import static org.onosproject.yangutils.utils.UtilConstants.NEW;
94import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
95import static org.onosproject.yangutils.utils.UtilConstants.NOT;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053096import static org.onosproject.yangutils.utils.UtilConstants.NULL;
Bharat saraswal94844d62016-10-13 13:28:03 +053097import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053098import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
99import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530100import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530101import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
102import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
103import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530104import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_CHILD_NODE_STF_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530105import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530106import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530107import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530108import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD_SCHEMA_PARAM;
Bharat saraswal94844d62016-10-13 13:28:03 +0530109import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530110import static org.onosproject.yangutils.utils.UtilConstants.SELECT_OR_CONTAINMENT_NODE_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530111import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
112import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530113import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530114import static org.onosproject.yangutils.utils.UtilConstants.STF_BUILDER_PARAM;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530115import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
116import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530117import static org.onosproject.yangutils.utils.UtilConstants.TO;
118import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530119import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
120import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
121import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
122import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
Bharat saraswal94844d62016-10-13 13:28:03 +0530123import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530124import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530125import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530126
127/**
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530128 * Represents generator for subtree filtering methods of generated files
129 * based on the file type.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530130 */
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530131//TODO: improve class to use string generator.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530132public final class SubtreeFilteringMethodsGenerator {
133
134 /**
135 * private to make it a util.
136 */
137 private SubtreeFilteringMethodsGenerator() {
138 }
139
140 /**
141 * Returns is filter content match for leaf.
142 *
143 * @param javaAttributeInfo java attribute
144 * @param type data type
145 * @return is filter content match for leaf
146 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530147 public static String getSubtreeFilteringForLeaf(
148 JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530149 String attrQualifiedType;
150 String attributeName = javaAttributeInfo.getAttributeName();
151 attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530152 type);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530153 /* if (valueLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex())) {
154 * if (appInstance.leaf() != leaf()) {
155 * return false;
156 * } else {
157 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
158 * }
159 * } else if (selectLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex()) ||
160 * isSelectAllSchemaChild) {
161 * isAnySelectOrContainmentNode = true;
162 * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
163 * }*/
164 return getIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
165 attributeName, VALUE_LEAF, EMPTY_STRING, GET)) +
166 getIfConditionBegin(TWELVE_SPACE_INDENTATION, attrQualifiedType) +
167 getReturnString(FALSE, SIXTEEN_SPACE_INDENTATION) +
168 signatureClose() +
169 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE +
170 SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
171 getSubTreeBuilderCallString(SIXTEEN_SPACE_INDENTATION, attributeName,
172 TWELVE_SPACE) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530173 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530174 getIfConditionBegin(SPACE, getLeafFlagSetString(
175 attributeName, SELECT_LEAF, EMPTY_STRING, GET) + SPACE +
176 OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG) +
177 valueAssign(IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG, TRUE,
178 TWELVE_SPACE_INDENTATION) +
179 getSubTreeBuilderCallString(TWELVE_SPACE_INDENTATION, attributeName,
180 EIGHT_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530181 }
182
Bharat saraswal0663aff2016-10-18 23:16:14 +0530183 private static String getSubTreeBuilderCallString(String indent, String
184 name, IndentationType type) {
185 return indent + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name +
186 getOpenCloseParaWithValue(APP_INSTANCE + PERIOD + name +
187 OPEN_CLOSE_BRACKET_STRING) +
188 signatureClose() + methodClose(type);
189 }
190
191 private static String getAttrTypeForFcmWhenPrimitiveDataType(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530192 String attributeName) {
193 return/* TODO: Need to check if we can expose the value leaf flag in
194 interface.
195 NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
196 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
197 GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
198 PERIOD + attributeName.toUpperCase() + PERIOD
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530199 + GET_LEAF_INDEX + OR_OPERATION +*/
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530200 APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
201 CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
202 attributeName + OPEN_PARENTHESIS +
203 CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530204 }
205
Bharat saraswal0663aff2016-10-18 23:16:14 +0530206 private static String attrTypeForFcmWhenNonPrimitiveDataTypes(String name) {
207 /*
208 * appInstance.name() == null || name().equals(appInstance.name())
209 */
210 return getEqualEqualString(StringGenerator.getAppInstanceAttrString(name), NULL) +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530211 SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530212 getTwoParaEqualsString(name + OPEN_CLOSE_BRACKET_STRING,
213 StringGenerator.getAppInstanceAttrString(name))
214 + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530215 }
216
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530217 private static String getIfFilterContentMatchMethodImpl(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530218 String name, YangType dataType) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530219 String attrQualifiedType;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530220 if (dataType.getDataType().isPrimitiveDataType()) {
221 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530222 } else if (dataType.getDataType() == LEAFREF) {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530223
224 // When leafref in grouping.
225 if (((YangLeafRef) dataType.getDataTypeExtendedInfo())
226 .isInGrouping()) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530227 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530228 } else {
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530229 YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
230 .getEffectiveDataType();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530231 if (type.getDataType().isPrimitiveDataType()) {
232 attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530233 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530234 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(
235 name);
Gaurav Agrawal9381ebb2016-09-29 19:00:33 +0530236 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530237 }
238 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530239 attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530240 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530241 return attrQualifiedType;
242 }
243
244 /**
245 * Returns is filter content match for leaf.
246 *
247 * @param javaAttributeInfo java attribute
248 * @return is filter content match for leaf
249 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530250 public static String getSubtreeFilteringForLeafList(
251 JavaAttributeInfo javaAttributeInfo) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530252 return getSubtreeFilteringForList(javaAttributeInfo, true, null);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530253 }
254
255 /**
256 * Returns is filter content match for child node.
257 *
258 * @param curNode current node
259 * @param pluginConfig plugin configurations
260 * @param path path of temp file
261 * @return is filter content match for child node
262 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530263 static String getProcessChildNodeSubtreeFiltering(YangNode curNode,
264 YangPluginConfig
265 pluginConfig,
266 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530267 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530268 JavaFileInfoTranslator javaFileInfo =
269 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530270 String instance = APP_INSTANCE;
271 String name = getCapitalCase(javaFileInfo.getJavaName());
272 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530273
Bharat saraswal0663aff2016-10-18 23:16:14 +0530274 Map<String, String> param = new HashMap<>();
275 param.put(PROCESS_CHILD_NODE_STF_PARAM, BOOLEAN_DATA_TYPE);
276 param.put(instance, name);
277 param.put(STF_BUILDER_PARAM, builderNamePrefix + BUILDER);
278 param.put(SELECT_OR_CONTAINMENT_NODE_PARAM, BOOLEAN_WRAPPER);
279 param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_WRAPPER);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530280
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530281
Bharat saraswal0663aff2016-10-18 23:16:14 +0530282 String method = FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
283 SPACE + PROCESS_CHILD_NODE_STF_PARAM +
284 OPEN_PARENTHESIS + name + SPACE + instance + COMMA +
285 SPACE + builderNamePrefix + BUILDER + SPACE +
286 STF_BUILDER_PARAM + COMMA +
287 " Boolean " +
288 "isAnySelectOrContainmentNode, " + "boolean " +
289 SELECT_ALL_CHILD_SCHEMA_PARAM + CLOSE_PARENTHESIS +
290 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
291
292 method +=
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530293 getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
294 ((TempJavaCodeFragmentFilesContainer) curNode)
295 .getTempJavaCodeFragmentFiles()
296 .getBeanTempFiles(), path);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530297
Bharat saraswal0663aff2016-10-18 23:16:14 +0530298 method +=
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530299 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530300 NEW_LINE + FOUR_SPACE_INDENTATION +
301 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530302 YangNode child = curNode.getChild();
303 while (child != null) {
304 if (child instanceof YangChoice) {
305 method += getChoiceInstanceForPstMethod(child, name);
306 }
307 child = child.getNextSibling();
308 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530309
Bharat saraswal0663aff2016-10-18 23:16:14 +0530310 return method;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530311 }
312
313 /**
314 * Returns is filter content match for leaf list.
315 *
316 * @param curNode current node
317 * @param pluginConfig plugin configurations
318 * @param path path of temp file
319 * @return is filter content match for leaf list
320 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530321 static String getProcessLeafListSubtreeFiltering(YangNode curNode,
322 YangPluginConfig
323 pluginConfig,
324 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530325 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530326 JavaFileInfoTranslator javaFileInfo =
327 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530328 String name = getCapitalCase(javaFileInfo.getJavaName());
329 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530330
331 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530332 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
333 SPACE + "processLeafListSubTreeFiltering" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530334 OPEN_PARENTHESIS + name + SPACE + APP_INSTANCE + COMMA +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530335 SPACE + builderNamePrefix + BUILDER + SPACE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530336 "subTreeFilteringResultBuilder" + COMMA +
337 " Boolean " +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530338 "isAnySelectOrContainmentNode, " + "boolean " +
339 "isSelectAllSchemaChild" + CLOSE_PARENTHESIS +
340 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530341
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530342 processSubtreeFilteringMethod += getDataFromTempFileHandle(
343 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
344 ((TempJavaCodeFragmentFilesContainer) curNode)
345 .getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530346 .getBeanTempFiles(), path);
347
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530348 processSubtreeFilteringMethod +=
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530349 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530350 NEW_LINE + FOUR_SPACE_INDENTATION +
351 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530352
353 return processSubtreeFilteringMethod;
354 }
355
356 /**
357 * Returns is filter content match for leaf.
358 *
359 * @param curNode current node
360 * @param pluginConfig plugin configurations
361 * @param path path of temp file
362 * @return is filter content match for leaf
363 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530364 static String getProcessLeafSubtreeFiltering(YangNode curNode,
365 YangPluginConfig pluginConfig,
366 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530367 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530368 JavaFileInfoTranslator javaFileInfo =
369 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530370 String name = getCapitalCase(javaFileInfo.getJavaName());
371 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530372
373 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530374 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
375 SPACE + "processLeafSubtreeFiltering" +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530376 OPEN_PARENTHESIS + name + SPACE + APP_INSTANCE + COMMA +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530377 SPACE + builderNamePrefix + BUILDER + SPACE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530378 "subTreeFilteringResultBuilder" + COMMA +
379 " Boolean " +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530380 "isAnySelectOrContainmentNode, " + "boolean " +
381 "isSelectAllSchemaChild" + CLOSE_PARENTHESIS +
382 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530383
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530384 processSubtreeFilteringMethod +=
385 getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
386 ((TempJavaCodeFragmentFilesContainer) curNode)
387 .getTempJavaCodeFragmentFiles()
388 .getBeanTempFiles(), path);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530389
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530390 processSubtreeFilteringMethod +=
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530391 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530392 NEW_LINE + FOUR_SPACE_INDENTATION +
393 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530394
395 return processSubtreeFilteringMethod;
396 }
397
398 /**
399 * Returns is filter content match for leaf.
400 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530401 * @param curNode current node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530402 * @return is filter content match for leaf
403 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530404 static String getProcessSubtreeFilteringStart(YangNode curNode) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530405 JavaFileInfoTranslator javaFileInfo =
406 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530407 String instance = APP_INSTANCE;
408 String name = getCapitalCase(javaFileInfo.getJavaName());
409 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
Bharat saraswal0663aff2016-10-18 23:16:14 +0530410 if (curNode instanceof RpcNotificationContainer) {
411 name = getCapitalCase(javaFileInfo.getJavaName()) + OP_PARAM;
412 } else {
413 name = DEFAULT_CAPS + name;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530414 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530415 String javadoc = " /**\n" +
416 " * Checks if the passed " + name +
417 " maps the content match query condition.\n" +
418 " *\n" +
419 " * @param " + instance + SPACE +
420 instance + SPACE + "being passed to check" +
421 " for" +
422 " content match\n" +
423 " * @param isSelectAllSchemaChild is select all schema child\n" +
424 " * @return match result\n" +
425 " */\n";
426
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530427 String processSubtreeFilteringMethod =
Bharat saraswal0663aff2016-10-18 23:16:14 +0530428 javadoc + FOUR_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530429 PUBLIC + SPACE + name + SPACE +
430 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name +
431 SPACE + instance + COMMA + SPACE + BOOLEAN_DATA_TYPE +
432 SPACE + "isSelectAllSchemaChild" +
433 CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
434 NEW_LINE + EIGHT_SPACE_INDENTATION +
435 builderNamePrefix + BUILDER + SPACE +
436 SUBTREE_FILTERING_RESULT_BUILDER + SPACE + EQUAL +
437 SPACE + NEW + SPACE + builderNamePrefix + BUILDER +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530438 OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530439 NEW_LINE + EIGHT_SPACE_INDENTATION + "Boolean" + SPACE +
440 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530441 EQUAL + SPACE + FALSE + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530442 return processSubtreeFilteringMethod;
443 }
444
445 /**
446 * Get the body for process subtree filtering.
447 *
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530448 * @param curNode node for which the code is being generated
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530449 * @return body of subtree filtering
450 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530451 static String getProcessSubtreeFunctionBody(YangNode curNode) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530452
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530453 String method = "";
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530454
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530455 if (curNode instanceof YangLeavesHolder) {
456 if (((YangLeavesHolder) curNode).getListOfLeaf() != null
457 &&
458 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530459 method +=
460 getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530461 "processLeafSubtreeFiltering(appInstance, " +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530462 "subTreeFilteringResultBuilder, " +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530463 "isAnySelectOrContainmentNode, " +
464 "isSelectAllSchemaChild)");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530465
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530466 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530467 SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530468
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530469 method += methodClose(EIGHT_SPACE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530470 }
471 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530472
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530473 if (curNode instanceof YangLeavesHolder) {
474 if (((YangLeavesHolder) curNode).getListOfLeafList() != null
475 &&
476 !((YangLeavesHolder) curNode).getListOfLeafList()
477 .isEmpty()) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530478 method +=
479 getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530480 "processLeafListSubTreeFiltering(appInstance," +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530481 " subTreeFilteringResultBuilder, " +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530482 "isAnySelectOrContainmentNode, " +
483 "isSelectAllSchemaChild)");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530484
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530485 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530486 SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530487
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530488 method += methodClose(EIGHT_SPACE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530489 }
490 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530491
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530492 if (curNode.getChild() != null) {
493
Bharat saraswal0663aff2016-10-18 23:16:14 +0530494 method +=
495 getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530496 "processChildNodesSubTreeFiltering(appInstance, " +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530497 "subTreeFilteringResultBuilder, " +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530498 "isAnySelectOrContainmentNode, " +
499 "isSelectAllSchemaChild)");
500
501 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530502 SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530503
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530504 method += methodClose(EIGHT_SPACE);
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530505 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530506
507 return method;
508 }
509
510 /**
511 * Returns is filter content match for node.
512 *
513 * @param attr attribute info
Bharat saraswal0663aff2016-10-18 23:16:14 +0530514 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530515 * @return is filter content match for node
516 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530517 public static String getSubtreeFilteringForNode(JavaAttributeInfo attr,
518 YangNode node) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530519 boolean isList = attr.isListAttr();
520 if (isList) {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530521 return getSubtreeFilteringForList(attr, false, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530522 } else {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530523 return getSubtreeFilteringForChildNode(attr, node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530524 }
525 }
526
527 /**
528 * Returns is filter content match close.
529 *
Bharat saraswal0663aff2016-10-18 23:16:14 +0530530 * @param name name of class
531 * @param curNode current node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530532 * @return is filter content match close
533 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530534 static String getProcessSubTreeFilteringEnd(String name, YangNode curNode) {
535 String method = getIfConditionBegin(EIGHT_SPACE_INDENTATION,
536 NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG +
537 SPACE + AND_OPERATION + SPACE +
538 NOT +
539 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530540
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530541 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE +
542 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + APP_INSTANCE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530543 COMMA + SPACE + TRUE + CLOSE_PARENTHESIS + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530544 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530545
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530546 method += methodClose(EIGHT_SPACE);
Bharat saraswal0663aff2016-10-18 23:16:14 +0530547 String build = BUILD;
548 if (curNode instanceof YangAugment) {
549 build = BUILD_FOR_FILTER;
550 }
551 method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + getOpenCloseParaWithValue(
552 name) + SPACE +
553 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + build +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530554 OPEN_CLOSE_BRACKET_STRING + SEMI_COLON + NEW_LINE +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530555 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530556
557 return method;
558 }
559
560 /**
561 * Returns filter content match for child nodes.
562 *
563 * @param javaAttributeInfo attribute to be added
Bharat saraswal0663aff2016-10-18 23:16:14 +0530564 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530565 * @return filter content match for child nodes
566 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530567 private static String getSubtreeFilteringForChildNode(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530568 JavaAttributeInfo javaAttributeInfo, YangNode node) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530569 String name = javaAttributeInfo.getAttributeName();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530570 String clsInfo = javaAttributeInfo.getImportInfo()
571 .getClassInfo();
572 String type = DEFAULT_CAPS + javaAttributeInfo.getImportInfo()
573 .getClassInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530574 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530575 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
576 type;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530577 clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
578 clsInfo;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530579 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530580 String classCast = getOpenCloseParaWithValue(type) + SPACE;
581 String cast = getOpenCloseParaWithValue(classCast + name);
582 String resultString = cast +
583 PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
584 + classCast +
585 APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
586 + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
587 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530588
Bharat saraswal0663aff2016-10-18 23:16:14 +0530589 if (node != null && node instanceof YangChoice) {
590 resultString = getReturnStringInCaseOfChoice(node);
591 }
592 String method =
593 getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + "() != " +
594 "null || isSelectAllSchemaChild");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530595
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530596 method += TWELVE_SPACE_INDENTATION +
597 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530598 TRUE + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530599
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530600 method += TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
601 APP_INSTANCE + PERIOD + name + OPEN_PARENTHESIS +
602 CLOSE_PARENTHESIS + SPACE + NOT
603 + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE +
604 OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530605
Bharat saraswal0663aff2016-10-18 23:16:14 +0530606 method += SIXTEEN_SPACE_INDENTATION + clsInfo + SPACE + "result" +
607 SEMI_COLON + NEW_LINE;
608
609 method +=
610 getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
611 "isSelectAllSchemaChild");
612
613 method += TWENTY_SPACE_INDENTATION + "result" + SPACE + EQUAL + SPACE +
614 APP_INSTANCE + PERIOD + name + OPEN_PARENTHESIS +
615 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
616
617 method += SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
618 ELSE + SPACE +
619 OPEN_CURLY_BRACKET + NEW_LINE;
620
621 method += TWENTY_SPACE_INDENTATION + "result = " + resultString;
622
623 method += SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530624
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530625 method += SIXTEEN_SPACE_INDENTATION + "if (result != null) {" +
626 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530627
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530628 method += TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
629 PERIOD + name + OPEN_PARENTHESIS + "result" +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530630 CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530631 SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530632
633 //if app instance is not null
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530634 method += methodClose(TWELVE_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530635
636 //if query instance is not null
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530637 method += methodClose(TWELVE_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530638
639 return method;
640 }
641
642 /**
643 * Returns filter content match for list types.
644 *
645 * @param javaAttributeInfo attribute information
646 * @param isLeafList if for leaf list
Bharat saraswal0663aff2016-10-18 23:16:14 +0530647 * @param node YANG node
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530648 * @return filter content match for list types
649 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530650 private static String getSubtreeFilteringForList(
Bharat saraswal0663aff2016-10-18 23:16:14 +0530651 JavaAttributeInfo javaAttributeInfo, boolean isLeafList,
652 YangNode node) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530653 String capitalCaseName =
654 getCapitalCase(javaAttributeInfo.getAttributeName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530655 String name = javaAttributeInfo.getAttributeName();
Bharat saraswal0663aff2016-10-18 23:16:14 +0530656 String type = javaAttributeInfo.getImportInfo()
657 .getClassInfo();
658 String clsInfo = DEFAULT_CAPS + type;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530659 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530660 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
661 type;
Bharat saraswal0663aff2016-10-18 23:16:14 +0530662 clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
663 clsInfo;
664 }
665
666 String classCast = getOpenCloseParaWithValue(clsInfo) + SPACE;
667 String cast = getOpenCloseParaWithValue(classCast + name);
668 String resultString = cast + PERIOD +
669 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + classCast +
670 name + "2" + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
671 NEW_LINE;
672
673 if (node != null && node instanceof YangChoice) {
674 resultString = getReturnStringInCaseOfChoice(node);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530675 }
676
677 /*
678 * If select all schema child
679 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530680 String method =
681 getIfConditionBegin(EIGHT_SPACE_INDENTATION,
682 IS_SELECT_ALL_SCHEMA_CHILD_FLAG);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530683
Bharat saraswal0663aff2016-10-18 23:16:14 +0530684 method = method + getCollectionIteratorForLoopBegin(TWELVE_SPACE_INDENTATION,
685 type + SPACE + name,
686 APP_INSTANCE + PERIOD +
687 name +
688 OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530689
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530690 method = method + SIXTEEN_SPACE_INDENTATION +
691 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
692 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530693 name + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530694
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530695 method += methodClose(TWELVE_SPACE); // Close collection Iteration loop
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530696
697 //If need to explicitly participate in query
Bharat saraswal0663aff2016-10-18 23:16:14 +0530698 method += getElseIfConditionBegin(EIGHT_SPACE_INDENTATION,
699 name + OPEN_CLOSE_BRACKET_STRING +
700 SPACE + NOT + EQUAL +
701 SPACE + NULL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530702
703 if (!isLeafList) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530704 method += TWELVE_SPACE_INDENTATION +
705 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530706 SPACE + TRUE + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530707 }
708
709 //If there is any parameter in the query condition
Bharat saraswal0663aff2016-10-18 23:16:14 +0530710 method +=
711 getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530712 OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530713
714 if (isLeafList) {
715 /*
716 * If there is no app instance to perform content match
717 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530718 method +=
719 getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
720 APP_INSTANCE + PERIOD + name +
721 OPEN_CLOSE_BRACKET_STRING +
722 SPACE + EQUAL + EQUAL + SPACE +
723 NULL + SPACE + OR_OPERATION
724 + SPACE + APP_INSTANCE +
725 PERIOD + name +
726 OPEN_CLOSE_BRACKET_STRING +
727 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530728
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530729 method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530730 SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530731
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530732 method += methodClose(SIXTEEN_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530733
734 // for instance iterator
Bharat saraswal0663aff2016-10-18 23:16:14 +0530735 method += getCollectionIteratorForLoopBegin(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530736 SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530737 name + OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530738
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530739 method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530740 "flag" + SPACE + EQUAL + SPACE + FALSE + SEMI_COLON +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530741 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530742
743 // for app instance iterator
Bharat saraswal0663aff2016-10-18 23:16:14 +0530744 method +=
745 getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
746 type + SPACE + name +
747 "2",
748 APP_INSTANCE + PERIOD +
749 name +
750 OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530751
752 //the content match leaf list attribute value matches
Bharat saraswal0663aff2016-10-18 23:16:14 +0530753 method +=
754 getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
755 name + PERIOD + EQUALS_STRING
756 + OPEN_PARENTHESIS + name +
757 "2" + CLOSE_PARENTHESIS);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530758
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530759 method += TWENTY_EIGHT_SPACE_INDENTATION + "flag" + SPACE + EQUAL +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530760 SPACE + TRUE + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530761
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530762 method += TWENTY_EIGHT_SPACE_INDENTATION +
763 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
764 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
765 name + "2" + CLOSE_PARENTHESIS +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530766 SEMI_COLON + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
767 BREAK + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530768
769 //the content match leaf list attribute value matches
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530770 method += methodClose(TWENTY_FOUR_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530771
772 // for app instance iterator
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530773 method += methodClose(TWENTY_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530774
775 //if the content match failed
Bharat saraswal0663aff2016-10-18 23:16:14 +0530776 method +=
777 getIfConditionBegin(TWENTY_SPACE_INDENTATION, "!flag");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530778
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530779 method += TWENTY_FOUR_SPACE_INDENTATION + RETURN + SPACE + FALSE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530780 SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530781
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530782 method +=
783 methodClose(TWENTY_SPACE); // if flag == false
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530784
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530785 method += methodClose(SIXTEEN_SPACE); // for instance iterator
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530786 } else {
787
788 /*if there is any app instance entry*/
Bharat saraswal0663aff2016-10-18 23:16:14 +0530789 method +=
790 getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
791 APP_INSTANCE + PERIOD + name +
792 OPEN_CLOSE_BRACKET_STRING +
793 SPACE + NOT + EQUAL + SPACE +
794 NULL + SPACE + AND_OPERATION +
795 SPACE + NOT + APP_INSTANCE +
796 PERIOD + name +
797 OPEN_CLOSE_BRACKET_STRING +
798 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530799
800 /*
801 * loop all the query condition instance(s)
802 */
Bharat saraswal0663aff2016-10-18 23:16:14 +0530803 method +=
804 getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
805 type + SPACE + name,
806 name +
807 OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530808
809 //loop all the app instance(s)
Bharat saraswal0663aff2016-10-18 23:16:14 +0530810 method += getCollectionIteratorForLoopBegin(
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530811 TWENTY_FOUR_SPACE_INDENTATION, type + SPACE + name + "2",
812 APP_INSTANCE + PERIOD + name +
Bharat saraswal54e4bab2016-10-05 23:32:14 +0530813 OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530814
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530815 method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
Bharat saraswal0663aff2016-10-18 23:16:14 +0530816 "result = " + resultString;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530817
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530818 method += TWENTY_EIGHT_SPACE_INDENTATION + "if (result != null) {" +
819 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530820
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530821 method += THIRTY_TWO_SPACE_INDENTATION +
822 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
823 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
824 "result" + CLOSE_PARENTHESIS +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530825 SEMI_COLON + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530826 CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530827
828 //loop all the app instance(s)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530829 method +=
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530830 methodClose(TWENTY_FOUR_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530831
832 //loop all the query condition instance(s)
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530833 method += methodClose(TWENTY_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530834
835 //if there is any app instance entry
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530836 method += methodClose(SIXTEEN_SPACE);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530837 }
838
839 method += TWELVE_SPACE_INDENTATION + "} else {" + NEW_LINE;
840
841 if (isLeafList) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530842 method += SIXTEEN_SPACE_INDENTATION +
843 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530844 EQUAL + SPACE + TRUE + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530845 }
846
Bharat saraswal0663aff2016-10-18 23:16:14 +0530847 method +=
848 getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
849 APP_INSTANCE + PERIOD + name
850 + OPEN_CLOSE_BRACKET_STRING +
851 SPACE + NOT + EQUAL + SPACE +
852 NULL + SPACE + AND_OPERATION +
853 SPACE + NOT + APP_INSTANCE +
854 PERIOD + name +
855 OPEN_CLOSE_BRACKET_STRING +
856 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530857
Bharat saraswal0663aff2016-10-18 23:16:14 +0530858 method = method +
859 getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
860 type + SPACE + name,
861 APP_INSTANCE + PERIOD +
862 name +
863 OPEN_CLOSE_BRACKET_STRING);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530864
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530865 method = method + TWENTY_FOUR_SPACE_INDENTATION +
866 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
867 + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530868 name + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530869
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530870 method += methodClose(TWENTY_SPACE);// Close collection Iteration loop
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530871
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530872 method +=
873 methodClose(SIXTEEN_SPACE); // close if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530874
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530875 method +=
876 methodClose(TWELVE_SPACE); // close else condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530877
Bharat saraswal9fab16b2016-09-23 23:27:24 +0530878 method += methodClose(EIGHT_SPACE); // close else if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530879
880 return method;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530881 }
882
883 //Returns method string for op params augmented syntax
884 static String getAugmentableSubTreeFiltering() {
Bharat saraswal0663aff2016-10-18 23:16:14 +0530885 return " for (Object augmentInfo : this.yangAugmentedInfoMap()" +
886 ".values()) {\n" +
887 " Object appInstanceInfo = appInstance.yangAugmentedInfo(" +
888 "augmentInfo.getClass());\n" +
889 " if (appInstanceInfo == null) {\n" +
890 " subTreeFilteringResultBuilder.addYangAugmentedInfo(" +
891 "augmentInfo, augmentInfo.getClass());\n" +
892 " } else {\n" +
893 " Object processSubtreeFiltering;\n" +
894 " try {\n" +
895 " Class<?> augmentedClass = augmentInfo" +
896 ".getClass();\n" +
897 " processSubtreeFiltering = augmentInfo.getClass()" +
898 ".getMethod(\"processSubtreeFiltering\", augmentedClass).invoke(" +
899 "augmentInfo, appInstanceInfo);\n" +
900 " if (processSubtreeFiltering != null) {\n" +
901 " subTreeFilteringResultBuilder" +
902 ".addYangAugmentedInfo(processSubtreeFiltering, processSubtreeFiltering.getClass());\n" +
903 " }\n" +
904 " } catch (NoSuchMethodException |" +
905 " InvocationTargetException | IllegalAccessException e) {\n" +
906 " continue;\n" +
907 " }\n" +
908 " }\n" +
909 " }\n";
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530910 }
Bharat saraswal0663aff2016-10-18 23:16:14 +0530911
912 private static String getMethodBodyForChoicePstMethod(
913 YangNode node, YangPluginConfig config, YangNode choiceParent,
914 String choice) {
915 StringBuilder builder = new StringBuilder();
916 JavaCodeGeneratorInfo info = (JavaCodeGeneratorInfo) choiceParent;
917 JavaFileInfoTranslator pInfo = info.getJavaFileInfo();
918
919 JavaQualifiedTypeInfoTranslator qInfo = getQualifiedInfo(node, config);
920
921 String castVar = qInfo.getClassInfo();
922 boolean qualify = info.getTempJavaCodeFragmentFiles().getBeanTempFiles()
923 .getJavaImportData().addImportInfo(qInfo, pInfo.getJavaName(),
924 pInfo.getPackage());
925 if (qualify) {
926 castVar = StringGenerator.getQualifiedString(qInfo.getPkgInfo(),
927 qInfo.getClassInfo());
928 }
929 String classCast = getOpenCloseParaWithValue(castVar) + SPACE;
930 String cast = getOpenCloseParaWithValue(classCast + choice);
931 String retString = cast + PERIOD + PROCESS_SUBTREE_FILTERING +
932 getOpenCloseParaWithValue(classCast + getAppInstanceAttrString
933 (choice) + COMMA + SPACE + FALSE);
934 String cond = choice + INSTANCE_OF + castVar;
935 builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond))
936 .append(getReturnString(retString, TWELVE_SPACE_INDENTATION))
937 .append(signatureClose()).append(methodClose(EIGHT_SPACE));
938 return builder.toString();
939 }
940
941 /**
942 * Returns choice instance for PST method.
943 *
944 * @param choice choice node
945 * @param className class name
946 * @return choice instance for pst method
947 */
948 private static String getChoiceInstanceForPstMethod(YangNode choice,
949 String className) {
950 /*
951 * private Choice1 getChoice1ResultOfProcessSubTree(Choice1 choice1, Test appInstance) {
952 * if (choice1 instanceof DefaultCase1) {
953 * return ((DefaultCase1) choice1).processSubtreeFiltering(
954 * appInstance.choice1(), false);
955 * }
956 * return null;
957 * }
958 */
959
960 JavaFileInfoTranslator info = ((JavaFileInfoContainer) choice).getJavaFileInfo();
961 String name = info.getJavaName();
962 String caps = getCapitalCase(name);
963 StringBuilder builder = new StringBuilder();
964 String methodName = caps + CHOICE_STF_METHOD_NAME;
965 Map<String, String> param = new LinkedHashMap<>();
966 param.put(name, caps);
967 param.put(APP_INSTANCE, className);
968
969 builder.append(multiAttrMethodSignature(methodName, GET, PRIVATE, caps,
970 param, CLASS_TYPE));
971
972 for (YangNode cases : getChoiceChildNodes((YangChoice) choice)) {
973 builder.append(getMethodBodyForChoicePstMethod(cases, info.getPluginConfig(),
974 choice.getParent(), name));
975 }
976 builder.append(getReturnString(NULL, FOUR_SPACE_INDENTATION))
977 .append(signatureClose()).append(methodClose(FOUR_SPACE));
978 return builder.toString();
979 }
980
981 private static String getReturnStringInCaseOfChoice(YangNode choice) {
982 JavaFileInfoTranslator info = ((JavaFileInfoContainer) choice)
983 .getJavaFileInfo();
984 String name = info.getJavaName();
985 String caps = getCapitalCase(name);
986 String methodName = caps + CHOICE_STF_METHOD_NAME;
987 return GET + methodName + getOpenCloseParaWithValue(
988 name + COMMA + SPACE + APP_INSTANCE) + signatureClose();
989 }
990
991 static JavaQualifiedTypeInfoTranslator getQualifiedInfo(
992 YangNode node, YangPluginConfig config) {
993 JavaFileInfoTranslator fileInfo = ((JavaCodeGeneratorInfo) node)
994 .getJavaFileInfo();
995 String name = fileInfo.getJavaName();
996 String pkg = fileInfo.getPackage();
997 if (config == null) {
998 config = new YangPluginConfig();
999 }
1000 if (name == null) {
1001 name = getCamelCase(node.getName(), config.getConflictResolver());
1002 pkg = getNodesPackage(node, config);
1003 }
1004
1005 name = DEFAULT_CAPS + getCapitalCase(name);
1006 JavaQualifiedTypeInfoTranslator qInfo = new
1007 JavaQualifiedTypeInfoTranslator();
1008 qInfo.setClassInfo(name);
1009 qInfo.setPkgInfo(pkg);
1010 return qInfo;
1011 }
1012
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301013}