Add read-write transaction to the AsyncDataBroker APIs
[mdsal.git] / dom / mdsal-dom-broker / src / main / java / org / opendaylight / mdsal / dom / broker / AbstractDOMForwardedTransactionFactory.java
index 2d11ddb3efef7bee4b0fcf8e002c4fba876ea4b3..e1825babd9358c25598fe0a88ba87e513a752f62 100644 (file)
@@ -17,8 +17,10 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
 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.spi.store.DOMStoreReadTransaction;
+import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
@@ -158,6 +160,21 @@ abstract class AbstractDOMForwardedTransactionFactory<T extends DOMStoreTransact
         return new DOMForwardedWriteTransaction<>(newTransactionIdentifier(), txns, this);
     }
 
+    /**
+     * Creates a new composite read-write transaction.
+     *
+     * @return New composite read-write transaction associated with this factory.
+     */
+    public final DOMDataTreeReadWriteTransaction newReadWriteTransaction() {
+        checkNotClosed();
+
+        final Map<LogicalDatastoreType, DOMStoreReadWriteTransaction> txns = new EnumMap<>(LogicalDatastoreType.class);
+        for (Entry<LogicalDatastoreType, T> store : storeTxFactories.entrySet()) {
+            txns.put(store.getKey(), store.getValue().newReadWriteTransaction());
+        }
+        return new DOMForwardedReadWriteTransaction(newTransactionIdentifier(), txns, this);
+    }
+
     /**
      * Convenience accessor of backing factories intended to be used only by
      * finalization of this class.