[ONOS-5141] [ONOS-5113] ProcessSubtreeFiltering generation defect fix
Change-Id: Ic245e52acca702fa501052f705e019ac7fe71613
diff --git a/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
new file mode 100644
index 0000000..f9af450
--- /dev/null
+++ b/plugin/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -0,0 +1,739 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.translator.tojava.utils;
+
+import java.io.IOException;
+
+import org.onosproject.yangutils.datamodel.YangAugment;
+import org.onosproject.yangutils.datamodel.YangCase;
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangLeafRef;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangType;
+import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yangutils.utils.io.YangPluginConfig;
+
+import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
+import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
+import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
+import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
+import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
+import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
+import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
+import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yangutils.utils.UtilConstants.COLAN;
+import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
+import static org.onosproject.yangutils.utils.UtilConstants.CONTINUE;
+import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_PARAMETER_FUNCTION_CALL;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
+import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
+import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
+import static org.onosproject.yangutils.utils.UtilConstants.FOR;
+import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_CLASS;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_LEAF_INDEX;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_SELECT_LEAF_FLAGS;
+import static org.onosproject.yangutils.utils.UtilConstants.GET_VALUE_LEAF_FLAGS;
+import static org.onosproject.yangutils.utils.UtilConstants.IF;
+import static org.onosproject.yangutils.utils.UtilConstants.ILLEGAL_ACCESS_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
+import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.INVOKE;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
+import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
+import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
+import static org.onosproject.yangutils.utils.UtilConstants.MAP;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW;
+import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yangutils.utils.UtilConstants.NOT;
+import static org.onosproject.yangutils.utils.UtilConstants.NO_SUCH_METHOD_EXCEPTION;
+import static org.onosproject.yangutils.utils.UtilConstants.NULL;
+import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
+import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
+import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
+import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
+import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
+import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLAN;
+import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
+import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.THIS;
+import static org.onosproject.yangutils.utils.UtilConstants.TO;
+import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
+import static org.onosproject.yangutils.utils.UtilConstants.TRY;
+import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
+import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_OP_PARAM_INFO;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
+
+/**
+ * Represents generator for subtree filtering methods of generated files based on the file type.
+ */
+public final class SubtreeFilteringMethodsGenerator {
+
+ /**
+ * private to make it a util.
+ */
+ private SubtreeFilteringMethodsGenerator() {
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param javaAttributeInfo java attribute
+ * @param type data type
+ * @return is filter content match for leaf
+ */
+ public static String getSubtreeFilteringForLeaf(JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
+ String attrQualifiedType;
+ String attributeName = javaAttributeInfo.getAttributeName();
+ attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
+ type);
+ return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS
+ + GET_VALUE_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX
+ + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
+ + GET_LEAF_INDEX + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
+ + SPACE + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IF + SPACE
+ + OPEN_PARENTHESIS + attrQualifiedType + CLOSE_PARENTHESIS + SPACE
+ + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION + RETURN + SPACE + FALSE
+ + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE
+ + OPEN_CURLY_BRACKET + NEW_LINE + SIXTEEN_SPACE_INDENTATION
+ + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
+ + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS
+ + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE
+ + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + ELSE + SPACE + IF + SPACE + OPEN_PARENTHESIS
+ + GET_SELECT_LEAF_FLAGS + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + GET_METHOD_PREFIX + OPEN_PARENTHESIS
+ + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD + GET_LEAF_INDEX + CLOSE_PARENTHESIS
+ + SPACE + OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + CLOSE_PARENTHESIS + SPACE
+ + OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
+ + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+ + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + attributeName + OPEN_PARENTHESIS + APP_INSTANCE
+ + PERIOD + attributeName + EMPTY_PARAMETER_FUNCTION_CALL + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+ + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+ }
+
+ private static String getAttrTypeForFilterContentMatchWhenPrimitiveDataType(String attributeName) {
+ return /* TODO: Need to check if we can expose the value leaf flag in interface.
+ NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS + OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
+ GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase() + PERIOD
+ + GET_LEAF_INDEX + OR_OPERATION +*/
+ APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT + EQUAL
+ + SPACE + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
+ }
+
+ private static String getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(String attributeName) {
+ return APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+ + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION + SPACE
+ + NOT + OPEN_PARENTHESIS + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+ + PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD
+ + attributeName + OPEN_PARENTHESIS + CLOSE_PARENTHESIS
+ + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS;
+ }
+
+ private static String getIfFilterContentMatchMethodImpl(String attributeName,
+ YangType dataType) {
+ String attrQualifiedType;
+
+ if (MethodsGenerator.isPrimitiveDataType(dataType.getDataType())) {
+ attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
+ } else if (dataType.getDataType() == LEAFREF) {
+ YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo()).getEffectiveDataType();
+ if (MethodsGenerator.isPrimitiveDataType(type.getDataType())) {
+ attrQualifiedType = getAttrTypeForFilterContentMatchWhenPrimitiveDataType(attributeName);
+ } else {
+ attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
+ }
+ } else {
+ attrQualifiedType = getAttrTypeForFilterContentMatchWhenNonPrimitiveDataTypes(attributeName);
+ }
+
+ return attrQualifiedType;
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param javaAttributeInfo java attribute
+ * @return is filter content match for leaf
+ */
+ public static String getSubtreeFilteringForLeafList(JavaAttributeInfo javaAttributeInfo) {
+ return getSubtreeFilteringForList(javaAttributeInfo, true);
+ }
+
+ /**
+ * Returns is filter content match for child node.
+ *
+ * @param curNode current node
+ * @param pluginConfig plugin configurations
+ * @param path path of temp file
+ * @return is filter content match for child node
+ */
+ static String getProcessChildNodeSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+ throws IOException {
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ JavaFileInfoTranslator parentInfo;
+
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ if (curNode instanceof YangCase) {
+ instance = INSTANCE;
+ YangNode parent = curNode.getParent();
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else if (parent instanceof YangAugment) {
+ parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+ if (parentInfo != null) {
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else {
+ name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+ pluginConfig.getConflictResolver()));
+ }
+ }
+ }
+
+ String processSubtreeFilteringMethod =
+ FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE
+ + "processChildNodesSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
+ + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder"
+ + COMMA + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+ + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+ if (curNode instanceof YangCase) {
+ String caseName = getCapitalCase(javaFileInfo.getJavaName());
+ processSubtreeFilteringMethod =
+ processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+ EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+ + SEMI_COLAN + NEW_LINE;
+ }
+
+ processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_NODES_MASK,
+ ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+ .getBeanTempFiles(), path);
+
+ processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+ + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+ return processSubtreeFilteringMethod;
+ }
+
+ /**
+ * Returns is filter content match for leaf list.
+ *
+ * @param curNode current node
+ * @param pluginConfig plugin configurations
+ * @param path path of temp file
+ * @return is filter content match for leaf list
+ */
+ static String getProcessLeafListSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+ throws IOException {
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ JavaFileInfoTranslator parentInfo;
+
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ if (curNode instanceof YangCase) {
+ instance = INSTANCE;
+ YangNode parent = curNode.getParent();
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else if (parent instanceof YangAugment) {
+ parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+ if (parentInfo != null) {
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else {
+ name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+ pluginConfig.getConflictResolver()));
+ }
+ }
+ }
+
+ String processSubtreeFilteringMethod =
+ FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE +
+ "processLeafListSubTreeFiltering" + OPEN_PARENTHESIS + name + SPACE + instance + COMMA
+ + SPACE + builderNamePrefix + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA
+ + NEW_LINE + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+ + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+ if (curNode instanceof YangCase) {
+ String caseName = getCapitalCase(javaFileInfo.getJavaName());
+ processSubtreeFilteringMethod =
+ processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+ EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+ + SEMI_COLAN + NEW_LINE;
+ }
+
+ processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK,
+ ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+ .getBeanTempFiles(), path);
+
+ processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+ + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+ return processSubtreeFilteringMethod;
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param curNode current node
+ * @param pluginConfig plugin configurations
+ * @param path path of temp file
+ * @return is filter content match for leaf
+ */
+ static String getProcessLeafSubtreeFiltering(YangNode curNode, YangPluginConfig pluginConfig, String path)
+ throws IOException {
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ JavaFileInfoTranslator parentInfo;
+
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ if (curNode instanceof YangCase) {
+ instance = INSTANCE;
+ YangNode parent = curNode.getParent();
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else if (parent instanceof YangAugment) {
+ parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+ if (parentInfo != null) {
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else {
+ name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+ pluginConfig.getConflictResolver()));
+ }
+ }
+ }
+
+ String processSubtreeFilteringMethod =
+ FOUR_SPACE_INDENTATION + PRIVATE + SPACE + BOOLEAN_DATA_TYPE + SPACE + "processLeafSubtreeFiltering" +
+ OPEN_PARENTHESIS + name + SPACE + instance + COMMA + SPACE + builderNamePrefix
+ + BUILDER + SPACE + "subTreeFilteringResultBuilder" + COMMA + NEW_LINE
+ + TWELVE_SPACE_INDENTATION + "Boolean isAnySelectOrContainmentNode, "
+ + "boolean isSelectAllSchemaChild" + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+ if (curNode instanceof YangCase) {
+ String caseName = getCapitalCase(javaFileInfo.getJavaName());
+ processSubtreeFilteringMethod =
+ processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+ EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+ + SEMI_COLAN + NEW_LINE;
+ }
+
+ processSubtreeFilteringMethod += getDataFromTempFileHandle(FILTER_CONTENT_MATCH_FOR_LEAF_MASK,
+ ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles()
+ .getBeanTempFiles(), path);
+
+ processSubtreeFilteringMethod += EIGHT_SPACE_INDENTATION + RETURN + SPACE + TRUE + SEMI_COLAN + NEW_LINE
+ + FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE + NEW_LINE;
+
+ return processSubtreeFilteringMethod;
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param curNode current node
+ * @param pluginConfig plugin configurations
+ * @return is filter content match for leaf
+ */
+ static String getProcessSubtreeFilteringStart(YangNode curNode, YangPluginConfig pluginConfig) {
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ JavaFileInfoTranslator parentInfo;
+
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ if (curNode instanceof YangCase) {
+ instance = INSTANCE;
+ YangNode parent = curNode.getParent();
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else if (parent instanceof YangAugment) {
+ parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent).getAugmentedNode()).getJavaFileInfo();
+ if (parentInfo != null) {
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else {
+ name = getCapitalCase(getCamelCase(((YangAugment) parent).getAugmentedNode().getName(),
+ pluginConfig.getConflictResolver()));
+ }
+ }
+ }
+ String processSubtreeFilteringMethod =
+ MethodsGenerator.getOverRideString() + FOUR_SPACE_INDENTATION + PUBLIC + SPACE +
+ name + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name
+ + SPACE + instance + COMMA + SPACE + BOOLEAN_DATA_TYPE + SPACE + "isSelectAllSchemaChild" +
+ CLOSE_PARENTHESIS + SPACE
+ + OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + builderNamePrefix
+ + BUILDER + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + SPACE + EQUAL + SPACE + NEW + SPACE
+ + builderNamePrefix + BUILDER + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+ + EIGHT_SPACE_INDENTATION + "Boolean" + SPACE + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG
+ + SPACE + EQUAL + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+ if (curNode instanceof YangCase) {
+ String caseName = getCapitalCase(javaFileInfo.getJavaName());
+ processSubtreeFilteringMethod =
+ processSubtreeFilteringMethod + EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+ EQUAL + SPACE + OPEN_PARENTHESIS + caseName + CLOSE_PARENTHESIS + SPACE + instance
+ + SEMI_COLAN + NEW_LINE;
+ }
+
+ return processSubtreeFilteringMethod;
+ }
+
+ /**
+ * Get the body for process subtree filtering.
+ *
+ * @return body of subtree filtering
+ */
+ static String getProcessSubtreeFunctionBody() {
+ String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+ + "processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+ + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+ method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+ method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+ + "processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+ + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+ method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+ method += MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT
+ + "processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,"
+ + NEW_LINE + TWELVE_SPACE_INDENTATION + "isAnySelectOrContainmentNode, isSelectAllSchemaChild)");
+
+ method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + NULL + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+ return method;
+ }
+
+ /**
+ * Returns is filter content match for node.
+ *
+ * @param attr attribute info
+ * @return is filter content match for node
+ */
+ public static String getSubtreeFilteringForNode(JavaAttributeInfo attr) {
+ boolean isList = attr.isListAttr();
+ if (isList) {
+ return getSubtreeFilteringForList(attr, false);
+ } else {
+ return getSubtreeFilteringForChildNode(attr);
+ }
+ }
+
+ /**
+ * Returns is filter content match close.
+ *
+ * @return is filter content match close
+ */
+ static String getProcessSubTreeFilteringEnd() {
+ String method = MethodsGenerator
+ .getIfConditionBegin(EIGHT_SPACE_INDENTATION, NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG
+ + SPACE + AND_OPERATION + SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG);
+
+ method += TWELVE_SPACE_INDENTATION + RETURN + SPACE + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
+ + APP_INSTANCE + COMMA + SPACE + TRUE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+ method += EIGHT_SPACE_INDENTATION + RETURN + SPACE + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD
+ + EMPTY_PARAMETER_FUNCTION_CALL + SEMI_COLAN + NEW_LINE + FOUR_SPACE_INDENTATION
+ + CLOSE_CURLY_BRACKET + NEW_LINE;
+
+ return method;
+ }
+
+ /**
+ * Returns filter content match for child nodes.
+ *
+ * @param javaAttributeInfo attribute to be added
+ * @return filter content match for child nodes
+ */
+ private static String getSubtreeFilteringForChildNode(JavaAttributeInfo javaAttributeInfo) {
+ String name = javaAttributeInfo.getAttributeName();
+ name = getSmallCase(name);
+ String type = javaAttributeInfo.getImportInfo().getClassInfo();
+ if (javaAttributeInfo.isQualifiedName()) {
+ type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
+ }
+
+ String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + "() != null");
+
+ method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE + TRUE
+ + SEMI_COLAN + NEW_LINE;
+
+ method += TWELVE_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + APP_INSTANCE
+ + PERIOD + name + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + NOT
+ + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+
+
+ method += SIXTEEN_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
+ PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + APP_INSTANCE + PERIOD + name
+ + EMPTY_PARAMETER_FUNCTION_CALL + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE;
+
+ method += SIXTEEN_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
+
+ method += TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name + OPEN_PARENTHESIS
+ + "result" + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+ CLOSE_CURLY_BRACKET + NEW_LINE;
+
+ //if app instance is not null
+ method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION);
+
+ //if query instance is not null
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION);
+
+ return method;
+ }
+
+ /**
+ * Returns filter content match for list types.
+ *
+ * @param javaAttributeInfo attribute information
+ * @param isLeafList if for leaf list
+ * @return filter content match for list types
+ */
+ private static String getSubtreeFilteringForList(JavaAttributeInfo javaAttributeInfo, boolean isLeafList) {
+ String capitalCaseName = getCapitalCase(javaAttributeInfo.getAttributeName());
+ String name = javaAttributeInfo.getAttributeName();
+ String type = javaAttributeInfo.getImportInfo().getClassInfo();
+ if (javaAttributeInfo.isQualifiedName()) {
+ type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD + type;
+ }
+
+ /*
+ * If select all schema child
+ */
+ String method = MethodsGenerator.getIfConditionBegin(EIGHT_SPACE_INDENTATION, IS_SELECT_ALL_SCHEMA_CHILD_FLAG);
+
+ method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWELVE_SPACE_INDENTATION,
+ type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ method = method + SIXTEEN_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
+ + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
+ + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // Close collection Iteration loop
+
+ //If need to explicitly participate in query
+ method += MethodsGenerator
+ .getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, name + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT
+ + EQUAL + SPACE + NULL);
+
+ if (!isLeafList) {
+ method += TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL + SPACE
+ + TRUE + SEMI_COLAN + NEW_LINE;
+ }
+
+ //If there is any parameter in the query condition
+ method += MethodsGenerator
+ .getIfConditionBegin(TWELVE_SPACE_INDENTATION, NOT + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD
+ + IS_EMPTY);
+
+ if (isLeafList) {
+ /*
+ * If there is no app instance to perform content match
+ */
+ method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+ + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + EQUAL + EQUAL + SPACE + NULL + SPACE + OR_OPERATION
+ + SPACE + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+ method += TWENTY_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
+
+ // for instance iterator
+ method += MethodsGenerator.getCollectionIteratorForLoopBegin(SIXTEEN_SPACE_INDENTATION, type + SPACE + name,
+ name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ method += TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE + "flag" + SPACE + EQUAL
+ + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+ // for app instance iterator
+ method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
+ type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ //the content match leaf list attribute value matches
+ method += MethodsGenerator.getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION, name + PERIOD + EQUALS_STRING
+ + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS);
+
+ method += TWENTY_EIGHT_SPACE_INDENTATION + "flag" + SPACE + EQUAL + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
+
+ method += TWENTY_EIGHT_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + "2" + CLOSE_PARENTHESIS +
+ SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + BREAK + SEMI_COLAN + NEW_LINE;
+
+ //the content match leaf list attribute value matches
+ method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
+
+ // for app instance iterator
+ method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
+
+ //if the content match failed
+ method += MethodsGenerator.getIfConditionBegin(TWENTY_SPACE_INDENTATION, "!flag");
+
+ method += TWENTY_FOUR_SPACE_INDENTATION + RETURN + SPACE + FALSE + SEMI_COLAN + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // if flag == false
+
+ method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // for instance iterator
+
+
+ } else {
+
+ /*if there is any app instance entry*/
+ method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+ + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
+ + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+ /*
+ * loop all the query condition instance(s)
+ */
+ method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION, type + SPACE + name,
+ name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ //loop all the app instance(s)
+ method += MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_FOUR_SPACE_INDENTATION,
+ type + SPACE + name + "2", APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ method += TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE + "result = " + name + PERIOD +
+ PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS + name + "2" + COMMA
+ + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLAN
+ + NEW_LINE;
+
+ method += TWENTY_EIGHT_SPACE_INDENTATION + "if (result != null) {" + NEW_LINE;
+
+ method += THIRTY_TWO_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + "result" + CLOSE_PARENTHESIS +
+ SEMI_COLAN + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+
+ //loop all the app instance(s)
+ method += MethodsGenerator.getBlockEnd(TWENTY_FOUR_SPACE_INDENTATION);
+
+ //loop all the query condition instance(s)
+ method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION);
+
+ //if there is any app instance entry
+ method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION);
+ }
+
+ method += TWELVE_SPACE_INDENTATION + "} else {" + NEW_LINE;
+
+ if (isLeafList) {
+ method += SIXTEEN_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG + SPACE + EQUAL
+ + SPACE + TRUE + SEMI_COLAN + NEW_LINE;
+ }
+
+ method += MethodsGenerator.getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, APP_INSTANCE + PERIOD + name
+ + EMPTY_PARAMETER_FUNCTION_CALL + SPACE + NOT + EQUAL + SPACE + NULL + SPACE + AND_OPERATION + SPACE
+ + NOT + APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL + PERIOD + IS_EMPTY);
+
+ method = method + MethodsGenerator.getCollectionIteratorForLoopBegin(TWENTY_SPACE_INDENTATION,
+ type + SPACE + name, APP_INSTANCE + PERIOD + name + EMPTY_PARAMETER_FUNCTION_CALL);
+
+ method = method + TWENTY_FOUR_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING
+ + getCapitalCase(TO) + capitalCaseName + OPEN_PARENTHESIS + name + CLOSE_PARENTHESIS + SEMI_COLAN
+ + NEW_LINE;
+
+ method += MethodsGenerator.getBlockEnd(TWENTY_SPACE_INDENTATION); // Close collection Iteration loop
+
+ method += MethodsGenerator.getBlockEnd(SIXTEEN_SPACE_INDENTATION); // close if condition
+
+ method += MethodsGenerator.getBlockEnd(TWELVE_SPACE_INDENTATION); // close else condition
+
+ method += MethodsGenerator.getBlockEnd(EIGHT_SPACE_INDENTATION); // close else if condition
+
+ return method;
+
+ }
+
+ //Returns method string for op params augmented syntax
+ static String getAugmentableSubTreeFiltering() {
+ return EIGHT_SPACE_INDENTATION + FOR + SPACE + OPEN_PARENTHESIS + OBJECT_STRING + SPACE +
+ getSmallCase(YANG_AUGMENTED_INFO) + SPACE + COLAN + SPACE + THIS +
+ PERIOD + getSmallCase(YANG_AUGMENTED_INFO) + MAP + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + PERIOD
+ + VALUE + "s" + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET +
+ NEW_LINE + TWELVE_SPACE_INDENTATION + OBJECT_STRING + SPACE +
+ getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO) + SPACE + EQUAL + SPACE + APP_INSTANCE + PERIOD +
+ getSmallCase(YANG_AUGMENTED_INFO) + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD +
+ GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+ + OBJECT + SPACE + PROCESS_SUBTREE_FILTERING + SEMI_COLAN
+ + NEW_LINE + TWELVE_SPACE_INDENTATION + TRY + SPACE + OPEN_CURLY_BRACKET + NEW_LINE +
+ SIXTEEN_SPACE_INDENTATION +
+ "Class<?>[] interfaces = " + getSmallCase(YANG_AUGMENTED_INFO) + ".getClass().getInterfaces();" +
+ NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+ PROCESS_SUBTREE_FILTERING + SPACE + EQUAL + SPACE + getSmallCase(YANG_AUGMENTED_INFO) + PERIOD
+ + GET_CLASS + NEW_LINE + TWENTY_SPACE_INDENTATION + PERIOD + GET_METHOD
+ + OPEN_PARENTHESIS + QUOTES + PROCESS_SUBTREE_FILTERING + QUOTES + COMMA + SPACE + "interfaces[0]"
+ + CLOSE_PARENTHESIS + PERIOD + INVOKE + OPEN_PARENTHESIS + getSmallCase(YANG_AUGMENTED_INFO) + COMMA
+ + NEW_LINE + TWENTY_FOUR_SPACE_INDENTATION + getSmallCase(YANG_AUGMENTED_OP_PARAM_INFO)
+ + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE
+ + SIXTEEN_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + SPACE
+ + NOT + EQUAL + SPACE + NULL + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ + TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + "add" + YANG_AUGMENTED_INFO
+ + OPEN_PARENTHESIS + PROCESS_SUBTREE_FILTERING + COMMA + SPACE + PROCESS_SUBTREE_FILTERING + PERIOD
+ + GET_CLASS + CLOSE_PARENTHESIS + SEMI_COLAN + NEW_LINE + SIXTEEN_SPACE_INDENTATION
+ + CLOSE_CURLY_BRACKET + NEW_LINE
+ + TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + SPACE + CATCH + SPACE + OPEN_PARENTHESIS
+ + NO_SUCH_METHOD_EXCEPTION + " | " + INVOCATION_TARGET_EXCEPTION + " | " + ILLEGAL_ACCESS_EXCEPTION +
+ SPACE + EXCEPTION_VAR + CLOSE_PARENTHESIS + SPACE + OPEN_CURLY_BRACKET + NEW_LINE
+ + SIXTEEN_SPACE_INDENTATION + CONTINUE + SEMI_COLAN + NEW_LINE + TWELVE_SPACE_INDENTATION
+ + CLOSE_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE;
+ }
+}