Add YangConstants.operation{Input,Output}QName() 21/70821/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 14 Mar 2018 02:25:51 +0000 (03:25 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 12 Apr 2018 08:06:00 +0000 (10:06 +0200)
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 <robert.varga@pantheon.tech>
(cherry picked from commit 410be68c91e90c8a95f974d46303c45745e0784c)

yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/YangConstants.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java

index 3b362cf8b8a79a92f81a4163761be79cd73bfa3e..641fcf345a70bfd236872af37455292d56aa215f 100644 (file)
@@ -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);
+    }
 }
index bb8ca59626a3bf2ae1a0197cdc31c9d656b15091..82e3aae95879ebd39c5de63065fd9b8426c0d236 100644 (file)
@@ -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<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return StmtContextUtils.qnameFromArgument(ctx, "input");
+            return YangConstants.operationInputQName(StmtContextUtils.getRootModuleQName(ctx));
         }
 
         @Override
index 534062358fd7b33d88063f5ac1ff70e146423c8f..6db78092e6ed59230bb971cea57a27df50defae7 100644 (file)
@@ -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<QName> implem
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return StmtContextUtils.qnameFromArgument(ctx, "output");
+            return YangConstants.operationOutputQName(StmtContextUtils.getRootModuleQName(ctx));
         }
 
         @Override