From 3de097a30c62f2a7435c40bf16ffe6647a2036e4 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 15 Dec 2016 12:25:59 +0100 Subject: [PATCH] BUG-5280: add ClientTransactionCursor Cursor-based access is useful for new MD-SAL APIs, expose it from ClientTransaction. Change-Id: Iff57c9d09935181e02ab5ac3f42c9f70d9f95424 Signed-off-by: Robert Varga --- .../actors/dds/ClientTransaction.java | 18 ++++- .../actors/dds/ClientTransactionCursor.java | 78 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransactionCursor.java diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java index 334ab71d58..f0ce2faf08 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransaction.java @@ -13,8 +13,11 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.google.common.util.concurrent.CheckedFuture; import java.util.Collection; +import javax.annotation.Nonnull; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.mdsal.common.api.ReadFailedException; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCursor; +import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor; import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -52,11 +55,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @Beta public final class ClientTransaction extends AbstractClientHandle { + private ClientTransactionCursor cursor; + ClientTransaction(final AbstractClientHistory parent, final TransactionIdentifier transactionId) { super(parent, transactionId); } - private AbstractProxyTransaction createProxy(final Long shard) { return parent().createTransactionProxy(getIdentifier(), shard); } @@ -65,6 +69,12 @@ public final class ClientTransaction extends AbstractClientHandle exists(final YangInstanceIdentifier path) { return ensureTransactionProxy(path).exists(path); } @@ -107,4 +117,10 @@ public final class ClientTransaction extends AbstractClientHandle path) { + path.forEach(this::enter); + } + + @Override + public void exit() { + final YangInstanceIdentifier parent = current.getParent(); + Preconditions.checkState(parent != null); + current = parent; + } + + @Override + public void exit(final int depth) { + for (int i = 0; i < depth; ++i) { + exit(); + } + } + + @Override + public void close() { + parent.closeCursor(this); + } + + @Override + public void delete(final PathArgument child) { + parent.delete(current.node(child)); + } + + @Override + public void merge(final PathArgument child, final NormalizedNode data) { + parent.merge(current.node(child), data); + } + + @Override + public void write(final PathArgument child, final NormalizedNode data) { + parent.write(current.node(child), data); + } +} -- 2.36.6