blob: f9af450b1e1492e7b39ffa04663b50a33a75abdf [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;
25import org.onosproject.yangutils.datamodel.YangNode;
26import org.onosproject.yangutils.datamodel.YangType;
27import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
28import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
29import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
30import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
31import org.onosproject.yangutils.utils.io.YangPluginConfig;
32
33import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
34import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
35import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
36import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
37import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
38import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
39import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
40import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
41import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
42import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
43import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
44import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
45import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
46import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
47import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
48import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
49import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
50import static org.onosproject.yangutils.utils.UtilConstants.CONTINUE;
51import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
52import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
53import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
54import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
55import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
56import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
57import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
58import static org.onosproject.yangutils.utils.UtilConstants.FOR;
59import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
60import static org.onosproject.yangutils.utils.UtilConstants.GET_CLASS;
61import static org.onosproject.yangutils.utils.UtilConstants.GET_LEAF_INDEX;
62import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD;
63import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
64import static org.onosproject.yangutils.utils.UtilConstants.GET_SELECT_LEAF_FLAGS;
65import static org.onosproject.yangutils.utils.UtilConstants.GET_VALUE_LEAF_FLAGS;
66import static org.onosproject.yangutils.utils.UtilConstants.IF;
67import static org.onosproject.yangutils.utils.UtilConstants.ILLEGAL_ACCESS_EXCEPTION;
68import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
69import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
70import static org.onosproject.yangutils.utils.UtilConstants.INVOKE;
71import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
72import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
73import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
74import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
75import static org.onosproject.yangutils.utils.UtilConstants.MAP;
76import static org.onosproject.yangutils.utils.UtilConstants.NEW;
77import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
78import static org.onosproject.yangutils.utils.UtilConstants.NOT;
79import static org.onosproject.yangutils.utils.UtilConstants.NO_SUCH_METHOD_EXCEPTION;
80import static org.onosproject.yangutils.utils.UtilConstants.NULL;
81import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
82import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
83import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
84import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
85import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
86import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
87import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
88import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
89import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
90import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
91import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
92import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
93import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
94import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
95import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
96import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
97import static org.onosproject.yangutils.utils.UtilConstants.THIS;
98import static org.onosproject.yangutils.utils.UtilConstants.TO;
99import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
100import static org.onosproject.yangutils.utils.UtilConstants.TRY;
101import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
102import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
103import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
104import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
105import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
106import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
107import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_OP_PARAM_INFO;
108import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
109import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
110import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
111
112/**
113 * Represents generator for subtree filtering methods of generated files based on the file type.
114 */
115public final class SubtreeFilteringMethodsGenerator {
116
117 /**
118 * private to make it a util.
119 */
120 private SubtreeFilteringMethodsGenerator() {
121 }
122
123 /**
124 * Returns is filter content match for leaf.
125 *
126 * @param javaAttributeInfo java attribute
127 * @param type data type
128 * @return is filter content match for leaf
129 */
130 public static String getSubtreeFilteringForLeaf(JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
131 String attrQualifiedType;
132 String attributeName = javaAttributeInfo.getAttributeName();
133 attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
134 type);
135 return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS
136 + GET_VALUE_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX
137 + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
138 + GET_LEAF_INDEX + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
139 + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IF + SPACE
140 + OPEN_PARENTHESIS + attrQualifiedType + CLOSE_PARENTHESIS + SPACE
141 + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION + RETURN + SPACE + FALSE
142 + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE
143 + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION
144 + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
145 + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
146 + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE
147 + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE + IF + SPACE + OPEN_PARENTHESIS
148 + GET_SELECT_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS
149 + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS
150 + SPACE + OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + CLOSE_PARENTHESIS + SPACE
151 + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
152 + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
153 + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
154 + PERIOD + attributeName + EMPTY_PARAMETER_FUNCTION_CALL + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
155 + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
156 }
157
158 private static String getAttrTypeForFilterContentMatchWhenPrimitiveDataType(String attributeName) {
159 return /* TODO: Need to check if we can expose the value leaf flag in interface.
160 NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
161 GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
162 + GET_LEAF_INDEX + OR_OPERATION +*/
163 APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT + EQUAL
164 + SPACE + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
165 }
166
167 private static String getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(String attributeName) {
168 return APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
169 + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION + SPACE
170 + NOT + OPEN_PARENTHESIS + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
171 + PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD
172 + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
173 + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS;
174 }
175
176 private static String getIfFilterContentMatchMethodImpl(String attributeName,
177 YangType dataType) {
178 String attrQualifiedType;
179
180 if (MethodsGenerator.isPrimitiveDataType(dataType.getDataType())) {
181 attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
182 } else if (dataType.getDataType() == LEAFREF) {
183 YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo()).getEffectiveDataType();
184 if (MethodsGenerator.isPrimitiveDataType(type.getDataType())) {
185 attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
186 } else {
187 attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
188 }
189 } else {
190 attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
191 }
192
193 return attrQualifiedType;
194 }
195
196 /**
197 * Returns is filter content match for leaf.
198 *
199 * @param javaAttributeInfo java attribute
200 * @return is filter content match for leaf
201 */
202 public static String getSubtreeFilteringForLeafList(JavaAttributeInfo javaAttributeInfo) {
203 return getSubtreeFilteringForList(javaAttributeInfo, true);
204 }
205
206 /**
207 * Returns is filter content match for child node.
208 *
209 * @param curNode current node
210 * @param pluginConfig plugin configurations
211 * @param path path of temp file
212 * @return is filter content match for child node
213 */
214 static String getProcessChildNodeSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
215 throws IOException {
216 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
217 JavaFileInfoTranslator parentInfo;
218
219 String instance = APP_INSTANCE;
220 String name = getCapitalCase(javaFileInfo.getJavaName());
221 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
222 if (curNode instanceof YangCase) {
223 instance = INSTANCE;
224 YangNode parent = curNode.getParent();
225 if (parent instanceof YangChoice) {
226 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
227 name = getCapitalCase(parentInfo.getJavaName());
228 } else if (parent instanceof YangAugment) {
229 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
230 if (parentInfo != null) {
231 name = getCapitalCase(parentInfo.getJavaName());
232 } else {
233 name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
234 pluginConfig.getConflictResolver()));
235 }
236 }
237 }
238
239 String processSubtreeFilteringMethod =
240 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE
241 + "processChildNodesSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
242 + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder"
243 + COMMA + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
244 + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
245
246 if (curNode instanceof YangCase) {
247 String caseName = getCapitalCase(javaFileInfo.getJavaName());
248 processSubtreeFilteringMethod =
249 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
250 EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
251 + SEMI_COLAN + NEW_LINE;
252 }
253
254 processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
255 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
256 .getBeanTempFiles(), path);
257
258 processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
259 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
260
261 return processSubtreeFilteringMethod;
262 }
263
264 /**
265 * Returns is filter content match for leaf list.
266 *
267 * @param curNode current node
268 * @param pluginConfig plugin configurations
269 * @param path path of temp file
270 * @return is filter content match for leaf list
271 */
272 static String getProcessLeafListSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
273 throws IOException {
274 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
275 JavaFileInfoTranslator parentInfo;
276
277 String instance = APP_INSTANCE;
278 String name = getCapitalCase(javaFileInfo.getJavaName());
279 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
280 if (curNode instanceof YangCase) {
281 instance = INSTANCE;
282 YangNode parent = curNode.getParent();
283 if (parent instanceof YangChoice) {
284 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
285 name = getCapitalCase(parentInfo.getJavaName());
286 } else if (parent instanceof YangAugment) {
287 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
288 if (parentInfo != null) {
289 name = getCapitalCase(parentInfo.getJavaName());
290 } else {
291 name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
292 pluginConfig.getConflictResolver()));
293 }
294 }
295 }
296
297 String processSubtreeFilteringMethod =
298 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE +
299 "processLeafListSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
300 + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA
301 + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
302 + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
303
304 if (curNode instanceof YangCase) {
305 String caseName = getCapitalCase(javaFileInfo.getJavaName());
306 processSubtreeFilteringMethod =
307 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
308 EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
309 + SEMI_COLAN + NEW_LINE;
310 }
311
312 processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
313 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
314 .getBeanTempFiles(), path);
315
316 processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
317 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
318
319 return processSubtreeFilteringMethod;
320 }
321
322 /**
323 * Returns is filter content match for leaf.
324 *
325 * @param curNode current node
326 * @param pluginConfig plugin configurations
327 * @param path path of temp file
328 * @return is filter content match for leaf
329 */
330 static String getProcessLeafSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
331 throws IOException {
332 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
333 JavaFileInfoTranslator parentInfo;
334
335 String instance = APP_INSTANCE;
336 String name = getCapitalCase(javaFileInfo.getJavaName());
337 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
338 if (curNode instanceof YangCase) {
339 instance = INSTANCE;
340 YangNode parent = curNode.getParent();
341 if (parent instanceof YangChoice) {
342 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
343 name = getCapitalCase(parentInfo.getJavaName());
344 } else if (parent instanceof YangAugment) {
345 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
346 if (parentInfo != null) {
347 name = getCapitalCase(parentInfo.getJavaName());
348 } else {
349 name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
350 pluginConfig.getConflictResolver()));
351 }
352 }
353 }
354
355 String processSubtreeFilteringMethod =
356 FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE + "processLeafSubtreeFiltering" +
357 OPEN_PARENTHESIS + name + SPACE + instance + COMMA + SPACE + builderNamePrefix
358 + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA + NEW_LINE
359 + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
360 + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
361
362 if (curNode instanceof YangCase) {
363 String caseName = getCapitalCase(javaFileInfo.getJavaName());
364 processSubtreeFilteringMethod =
365 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
366 EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
367 + SEMI_COLAN + NEW_LINE;
368 }
369
370 processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
371 ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
372 .getBeanTempFiles(), path);
373
374 processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
375 + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
376
377 return processSubtreeFilteringMethod;
378 }
379
380 /**
381 * Returns is filter content match for leaf.
382 *
383 * @param curNode current node
384 * @param pluginConfig plugin configurations
385 * @return is filter content match for leaf
386 */
387 static String getProcessSubtreeFilteringStart(YangNode curNode, YangPluginConfig pluginConfig) {
388 JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
389 JavaFileInfoTranslator parentInfo;
390
391 String instance = APP_INSTANCE;
392 String name = getCapitalCase(javaFileInfo.getJavaName());
393 String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
394 if (curNode instanceof YangCase) {
395 instance = INSTANCE;
396 YangNode parent = curNode.getParent();
397 if (parent instanceof YangChoice) {
398 parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
399 name = getCapitalCase(parentInfo.getJavaName());
400 } else if (parent instanceof YangAugment) {
401 parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
402 if (parentInfo != null) {
403 name = getCapitalCase(parentInfo.getJavaName());
404 } else {
405 name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
406 pluginConfig.getConflictResolver()));
407 }
408 }
409 }
410 String processSubtreeFilteringMethod =
411 MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE +
412 name + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name
413 + SPACE + instance + COMMA + SPACE + BOOLEAN_DATA_TYPE + SPACE + "isSelectAllSchemaChild" +
414 CLOSE_PARENTHESIS + SPACE
415 + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + builderNamePrefix
416 + BUILDER + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + SPACE + EQUAL + SPACE + NEW + SPACE
417 + builderNamePrefix + BUILDER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
418 + EIGHT_SPACE_INDENTATION + "Boolean" + SPACE + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
419 + SPACE + EQUAL + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
420
421 if (curNode instanceof YangCase) {
422 String caseName = getCapitalCase(javaFileInfo.getJavaName());
423 processSubtreeFilteringMethod =
424 processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
425 EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
426 + SEMI_COLAN + NEW_LINE;
427 }
428
429 return processSubtreeFilteringMethod;
430 }
431
432 /**
433 * Get the body for process subtree filtering.
434 *
435 * @return body of subtree filtering
436 */
437 static String getProcessSubtreeFunctionBody() {
438 String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
439 + "processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,"
440 + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
441
442 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
443
444 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
445
446 method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
447 + "processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
448 + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
449
450 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
451
452 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
453
454 method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
455 + "processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
456 + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
457
458 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
459
460 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
461
462 return method;
463 }
464
465 /**
466 * Returns is filter content match for node.
467 *
468 * @param attr attribute info
469 * @return is filter content match for node
470 */
471 public static String getSubtreeFilteringForNode(JavaAttributeInfo attr) {
472 boolean isList = attr.isListAttr();
473 if (isList) {
474 return getSubtreeFilteringForList(attr, false);
475 } else {
476 return getSubtreeFilteringForChildNode(attr);
477 }
478 }
479
480 /**
481 * Returns is filter content match close.
482 *
483 * @return is filter content match close
484 */
485 static String getProcessSubTreeFilteringEnd() {
486 String method = MethodsGenerator
487 .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG
488 + SPACE + AND_OPERATION + SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG);
489
490 method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
491 + APP_INSTANCE + COMMA + SPACE + TRUE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
492
493 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
494
495 method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD
496 + EMPTY_PARAMETER_FUNCTION_CALL + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION
497 + CLOSE_CURLY_BRACKET + NEW_LINE;
498
499 return method;
500 }
501
502 /**
503 * Returns filter content match for child nodes.
504 *
505 * @param javaAttributeInfo attribute to be added
506 * @return filter content match for child nodes
507 */
508 private static String getSubtreeFilteringForChildNode(JavaAttributeInfo javaAttributeInfo) {
509 String name = javaAttributeInfo.getAttributeName();
510 name = getSmallCase(name);
511 String type = javaAttributeInfo.getImportInfo().getClassInfo();
512 if (javaAttributeInfo.isQualifiedName()) {
513 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
514 }
515
516 String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + "() != null");
517
518 method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE + TRUE
519 + SEMI_COLAN + NEW_LINE;
520
521 method += TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + APP_INSTANCE
522 + PERIOD + name + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT
523 + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
524
525
526 method += SIXTEEN_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
527 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD + name
528 + EMPTY_PARAMETER_FUNCTION_CALL + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
529
530 method += SIXTEEN_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
531
532 method += TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name + OPEN_PARENTHESIS
533 + "result" + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
534 CLOSE_CURLY_BRACKET + NEW_LINE;
535
536 //if app instance is not null
537 method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION);
538
539 //if query instance is not null
540 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
541
542 return method;
543 }
544
545 /**
546 * Returns filter content match for list types.
547 *
548 * @param javaAttributeInfo attribute information
549 * @param isLeafList if for leaf list
550 * @return filter content match for list types
551 */
552 private static String getSubtreeFilteringForList(JavaAttributeInfo javaAttributeInfo, boolean isLeafList) {
553 String capitalCaseName = getCapitalCase(javaAttributeInfo.getAttributeName());
554 String name = javaAttributeInfo.getAttributeName();
555 String type = javaAttributeInfo.getImportInfo().getClassInfo();
556 if (javaAttributeInfo.isQualifiedName()) {
557 type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
558 }
559
560 /*
561 * If select all schema child
562 */
563 String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, IS_SELECT_ALL_SCHEMA_CHILD_FLAG);
564
565 method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWELVE_SPACE_INDENTATION,
566 type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
567
568 method = method + SIXTEEN_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
569 + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
570 + NEW_LINE;
571
572 method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // Close collection Iteration loop
573
574 //If need to explicitly participate in query
575 method += MethodsGenerator
576 .getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, name + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT
577 + EQUAL + SPACE + NULL);
578
579 if (!isLeafList) {
580 method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE
581 + TRUE + SEMI_COLAN + NEW_LINE;
582 }
583
584 //If there is any parameter in the query condition
585 method += MethodsGenerator
586 .getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD
587 + IS_EMPTY);
588
589 if (isLeafList) {
590 /*
591 * If there is no app instance to perform content match
592 */
593 method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
594 + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION
595 + SPACE + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
596
597 method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
598
599 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
600
601 // for instance iterator
602 method += MethodsGenerator.getCollectionIteratorForLoopBegin(SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
603 name + EMPTY_PARAMETER_FUNCTION_CALL);
604
605 method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE + "flag" + SPACE + EQUAL
606 + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
607
608 // for app instance iterator
609 method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
610 type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
611
612 //the content match leaf list attribute value matches
613 method += MethodsGenerator.getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION, name + PERIOD + EQUALS_STRING
614 + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS);
615
616 method += TWENTY_EIGHT_SPACE_INDENTATION + "flag" + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
617
618 method += TWENTY_EIGHT_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
619 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS +
620 SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + BREAK + SEMI_COLAN + NEW_LINE;
621
622 //the content match leaf list attribute value matches
623 method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
624
625 // for app instance iterator
626 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
627
628 //if the content match failed
629 method += MethodsGenerator.getIfConditionBegin(TWENTY_SPACE_INDENTATION, "!flag");
630
631 method += TWENTY_FOUR_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
632
633 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // if flag == false
634
635 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // for instance iterator
636
637
638 } else {
639
640 /*if there is any app instance entry*/
641 method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
642 + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
643 + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
644
645 /*
646 * loop all the query condition instance(s)
647 */
648 method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION, type + SPACE + name,
649 name + EMPTY_PARAMETER_FUNCTION_CALL);
650
651 //loop all the app instance(s)
652 method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_FOUR_SPACE_INDENTATION,
653 type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
654
655 method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
656 PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name + "2" + COMMA
657 + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN
658 + NEW_LINE;
659
660 method += TWENTY_EIGHT_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
661
662 method += THIRTY_TWO_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
663 getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + "result" + CLOSE_PARENTHESIS +
664 SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
665
666 //loop all the app instance(s)
667 method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
668
669 //loop all the query condition instance(s)
670 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
671
672 //if there is any app instance entry
673 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
674 }
675
676 method += TWELVE_SPACE_INDENTATION + "} else {" + NEW_LINE;
677
678 if (isLeafList) {
679 method += SIXTEEN_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL
680 + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
681 }
682
683 method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
684 + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
685 + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
686
687 method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
688 type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
689
690 method = method + TWENTY_FOUR_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
691 + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
692 + NEW_LINE;
693
694 method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // Close collection Iteration loop
695
696 method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // close if condition
697
698 method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // close else condition
699
700 method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION); // close else if condition
701
702 return method;
703
704 }
705
706 //Returns method string for op params augmented syntax
707 static String getAugmentableSubTreeFiltering() {
708 return EIGHT_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + OBJECT_STRING + SPACE +
709 getSmallCase(YANG_AUGMENTED_INFO) + SPACE + COLAN + SPACE + THIS +
710 PERIOD + getSmallCase(YANG_AUGMENTED_INFO) + MAP + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + PERIOD
711 + VALUE + "s" + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
712 NEW_LINE + TWELVE_SPACE_INDENTATION + OBJECT_STRING + SPACE +
713 getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO) + SPACE + EQUAL + SPACE + APP_INSTANCE + PERIOD +
714 getSmallCase(YANG_AUGMENTED_INFO) + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD +
715 GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
716 + OBJECT + SPACE + PROCESS_SUBTREE_FILTERING + SEMI_COLAN
717 + NEW_LINE + TWELVE_SPACE_INDENTATION + TRY + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
718 SIXTEEN_SPACE_INDENTATION +
719 "Class<?>[] interfaces = " + getSmallCase(YANG_AUGMENTED_INFO) + ".getClass().getInterfaces();" +
720 NEW_LINE + SIXTEEN_SPACE_INDENTATION +
721 PROCESS_SUBTREE_FILTERING + SPACE + EQUAL + SPACE + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD
722 + GET_CLASS + NEW_LINE + TWENTY_SPACE_INDENTATION + PERIOD + GET_METHOD
723 + OPEN_PARENTHESIS + QUOTES + PROCESS_SUBTREE_FILTERING + QUOTES + COMMA + SPACE + "interfaces[0]"
724 + CLOSE_PARENTHESIS + PERIOD + INVOKE + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + COMMA
725 + NEW_LINE + TWENTY_FOUR_SPACE_INDENTATION + getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO)
726 + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
727 + SIXTEEN_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + SPACE
728 + NOT + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
729 + TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + "add" + YANG_AUGMENTED_INFO
730 + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + COMMA + SPACE + PROCESS_SUBTREE_FILTERING + PERIOD
731 + GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION
732 + CLOSE_CURLY_BRACKET + NEW_LINE
733 + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + CATCH + SPACE + OPEN_PARENTHESIS
734 + NO_SUCH_METHOD_EXCEPTION + " | " + INVOCATION_TARGET_EXCEPTION + " | " + ILLEGAL_ACCESS_EXCEPTION +
735 SPACE + EXCEPTION_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
736 + SIXTEEN_SPACE_INDENTATION + CONTINUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
737 + CLOSE_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
738 }
739}