Refactor transaction support in preparation for migration to latest APIs
 - Added a explicit transaction id type
 - cli command now just returns the identifiers of in-progress transactions
 - Removed redriveTransactions until a better alternative is provided
 - Removed DatabaseUpdate and replaced its usage with MapUpdate

Change-Id: Ic4a14967072068834510cd8459fd2a6790e456ef
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultTransactionContextBuilder.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultTransactionContextBuilder.java
index 36b2831..99d62ca 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultTransactionContextBuilder.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DefaultTransactionContextBuilder.java
@@ -15,6 +15,13 @@
  */
 package org.onosproject.store.primitives.impl;
 
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import org.onosproject.store.primitives.TransactionId;
+import org.onosproject.store.primitives.resources.impl.CommitResult;
+import org.onosproject.store.service.ConsistentMapBuilder;
 import org.onosproject.store.service.TransactionContext;
 import org.onosproject.store.service.TransactionContextBuilder;
 
@@ -22,29 +29,28 @@
  * The default implementation of a transaction context builder. This builder
  * generates a {@link DefaultTransactionContext}.
  */
-public class DefaultTransactionContextBuilder implements TransactionContextBuilder {
+public class DefaultTransactionContextBuilder extends TransactionContextBuilder {
 
-    private boolean partitionsEnabled = true;
-    private final DatabaseManager manager;
-    private final long transactionId;
+    private final Supplier<ConsistentMapBuilder> mapBuilderSupplier;
+    private final Function<Transaction, CompletableFuture<CommitResult>> transactionCommitter;
+    private final TransactionId transactionId;
 
-    public DefaultTransactionContextBuilder(DatabaseManager manager, long transactionId) {
-        this.manager = manager;
+    public DefaultTransactionContextBuilder(Supplier<ConsistentMapBuilder> mapBuilderSupplier,
+            Function<Transaction, CompletableFuture<CommitResult>> transactionCommiter,
+            TransactionId transactionId) {
+        this.mapBuilderSupplier = mapBuilderSupplier;
+        this.transactionCommitter = transactionCommiter;
         this.transactionId = transactionId;
     }
 
     @Override
-    public TransactionContextBuilder withPartitionsDisabled() {
-        partitionsEnabled = false;
-        return this;
-    }
-
-    @Override
     public TransactionContext build() {
-        return new DefaultTransactionContext(
-                transactionId,
-                partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase,
-                () -> partitionsEnabled ? manager.consistentMapBuilder()
-                                        : manager.consistentMapBuilder().withPartitionsDisabled());
+        return new DefaultTransactionContext(transactionId, transactionCommitter, () -> {
+            ConsistentMapBuilder mapBuilder = mapBuilderSupplier.get();
+            if (partitionsDisabled()) {
+                mapBuilder = mapBuilder.withPartitionsDisabled();
+            }
+            return mapBuilder;
+        });
     }
 }