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);
+ }
}
}