blob: 3bda74c200322d123570e3bd3a3a669898497509 [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
19import java.io.IOException;
20
21import org.onosproject.yangutils.datamodel.YangAugment;
22import org.onosproject.yangutils.datamodel.YangCase;
23import org.onosproject.yangutils.datamodel.YangChoice;
24import org.onosproject.yangutils.datamodel.YangLeafRef;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053025import org.onosproject.yangutils.datamodel.YangLeavesHolder;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053026import org.onosproject.yangutils.datamodel.YangNode;
27import org.onosproject.yangutils.datamodel.YangType;
28import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
29import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
30import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053031import org.onosproject.yangutils.translator.tojava
32 .TempJavaCodeFragmentFilesContainer;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053033import org.onosproject.yangutils.utils.io.YangPluginConfig;
34
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053035import static org.onosproject.yangutils.datamodel.utils.builtindatatype
36 .YangDataTypes.LEAFREF;
37import static org.onosproject.yangutils.translator.tojava
38 .GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
39import static org.onosproject.yangutils.translator.tojava
40 .GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
41import static org.onosproject.yangutils.translator.tojava
42 .GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
43import static org.onosproject.yangutils.translator.tojava.utils
44 .JavaFileGeneratorUtils.getDataFromTempFileHandle;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053045import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
46import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
47import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
48import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
49import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
50import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
51import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
52import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
53import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
54import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
55import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
56import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
57import static org.onosproject.yangutils.utils.UtilConstants.CONTINUE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053058import static org.onosproject.yangutils.utils.UtilConstants
59 .EIGHT_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053060import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053061import static org.onosproject.yangutils.utils.UtilConstants
62 .EMPTY_PARAMETER_FUNCTION_CALL;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053063import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
64import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
65import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
66import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
67import static org.onosproject.yangutils.utils.UtilConstants.FOR;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053068import static org.onosproject.yangutils.utils.UtilConstants
69 .FOUR_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053070import static org.onosproject.yangutils.utils.UtilConstants.GET_CLASS;
71import static org.onosproject.yangutils.utils.UtilConstants.GET_LEAF_INDEX;
72import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD;
73import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053074import static org.onosproject.yangutils.utils.UtilConstants
75 .GET_SELECT_LEAF_FLAGS;
76import static org.onosproject.yangutils.utils.UtilConstants
77 .GET_VALUE_LEAF_FLAGS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053078import static org.onosproject.yangutils.utils.UtilConstants.IF;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053079import static org.onosproject.yangutils.utils.UtilConstants
80 .ILLEGAL_ACCESS_EXCEPTION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053081import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053082import static org.onosproject.yangutils.utils.UtilConstants
83 .INVOCATION_TARGET_EXCEPTION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053084import static org.onosproject.yangutils.utils.UtilConstants.INVOKE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053085import static org.onosproject.yangutils.utils.UtilConstants
86 .IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053087import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053088import static org.onosproject.yangutils.utils.UtilConstants
89 .IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053090import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
91import static org.onosproject.yangutils.utils.UtilConstants.MAP;
92import static org.onosproject.yangutils.utils.UtilConstants.NEW;
93import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
94import static org.onosproject.yangutils.utils.UtilConstants.NOT;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +053095import static org.onosproject.yangutils.utils.UtilConstants
96 .NO_SUCH_METHOD_EXCEPTION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +053097import static org.onosproject.yangutils.utils.UtilConstants.NULL;
98import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
99import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
100import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
101import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
102import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
103import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
104import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530105import static org.onosproject.yangutils.utils.UtilConstants
106 .PROCESS_SUBTREE_FILTERING;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530107import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
108import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
109import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
110import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530111import static org.onosproject.yangutils.utils.UtilConstants
112 .SIXTEEN_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530113import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530114import static org.onosproject.yangutils.utils.UtilConstants
115 .SUBTREE_FILTERING_RESULT_BUILDER;
116import static org.onosproject.yangutils.utils.UtilConstants
117 .THIRTY_TWO_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530118import static org.onosproject.yangutils.utils.UtilConstants.THIS;
119import static org.onosproject.yangutils.utils.UtilConstants.TO;
120import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
121import static org.onosproject.yangutils.utils.UtilConstants.TRY;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530122import static org.onosproject.yangutils.utils.UtilConstants
123 .TWELVE_SPACE_INDENTATION;
124import static org.onosproject.yangutils.utils.UtilConstants
125 .TWENTY_EIGHT_SPACE_INDENTATION;
126import static org.onosproject.yangutils.utils.UtilConstants
127 .TWENTY_FOUR_SPACE_INDENTATION;
128import static org.onosproject.yangutils.utils.UtilConstants
129 .TWENTY_SPACE_INDENTATION;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530130import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
131import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530132import static org.onosproject.yangutils.utils.UtilConstants
133 .YANG_AUGMENTED_OP_PARAM_INFO;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530134import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530135import static org.onosproject.yangutils.utils.io.impl.YangIoUtils
136 .getCapitalCase;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530137import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
138
139/**
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530140 * Represents generator for subtree filtering methods of generated files
141 * based on the file type.
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530142 */
143public final class SubtreeFilteringMethodsGenerator {
144
145 /**
146 * private to make it a util.
147 */
148 private SubtreeFilteringMethodsGenerator() {
149 }
150
151 /**
152 * Returns is filter content match for leaf.
153 *
154 * @param javaAttributeInfo java attribute
155 * @param type data type
156 * @return is filter content match for leaf
157 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530158 public static String getSubtreeFilteringForLeaf(
159 JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530160 String attrQualifiedType;
161 String attributeName = javaAttributeInfo.getAttributeName();
162 attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530163 type);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530164 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530165 + GET_VALUE_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL +
166 PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS +
167 LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() +
168 PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS +
169 CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
170 TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
171 attrQualifiedType + CLOSE_PARENTHESIS + SPACE +
172 OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
173 RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE +
174 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE +
175 ELSE + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
176 SIXTEEN_SPACE_INDENTATION +
177 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName +
178 OPEN_PARENTHESIS + APP_INSTANCE + PERIOD + attributeName +
179 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
180 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
181 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
182 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE +
183 SPACE + IF + SPACE + OPEN_PARENTHESIS +
184 GET_SELECT_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL +
185 PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS +
186 LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() +
187 PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS + SPACE +
188 OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG +
189 CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
190 TWELVE_SPACE_INDENTATION +
191 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL +
192 SPACE + TRUE + SEMI_COLAN + NEW_LINE +
193 TWELVE_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
194 PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE +
195 PERIOD + attributeName + EMPTY_PARAMETER_FUNCTION_CALL +
196 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
197 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530198 }
199
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530200 private static String getAttrTypeForFilterContentMatchWhenPrimitiveDataType(
201 String attributeName) {
202 return/* TODO: Need to check if we can expose the value leaf flag in
203 interface.
204 NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
205 OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
206 GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
207 PERIOD + attributeName.toUpperCase() + PERIOD
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530208 + GET_LEAF_INDEX + OR_OPERATION +*/
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530209 APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
210 CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
211 attributeName + OPEN_PARENTHESIS +
212 CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530213 }
214
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530215 private static String
216 getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(
217 String attributeName) {
218 return APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
219 CLOSE_PARENTHESIS + SPACE + EQUAL + EQUAL + SPACE + NULL +
220 SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
221 attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
222 PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + APP_INSTANCE +
223 PERIOD + attributeName + OPEN_PARENTHESIS +
224 CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530225 }
226
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530227 private static String getIfFilterContentMatchMethodImpl(
228 String attributeName,
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530229 YangType dataType) {
230 String attrQualifiedType;
231
232 if (MethodsGenerator.isPrimitiveDataType(dataType.getDataType())) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530233 attrQualifiedType =
234 getAttrTypeForFilterContentMatchWhenPrimitiveDataType(
235 attributeName);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530236 } else if (dataType.getDataType() == LEAFREF) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530237 YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
238 .getEffectiveDataType();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530239 if (MethodsGenerator.isPrimitiveDataType(type.getDataType())) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530240 attrQualifiedType =
241 getAttrTypeForFilterContentMatchWhenPrimitiveDataType(
242 attributeName);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530243 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530244 attrQualifiedType =
245 getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(
246 attributeName);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530247 }
248 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530249 attrQualifiedType =
250 getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(
251 attributeName);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530252 }
253
254 return attrQualifiedType;
255 }
256
257 /**
258 * Returns is filter content match for leaf.
259 *
260 * @param javaAttributeInfo java attribute
261 * @return is filter content match for leaf
262 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530263 public static String getSubtreeFilteringForLeafList(
264 JavaAttributeInfo javaAttributeInfo) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530265 return getSubtreeFilteringForList(javaAttributeInfo, true);
266 }
267
268 /**
269 * Returns is filter content match for child node.
270 *
271 * @param curNode current node
272 * @param pluginConfig plugin configurations
273 * @param path path of temp file
274 * @return is filter content match for child node
275 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530276 static String getProcessChildNodeSubtreeFiltering(YangNode curNode,
277 YangPluginConfig
278 pluginConfig,
279 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530280 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530281 JavaFileInfoTranslator javaFileInfo =
282 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530283 JavaFileInfoTranslator parentInfo;
284
285 String instance = APP_INSTANCE;
286 String name = getCapitalCase(javaFileInfo.getJavaName());
287 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
288 if (curNode instanceof YangCase) {
289 instance = INSTANCE;
290 YangNode parent = curNode.getParent();
291 if (parent instanceof YangChoice) {
292 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
293 name = getCapitalCase(parentInfo.getJavaName());
294 } else if (parent instanceof YangAugment) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530295 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
296 .getAugmentedNode()).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530297 if (parentInfo != null) {
298 name = getCapitalCase(parentInfo.getJavaName());
299 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530300 name = getCapitalCase(getCamelCase(
301 ((YangAugment) parent).getAugmentedNode().getName(),
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530302 pluginConfig.getConflictResolver()));
303 }
304 }
305 }
306
307 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530308 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
309 SPACE + "processChildNodesSubTreeFiltering" +
310 OPEN_PARENTHESIS + name + SPACE + instance + COMMA +
311 SPACE + builderNamePrefix + BUILDER + SPACE +
312 "subTreeFilteringResultBuilder" + COMMA + NEW_LINE +
313 TWELVE_SPACE_INDENTATION + "Boolean " +
314 "isAnySelectOrContainmentNode, " + "boolean " +
315 "isSelectAllSchemaChild" + CLOSE_PARENTHESIS +
316 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530317
318 if (curNode instanceof YangCase) {
319 String caseName = getCapitalCase(javaFileInfo.getJavaName());
320 processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530321 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION +
322 caseName + SPACE + APP_INSTANCE + SPACE +
323 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
324 CLOSE_PARENTHESIS + SPACE + instance +
325 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530326 }
327
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530328 processSubtreeFilteringMethod +=
329 getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
330 ((TempJavaCodeFragmentFilesContainer) curNode)
331 .getTempJavaCodeFragmentFiles()
332 .getBeanTempFiles(), path);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530333
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530334 processSubtreeFilteringMethod +=
335 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN +
336 NEW_LINE + FOUR_SPACE_INDENTATION +
337 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530338
339 return processSubtreeFilteringMethod;
340 }
341
342 /**
343 * Returns is filter content match for leaf list.
344 *
345 * @param curNode current node
346 * @param pluginConfig plugin configurations
347 * @param path path of temp file
348 * @return is filter content match for leaf list
349 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530350 static String getProcessLeafListSubtreeFiltering(YangNode curNode,
351 YangPluginConfig
352 pluginConfig,
353 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530354 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530355 JavaFileInfoTranslator javaFileInfo =
356 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530357 JavaFileInfoTranslator parentInfo;
358
359 String instance = APP_INSTANCE;
360 String name = getCapitalCase(javaFileInfo.getJavaName());
361 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
362 if (curNode instanceof YangCase) {
363 instance = INSTANCE;
364 YangNode parent = curNode.getParent();
365 if (parent instanceof YangChoice) {
366 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
367 name = getCapitalCase(parentInfo.getJavaName());
368 } else if (parent instanceof YangAugment) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530369 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
370 .getAugmentedNode()).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530371 if (parentInfo != null) {
372 name = getCapitalCase(parentInfo.getJavaName());
373 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530374 name = getCapitalCase(getCamelCase(
375 ((YangAugment) parent).getAugmentedNode().getName(),
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530376 pluginConfig.getConflictResolver()));
377 }
378 }
379 }
380
381 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530382 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
383 SPACE + "processLeafListSubTreeFiltering" +
384 OPEN_PARENTHESIS + name + SPACE + instance + COMMA +
385 SPACE + builderNamePrefix + BUILDER + SPACE +
386 "subTreeFilteringResultBuilder" + COMMA + NEW_LINE +
387 TWELVE_SPACE_INDENTATION + "Boolean " +
388 "isAnySelectOrContainmentNode, " + "boolean " +
389 "isSelectAllSchemaChild" + CLOSE_PARENTHESIS +
390 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530391
392 if (curNode instanceof YangCase) {
393 String caseName = getCapitalCase(javaFileInfo.getJavaName());
394 processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530395 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION +
396 caseName + SPACE + APP_INSTANCE + SPACE +
397 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
398 CLOSE_PARENTHESIS + SPACE + instance +
399 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530400 }
401
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530402 processSubtreeFilteringMethod += getDataFromTempFileHandle(
403 FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
404 ((TempJavaCodeFragmentFilesContainer) curNode)
405 .getTempJavaCodeFragmentFiles()
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530406 .getBeanTempFiles(), path);
407
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530408 processSubtreeFilteringMethod +=
409 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN +
410 NEW_LINE + FOUR_SPACE_INDENTATION +
411 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530412
413 return processSubtreeFilteringMethod;
414 }
415
416 /**
417 * Returns is filter content match for leaf.
418 *
419 * @param curNode current node
420 * @param pluginConfig plugin configurations
421 * @param path path of temp file
422 * @return is filter content match for leaf
423 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530424 static String getProcessLeafSubtreeFiltering(YangNode curNode,
425 YangPluginConfig pluginConfig,
426 String path)
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530427 throws IOException {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530428 JavaFileInfoTranslator javaFileInfo =
429 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530430 JavaFileInfoTranslator parentInfo;
431
432 String instance = APP_INSTANCE;
433 String name = getCapitalCase(javaFileInfo.getJavaName());
434 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
435 if (curNode instanceof YangCase) {
436 instance = INSTANCE;
437 YangNode parent = curNode.getParent();
438 if (parent instanceof YangChoice) {
439 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
440 name = getCapitalCase(parentInfo.getJavaName());
441 } else if (parent instanceof YangAugment) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530442 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
443 .getAugmentedNode()).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530444 if (parentInfo != null) {
445 name = getCapitalCase(parentInfo.getJavaName());
446 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530447 name = getCapitalCase(getCamelCase(
448 ((YangAugment) parent).getAugmentedNode().getName(),
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530449 pluginConfig.getConflictResolver()));
450 }
451 }
452 }
453
454 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530455 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE +
456 SPACE + "processLeafSubtreeFiltering" +
457 OPEN_PARENTHESIS + name + SPACE + instance + COMMA +
458 SPACE + builderNamePrefix + BUILDER + SPACE +
459 "subTreeFilteringResultBuilder" + COMMA + NEW_LINE
460 + TWELVE_SPACE_INDENTATION + "Boolean " +
461 "isAnySelectOrContainmentNode, " + "boolean " +
462 "isSelectAllSchemaChild" + CLOSE_PARENTHESIS +
463 SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530464
465 if (curNode instanceof YangCase) {
466 String caseName = getCapitalCase(javaFileInfo.getJavaName());
467 processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530468 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION +
469 caseName + SPACE + APP_INSTANCE + SPACE +
470 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
471 CLOSE_PARENTHESIS + SPACE + instance +
472 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530473 }
474
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530475 processSubtreeFilteringMethod +=
476 getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
477 ((TempJavaCodeFragmentFilesContainer) curNode)
478 .getTempJavaCodeFragmentFiles()
479 .getBeanTempFiles(), path);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530480
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530481 processSubtreeFilteringMethod +=
482 EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN +
483 NEW_LINE + FOUR_SPACE_INDENTATION +
484 CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530485
486 return processSubtreeFilteringMethod;
487 }
488
489 /**
490 * Returns is filter content match for leaf.
491 *
492 * @param curNode current node
493 * @param pluginConfig plugin configurations
494 * @return is filter content match for leaf
495 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530496 static String getProcessSubtreeFilteringStart(YangNode curNode,
497 YangPluginConfig
498 pluginConfig) {
499 JavaFileInfoTranslator javaFileInfo =
500 ((JavaFileInfoContainer) curNode).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530501 JavaFileInfoTranslator parentInfo;
502
503 String instance = APP_INSTANCE;
504 String name = getCapitalCase(javaFileInfo.getJavaName());
505 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
506 if (curNode instanceof YangCase) {
507 instance = INSTANCE;
508 YangNode parent = curNode.getParent();
509 if (parent instanceof YangChoice) {
510 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
511 name = getCapitalCase(parentInfo.getJavaName());
512 } else if (parent instanceof YangAugment) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530513 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
514 .getAugmentedNode()).getJavaFileInfo();
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530515 if (parentInfo != null) {
516 name = getCapitalCase(parentInfo.getJavaName());
517 } else {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530518 name = getCapitalCase(getCamelCase(
519 ((YangAugment) parent).getAugmentedNode().getName(),
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530520 pluginConfig.getConflictResolver()));
521 }
522 }
523 }
524 String processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530525 MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION +
526 PUBLIC + SPACE + name + SPACE +
527 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name +
528 SPACE + instance + COMMA + SPACE + BOOLEAN_DATA_TYPE +
529 SPACE + "isSelectAllSchemaChild" +
530 CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
531 NEW_LINE + EIGHT_SPACE_INDENTATION +
532 builderNamePrefix + BUILDER + SPACE +
533 SUBTREE_FILTERING_RESULT_BUILDER + SPACE + EQUAL +
534 SPACE + NEW + SPACE + builderNamePrefix + BUILDER +
535 OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN +
536 NEW_LINE + EIGHT_SPACE_INDENTATION + "Boolean" + SPACE +
537 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE +
538 EQUAL + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530539
540 if (curNode instanceof YangCase) {
541 String caseName = getCapitalCase(javaFileInfo.getJavaName());
542 processSubtreeFilteringMethod =
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530543 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION +
544 caseName + SPACE + APP_INSTANCE + SPACE +
545 EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
546 CLOSE_PARENTHESIS + SPACE + instance +
547 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530548 }
549
550 return processSubtreeFilteringMethod;
551 }
552
553 /**
554 * Get the body for process subtree filtering.
555 *
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530556 * @param curNode node for which the code is being generated
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530557 * @return body of subtree filtering
558 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530559 static String getProcessSubtreeFunctionBody(YangNode curNode) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530560
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530561 String method = "";
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530562
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530563 if (curNode instanceof YangLeavesHolder) {
564 if (((YangLeavesHolder) curNode).getListOfLeaf() != null
565 &&
566 !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
567 method += MethodsGenerator
568 .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
569 "processLeafSubtreeFiltering(appInstance, " +
570 "subTreeFilteringResultBuilder," + NEW_LINE +
571 TWELVE_SPACE_INDENTATION +
572 "isAnySelectOrContainmentNode, " +
573 "isSelectAllSchemaChild)");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530574
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530575 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
576 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530577
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530578 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
579 }
580 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530581
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530582 if (curNode instanceof YangLeavesHolder) {
583 if (((YangLeavesHolder) curNode).getListOfLeafList() != null
584 &&
585 !((YangLeavesHolder) curNode).getListOfLeafList()
586 .isEmpty()) {
587 method += MethodsGenerator
588 .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
589 "processLeafListSubTreeFiltering(appInstance," +
590 " subTreeFilteringResultBuilder," + NEW_LINE
591 + TWELVE_SPACE_INDENTATION +
592 "isAnySelectOrContainmentNode, " +
593 "isSelectAllSchemaChild)");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530594
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530595 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
596 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530597
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530598 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
599 }
600 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530601
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530602 if (curNode.getChild() != null) {
603
604 method += MethodsGenerator
605 .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT +
606 "processChildNodesSubTreeFiltering(appInstance, " +
607 "subTreeFilteringResultBuilder," + NEW_LINE +
608 TWELVE_SPACE_INDENTATION +
609 "isAnySelectOrContainmentNode, " +
610 "isSelectAllSchemaChild)");
611
612 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL +
613 SEMI_COLAN + NEW_LINE;
614
615 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
616 }
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530617
618 return method;
619 }
620
621 /**
622 * Returns is filter content match for node.
623 *
624 * @param attr attribute info
625 * @return is filter content match for node
626 */
627 public static String getSubtreeFilteringForNode(JavaAttributeInfo attr) {
628 boolean isList = attr.isListAttr();
629 if (isList) {
630 return getSubtreeFilteringForList(attr, false);
631 } else {
632 return getSubtreeFilteringForChildNode(attr);
633 }
634 }
635
636 /**
637 * Returns is filter content match close.
638 *
639 * @return is filter content match close
640 */
641 static String getProcessSubTreeFilteringEnd() {
642 String method = MethodsGenerator
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530643 .getIfConditionBegin(EIGHT_SPACE_INDENTATION,
644 NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG +
645 SPACE + AND_OPERATION + SPACE +
646 NOT +
647 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530648
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530649 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE +
650 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + APP_INSTANCE +
651 COMMA + SPACE + TRUE + CLOSE_PARENTHESIS + SEMI_COLAN +
652 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530653
654 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
655
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530656 method += EIGHT_SPACE_INDENTATION + RETURN + SPACE +
657 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD +
658 EMPTY_PARAMETER_FUNCTION_CALL + SEMI_COLAN + NEW_LINE +
659 FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530660
661 return method;
662 }
663
664 /**
665 * Returns filter content match for child nodes.
666 *
667 * @param javaAttributeInfo attribute to be added
668 * @return filter content match for child nodes
669 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530670 private static String getSubtreeFilteringForChildNode(
671 JavaAttributeInfo javaAttributeInfo) {
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530672 String name = javaAttributeInfo.getAttributeName();
673 name = getSmallCase(name);
674 String type = javaAttributeInfo.getImportInfo().getClassInfo();
675 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530676 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
677 type;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530678 }
679
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530680 String method = MethodsGenerator
681 .getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + "() != " +
682 "null");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530683
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530684 method += TWELVE_SPACE_INDENTATION +
685 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE +
686 TRUE + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530687
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530688 method += TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
689 APP_INSTANCE + PERIOD + name + OPEN_PARENTHESIS +
690 CLOSE_PARENTHESIS + SPACE + NOT
691 + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE +
692 OPEN_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530693
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530694 method += SIXTEEN_SPACE_INDENTATION + type + SPACE + "result = " +
695 name + PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
696 APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL
697 + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN +
698 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530699
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530700 method += SIXTEEN_SPACE_INDENTATION + "if (result != null) {" +
701 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530702
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530703 method += TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
704 PERIOD + name + OPEN_PARENTHESIS + "result" +
705 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
706 SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530707
708 //if app instance is not null
709 method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION);
710
711 //if query instance is not null
712 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
713
714 return method;
715 }
716
717 /**
718 * Returns filter content match for list types.
719 *
720 * @param javaAttributeInfo attribute information
721 * @param isLeafList if for leaf list
722 * @return filter content match for list types
723 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530724 private static String getSubtreeFilteringForList(
725 JavaAttributeInfo javaAttributeInfo, boolean isLeafList) {
726 String capitalCaseName =
727 getCapitalCase(javaAttributeInfo.getAttributeName());
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530728 String name = javaAttributeInfo.getAttributeName();
729 String type = javaAttributeInfo.getImportInfo().getClassInfo();
730 if (javaAttributeInfo.isQualifiedName()) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530731 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
732 type;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530733 }
734
735 /*
736 * If select all schema child
737 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530738 String method = MethodsGenerator
739 .getIfConditionBegin(EIGHT_SPACE_INDENTATION,
740 IS_SELECT_ALL_SCHEMA_CHILD_FLAG);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530741
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530742 method = method + MethodsGenerator
743 .getCollectionIteratorForLoopBegin(TWELVE_SPACE_INDENTATION,
744 type + SPACE + name,
745 APP_INSTANCE + PERIOD +
746 name +
747 EMPTY_PARAMETER_FUNCTION_CALL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530748
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530749 method = method + SIXTEEN_SPACE_INDENTATION +
750 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
751 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
752 name + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530753
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530754 method += MethodsGenerator.getBlockEnd(
755 TWELVE_SPACE_INDENTATION); // Close collection Iteration loop
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530756
757 //If need to explicitly participate in query
758 method += MethodsGenerator
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530759 .getElseIfConditionBegin(EIGHT_SPACE_INDENTATION,
760 name + EMPTY_PARAMETER_FUNCTION_CALL +
761 SPACE + NOT + EQUAL +
762 SPACE + NULL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530763
764 if (!isLeafList) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530765 method += TWELVE_SPACE_INDENTATION +
766 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL +
767 SPACE + TRUE + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530768 }
769
770 //If there is any parameter in the query condition
771 method += MethodsGenerator
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530772 .getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name +
773 EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530774
775 if (isLeafList) {
776 /*
777 * If there is no app instance to perform content match
778 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530779 method += MethodsGenerator
780 .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
781 APP_INSTANCE + PERIOD + name +
782 EMPTY_PARAMETER_FUNCTION_CALL +
783 SPACE + EQUAL + EQUAL + SPACE +
784 NULL + SPACE + OR_OPERATION
785 + SPACE + APP_INSTANCE +
786 PERIOD + name +
787 EMPTY_PARAMETER_FUNCTION_CALL +
788 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530789
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530790 method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE +
791 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530792
793 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
794
795 // for instance iterator
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530796 method += MethodsGenerator.getCollectionIteratorForLoopBegin(
797 SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530798 name + EMPTY_PARAMETER_FUNCTION_CALL);
799
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530800 method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
801 "flag" + SPACE + EQUAL + SPACE + FALSE + SEMI_COLAN +
802 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530803
804 // for app instance iterator
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530805 method += MethodsGenerator
806 .getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
807 type + SPACE + name +
808 "2",
809 APP_INSTANCE + PERIOD +
810 name +
811 EMPTY_PARAMETER_FUNCTION_CALL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530812
813 //the content match leaf list attribute value matches
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530814 method += MethodsGenerator
815 .getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
816 name + PERIOD + EQUALS_STRING
817 + OPEN_PARENTHESIS + name +
818 "2" + CLOSE_PARENTHESIS);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530819
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530820 method += TWENTY_EIGHT_SPACE_INDENTATION + "flag" + SPACE + EQUAL +
821 SPACE + TRUE + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530822
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530823 method += TWENTY_EIGHT_SPACE_INDENTATION +
824 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
825 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
826 name + "2" + CLOSE_PARENTHESIS +
827 SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
828 BREAK + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530829
830 //the content match leaf list attribute value matches
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530831 method +=
832 MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530833
834 // for app instance iterator
835 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
836
837 //if the content match failed
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530838 method += MethodsGenerator
839 .getIfConditionBegin(TWENTY_SPACE_INDENTATION, "!flag");
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530840
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530841 method += TWENTY_FOUR_SPACE_INDENTATION + RETURN + SPACE + FALSE +
842 SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530843
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530844 method += MethodsGenerator
845 .getBlockEnd(TWENTY_SPACE_INDENTATION); // if flag == false
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530846
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530847 method += MethodsGenerator.getBlockEnd(
848 SIXTEEN_SPACE_INDENTATION); // for instance iterator
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530849
850
851 } else {
852
853 /*if there is any app instance entry*/
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530854 method += MethodsGenerator
855 .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
856 APP_INSTANCE + PERIOD + name +
857 EMPTY_PARAMETER_FUNCTION_CALL +
858 SPACE + NOT + EQUAL + SPACE +
859 NULL + SPACE + AND_OPERATION +
860 SPACE + NOT + APP_INSTANCE +
861 PERIOD + name +
862 EMPTY_PARAMETER_FUNCTION_CALL +
863 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530864
865 /*
866 * loop all the query condition instance(s)
867 */
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530868 method += MethodsGenerator
869 .getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
870 type + SPACE + name,
871 name +
872 EMPTY_PARAMETER_FUNCTION_CALL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530873
874 //loop all the app instance(s)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530875 method += MethodsGenerator.getCollectionIteratorForLoopBegin(
876 TWENTY_FOUR_SPACE_INDENTATION, type + SPACE + name + "2",
877 APP_INSTANCE + PERIOD + name +
878 EMPTY_PARAMETER_FUNCTION_CALL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530879
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530880 method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
881 "result = " + name + PERIOD +
882 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name + "2" +
883 COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN +
884 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530885
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530886 method += TWENTY_EIGHT_SPACE_INDENTATION + "if (result != null) {" +
887 NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530888
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530889 method += THIRTY_TWO_SPACE_INDENTATION +
890 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
891 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
892 "result" + CLOSE_PARENTHESIS +
893 SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
894 CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530895
896 //loop all the app instance(s)
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530897 method +=
898 MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530899
900 //loop all the query condition instance(s)
901 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
902
903 //if there is any app instance entry
904 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
905 }
906
907 method += TWELVE_SPACE_INDENTATION + "} else {" + NEW_LINE;
908
909 if (isLeafList) {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530910 method += SIXTEEN_SPACE_INDENTATION +
911 IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE +
912 EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530913 }
914
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530915 method += MethodsGenerator
916 .getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
917 APP_INSTANCE + PERIOD + name
918 + EMPTY_PARAMETER_FUNCTION_CALL +
919 SPACE + NOT + EQUAL + SPACE +
920 NULL + SPACE + AND_OPERATION +
921 SPACE + NOT + APP_INSTANCE +
922 PERIOD + name +
923 EMPTY_PARAMETER_FUNCTION_CALL +
924 PERIOD + IS_EMPTY);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530925
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530926 method = method + MethodsGenerator
927 .getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
928 type + SPACE + name,
929 APP_INSTANCE + PERIOD +
930 name +
931 EMPTY_PARAMETER_FUNCTION_CALL);
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530932
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530933 method = method + TWENTY_FOUR_SPACE_INDENTATION +
934 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
935 + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS +
936 name + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530937
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530938 method += MethodsGenerator.getBlockEnd(
939 TWENTY_SPACE_INDENTATION); // Close collection Iteration loop
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530940
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530941 method += MethodsGenerator
942 .getBlockEnd(SIXTEEN_SPACE_INDENTATION); // close if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530943
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530944 method += MethodsGenerator
945 .getBlockEnd(TWELVE_SPACE_INDENTATION); // close else condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530946
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530947 method += MethodsGenerator.getBlockEnd(
948 EIGHT_SPACE_INDENTATION); // close else if condition
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530949
950 return method;
951
952 }
953
954 //Returns method string for op params augmented syntax
955 static String getAugmentableSubTreeFiltering() {
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530956 return EIGHT_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS +
957 OBJECT_STRING + SPACE + getSmallCase(YANG_AUGMENTED_INFO) +
958 SPACE + COLAN + SPACE + THIS + PERIOD +
959 getSmallCase(YANG_AUGMENTED_INFO) + MAP +
960 OPEN_PARENTHESIS + CLOSE_PARENTHESIS + PERIOD
961 + VALUE + "s" + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
962 CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530963 NEW_LINE + TWELVE_SPACE_INDENTATION + OBJECT_STRING + SPACE +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530964 getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO) + SPACE + EQUAL +
965 SPACE + APP_INSTANCE + PERIOD +
966 getSmallCase(YANG_AUGMENTED_INFO) + OPEN_PARENTHESIS +
967 getSmallCase(YANG_AUGMENTED_INFO) + PERIOD +
968 GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
969 TWELVE_SPACE_INDENTATION + OBJECT + SPACE +
970 PROCESS_SUBTREE_FILTERING + SEMI_COLAN
971 + NEW_LINE + TWELVE_SPACE_INDENTATION + TRY + SPACE +
972 OPEN_CURLY_BRACKET + NEW_LINE +
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530973 SIXTEEN_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530974 "Class<?>[] interfaces = " + getSmallCase(YANG_AUGMENTED_INFO) +
975 ".getClass().getInterfaces();" +
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +0530976 NEW_LINE + SIXTEEN_SPACE_INDENTATION +
VinodKumarS-Huawei8f164222016-08-31 15:47:30 +0530977 PROCESS_SUBTREE_FILTERING + SPACE + EQUAL + SPACE +
978 getSmallCase(YANG_AUGMENTED_INFO) + PERIOD + GET_CLASS +
979 NEW_LINE + TWENTY_SPACE_INDENTATION + PERIOD +
980 GET_METHOD + OPEN_PARENTHESIS + QUOTES +
981 PROCESS_SUBTREE_FILTERING + QUOTES + COMMA + SPACE +
982 "interfaces[0]" + CLOSE_PARENTHESIS + PERIOD + INVOKE +
983 OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) +
984 COMMA + NEW_LINE + TWENTY_FOUR_SPACE_INDENTATION +
985 getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO) +
986 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
987 SIXTEEN_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
988 PROCESS_SUBTREE_FILTERING + SPACE + NOT + EQUAL + SPACE +
989 NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
990 NEW_LINE + TWENTY_SPACE_INDENTATION +
991 SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + "add" +
992 YANG_AUGMENTED_INFO + OPEN_PARENTHESIS +
993 PROCESS_SUBTREE_FILTERING + COMMA + SPACE +
994 PROCESS_SUBTREE_FILTERING + PERIOD + GET_CLASS +
995 CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE +
996 SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
997 NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
998 SPACE + CATCH + SPACE + OPEN_PARENTHESIS +
999 NO_SUCH_METHOD_EXCEPTION + " | " +
1000 INVOCATION_TARGET_EXCEPTION + " | " + ILLEGAL_ACCESS_EXCEPTION +
1001 SPACE + EXCEPTION_VAR + CLOSE_PARENTHESIS + SPACE +
1002 OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
1003 CONTINUE + SEMI_COLAN + NEW_LINE +
1004 TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
1005 EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
VinodKumarS-Huawei9a91b482016-08-19 23:22:59 +05301006 }
1007}