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)
*/
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);
+ }
}
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;
@Override
public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return StmtContextUtils.qnameFromArgument(ctx, "input");
+ return YangConstants.operationInputQName(StmtContextUtils.getRootModuleQName(ctx));
}
@Override
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;
@Override
public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return StmtContextUtils.qnameFromArgument(ctx, "output");
+ return YangConstants.operationOutputQName(StmtContextUtils.getRootModuleQName(ctx));
}
@Override