From: Robert Varga Date: Wed, 14 Mar 2018 02:25:51 +0000 (+0100) Subject: Add YangConstants.operation{Input,Output}QName() X-Git-Tag: release/carbon-sr4~4 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=275d1aedfe8e671c050acab16c1bb821e153c7bf Add YangConstants.operation{Input,Output}QName() Since we have QName.withModule(), we can optimize instantiation of action/RPC input output statements by pre-validating the local name. This is significantly faster than parsing the string via StmtContextUtils.qnameFromArgument() and is useful for downstreams which interaction with actions/RPCs. Change-Id: If6da796df375f9785e05cb3cf901d64cccf2cfe5 Signed-off-by: Robert Varga (cherry picked from commit 410be68c91e90c8a95f974d46303c45745e0784c) --- diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java index 3b362cf8b8..641fcf345a 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java @@ -75,7 +75,33 @@ public final class YangConstants { */ public static final String YANG_XPATH_FUNCTIONS_PREFIX = "yang"; + // Dummy template QNames. These are never leaked, but are used for efficient instantiation via QName#withModule() + private static final QName DUMMY_OPERATION_INPUT = QName.create("DUMMY", "input"); + private static final QName DUMMY_OPERATION_OUTPUT = QName.create("DUMMY", "output"); + private YangConstants() { throw new UnsupportedOperationException("Utility class"); } + + /** + * Create a {@link QName} representing the 'input' statement of an operation (RPC or action) within specified + * {@link QNameModule}. + * + * @param module Desired module + * @return A QName representing action or RPC input. + */ + public static QName operationInputQName(final QNameModule module) { + return DUMMY_OPERATION_INPUT.withModule(module); + } + + /** + * Create a {@link QName} representing the 'output' statement of an operation (RPC or action) within specified + * {@link QNameModule}. + * + * @param module Desired module + * @return A QName representing action or RPC output. + */ + public static QName operationOutputQName(final QNameModule module) { + return DUMMY_OPERATION_OUTPUT.withModule(module); + } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java index bb8ca59626..82e3aae958 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import java.util.Collection; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -54,7 +55,7 @@ public class InputStatementImpl extends AbstractDeclaredStatement @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, "input"); + return YangConstants.operationInputQName(StmtContextUtils.getRootModuleQName(ctx)); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java index 534062358f..6db78092e6 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import java.util.Collection; import javax.annotation.Nonnull; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DataDefinitionStatement; @@ -52,7 +53,7 @@ public class OutputStatementImpl extends AbstractDeclaredStatement implem @Override public QName parseArgumentValue(final StmtContext ctx, final String value) { - return StmtContextUtils.qnameFromArgument(ctx, "output"); + return YangConstants.operationOutputQName(StmtContextUtils.getRootModuleQName(ctx)); } @Override