Extract AdapterFactory interface and advertise as a service
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / BindingDOMTransactionChainAdapter.java
index e80579e9b4aa1bb70adeebf5ab5c376ca5f75590..e0c4b28174f5b0c77210b71aa92329a4dc6d76b5 100644 (file)
@@ -8,20 +8,23 @@
 package org.opendaylight.mdsal.binding.dom.adapter;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.BindingTransactionChain;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.AsyncTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.TransactionChain;
 import org.opendaylight.mdsal.common.api.TransactionChainListener;
-import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 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.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.yangtools.concepts.Delegator;
@@ -63,13 +66,25 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
         return new BindingDOMWriteTransactionAdapter<DOMDataTreeWriteTransaction>(delegateTx, codec) {
 
             @Override
-            public CheckedFuture<Void,TransactionCommitFailedException> submit() {
-                return listenForFailure(this,super.submit());
+            public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+                return listenForFailure(this, super.commit());
             }
 
         };
     }
 
+    @Override
+    public ReadWriteTransaction newReadWriteTransaction() {
+        final DOMDataTreeReadWriteTransaction delegateTx = delegate.newReadWriteTransaction();
+        return new BindingDOMReadWriteTransactionAdapter(delegateTx, codec) {
+
+            @Override
+            public @NonNull FluentFuture<? extends @NonNull CommitInfo> commit() {
+                return listenForFailure(this, super.commit());
+            }
+        };
+    }
+
     private <T, F extends ListenableFuture<T>> F listenForFailure(final WriteTransaction tx, final F future) {
         Futures.addCallback(future, new FutureCallback<T>() {
             @Override
@@ -86,6 +101,7 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
         return future;
     }
 
+
     private void failTransactionChain(final WriteTransaction tx, final Throwable throwable) {
         /*
          *  We asume correct state change for underlaying transaction
@@ -127,5 +143,4 @@ final class BindingDOMTransactionChainAdapter implements BindingTransactionChain
             bindingListener.onTransactionChainSuccessful(BindingDOMTransactionChainAdapter.this);
         }
     }
-
 }