Bump MRI upstreams
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / transactions / MdsalRestconfStrategy.java
index f05f675d2ec56e0cb1d9164557b179f59ca107c8..dbb7adc356d67bfe29e6f7fea57db4f89b641173 100644 (file)
@@ -10,106 +10,55 @@ package org.opendaylight.restconf.nb.rfc8040.rests.transactions;
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.util.concurrent.FluentFuture;
+import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import java.util.List;
 import java.util.Optional;
-import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
-import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
-import org.opendaylight.restconf.nb.rfc8040.handlers.TransactionChainHandler;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
 /**
- * Strategy that allow to communicate with netconf devices in terms of md-sal transactions.
+ * Implementation of RESTCONF operations using {@link DOMTransactionChain} and related concepts.
  *
  * @see DOMTransactionChain
  * @see DOMDataTreeReadWriteTransaction
  */
-public class MdsalRestconfStrategy implements RestconfStrategy {
-    private final InstanceIdentifierContext<?> instanceIdentifier;
-    private final DOMTransactionChain transactionChain;
-    private DOMDataTreeReadWriteTransaction rwTx;
-    private final TransactionChainHandler transactionChainHandler;
+public final class MdsalRestconfStrategy extends RestconfStrategy {
+    private final DOMDataBroker dataBroker;
 
-    public MdsalRestconfStrategy(final InstanceIdentifierContext<?> instanceIdentifier,
-                                 final TransactionChainHandler transactionChainHandler) {
-        this.instanceIdentifier = requireNonNull(instanceIdentifier);
-        this.transactionChainHandler = requireNonNull(transactionChainHandler);
-        transactionChain = transactionChainHandler.get();
+    public MdsalRestconfStrategy(final DOMDataBroker dataBroker) {
+        this.dataBroker = requireNonNull(dataBroker);
     }
 
     @Override
-    public void prepareReadWriteExecution() {
-        rwTx = transactionChain.newReadWriteTransaction();
+    public RestconfTransaction prepareWriteExecution() {
+        return new MdsalRestconfTransaction(dataBroker);
     }
 
     @Override
-    public void cancel() {
-        if (rwTx != null) {
-            rwTx.cancel();
-        }
-        transactionChain.close();
-    }
-
-    @Override
-    public ListenableFuture<Optional<NormalizedNode<?, ?>>> read(final LogicalDatastoreType store,
-                                                                 final YangInstanceIdentifier path) {
-        try (DOMDataTreeReadTransaction tx = transactionChain.newReadOnlyTransaction()) {
+    public ListenableFuture<Optional<NormalizedNode>> read(final LogicalDatastoreType store,
+            final YangInstanceIdentifier path) {
+        try (DOMDataTreeReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
             return tx.read(store, path);
         }
     }
 
     @Override
-    public FluentFuture<Boolean> exists(LogicalDatastoreType store, YangInstanceIdentifier path) {
-        return rwTx.exists(store, path);
+    public ListenableFuture<Optional<NormalizedNode>> read(final LogicalDatastoreType store,
+            final YangInstanceIdentifier path, final List<YangInstanceIdentifier> fields) {
+        return Futures.immediateFailedFuture(new UnsupportedOperationException(
+                "Reading of selected subtrees is currently not supported in: " + MdsalRestconfStrategy.class));
     }
 
     @Override
-    public void delete(LogicalDatastoreType store, final YangInstanceIdentifier path) {
-        rwTx.delete(store, path);
-    }
-
-    @Override
-    public void merge(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode<?, ?> data) {
-        rwTx.merge(store, path, data);
-    }
-
-    @Override
-    public void create(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode<?, ?> data) {
-        rwTx.put(store, path, data);
-    }
-
-    @Override
-    public void replace(LogicalDatastoreType store, YangInstanceIdentifier path, NormalizedNode<?, ?> data) {
-        create(store, path, data);
-    }
-
-    @Override
-    public FluentFuture<? extends @NonNull CommitInfo> commit() {
-        return rwTx.commit();
-    }
-
-    @Override
-    public DOMTransactionChain getTransactionChain() {
-        return transactionChain;
-    }
-
-    @Override
-    public InstanceIdentifierContext<?> getInstanceIdentifier() {
-        return instanceIdentifier;
-    }
-
-    @Override
-    public TransactionChainHandler getTransactionChainHandler() {
-        return transactionChainHandler;
-    }
-
-    @Override
-    public RestconfStrategy buildStrategy(final InstanceIdentifierContext<?> instanceIdentifierContext) {
-        return new MdsalRestconfStrategy(instanceIdentifierContext, this.transactionChainHandler);
+    public FluentFuture<Boolean> exists(final LogicalDatastoreType store, final YangInstanceIdentifier path) {
+        try (DOMDataTreeReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
+            return tx.exists(store, path);
+        }
     }
 }