Expose completion future from WriteOperations
[mdsal.git] / binding / mdsal-binding-util / src / main / java / org / opendaylight / mdsal / binding / util / TypedWriteTransactionImpl.java
index 85746cceaf1748cfd6e2859a4194a996b02d9287..b872606308dc9bc0fc6c6f1b6aafd6565f068c92 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.mdsal.binding.util;
 
-import javax.annotation.Nonnull;
+import com.google.common.util.concurrent.FluentFuture;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -16,45 +16,52 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * Implementation of {@link TypedWriteTransaction}.
  *
  * @param <D> The datastore which the transaction targets.
+ * @param <X> WriteTransaction type
  */
-class TypedWriteTransactionImpl<D extends Datastore> extends TypedTransaction<D>
+class TypedWriteTransactionImpl<D extends Datastore, X extends WriteTransaction> extends TypedTransaction<D, X>
         implements TypedWriteTransaction<D> {
-    // Temporarily package protected for TransactionAdapter
-    final WriteTransaction delegate;
-
-    TypedWriteTransactionImpl(Class<D> datastoreType, WriteTransaction realTx) {
-        super(datastoreType);
-        this.delegate = realTx;
+    TypedWriteTransactionImpl(final D datastore, final X realTx) {
+        super(datastore, realTx);
     }
 
     @Override
-    public <T extends DataObject> void put(InstanceIdentifier<T> path, T data) {
-        delegate.put(getDatastoreType(), path, data);
+    public final <T extends DataObject> void put(final InstanceIdentifier<T> path, final T data) {
+        delegate().put(getDatastoreType(), path, data);
+        postOperation();
     }
 
     @Override
-    public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        delegate.put(getDatastoreType(), path, data, createMissingParents);
+    public final <T extends DataObject> void mergeParentStructurePut(final InstanceIdentifier<T> path,
+            final T data) {
+        delegate().mergeParentStructurePut(getDatastoreType(), path, data);
+        postOperation();
     }
 
     @Override
-    public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data) {
-        delegate.merge(getDatastoreType(), path, data);
+    public final <T extends DataObject> void merge(final InstanceIdentifier<T> path, final T data) {
+        delegate().merge(getDatastoreType(), path, data);
+        postOperation();
     }
 
     @Override
-    public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
-        delegate.merge(getDatastoreType(), path, data, createMissingParents);
+    public final <T extends DataObject> void mergeParentStructureMerge(final InstanceIdentifier<T> path,
+            final T data) {
+        delegate().mergeParentStructureMerge(getDatastoreType(), path, data);
+        postOperation();
     }
 
     @Override
-    public void delete(InstanceIdentifier<?> path) {
-        delegate.delete(getDatastoreType(), path);
+    public final void delete(final InstanceIdentifier<?> path) {
+        delegate().delete(getDatastoreType(), path);
+        postOperation();
     }
 
     @Override
-    @Nonnull
-    public Object getIdentifier() {
-        return delegate.getIdentifier();
+    public final FluentFuture<?> completionFuture() {
+        return delegate().completionFuture();
+    }
+
+    void postOperation() {
+        // Defaults to no-op
     }
 }