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/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
index 6013a38..75da2be 100644
--- a/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TransactionsCommand.java
@@ -18,81 +18,41 @@
 import java.util.Collection;
 
 import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.commands.Option;
-import org.onlab.util.Tools;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.store.primitives.TransactionId;
 import org.onosproject.store.service.StorageAdminService;
-import org.onosproject.store.service.Transaction;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 /**
- * CLI to work with database transactions in the system.
+ * CLI to view in-progress database transactions in the system.
  */
 @Command(scope = "onos", name = "transactions",
-        description = "Utility for viewing and redriving database transactions")
+        description = "Utility for listing pending/inprogress transactions")
 public class TransactionsCommand extends AbstractShellCommand {
 
-    @Option(name = "-r", aliases = "--redrive",
-            description = "Redrive stuck transactions while removing those that are done",
-            required = false, multiValued = false)
-    private boolean redrive = false;
-
-    private static final String FMT = "%-20s %-15s %-10s";
-
-    /**
-     * Displays transactions as text.
-     *
-     * @param transactions transactions
-     */
-    private void displayTransactions(Collection<Transaction> transactions) {
-        print("---------------------------------------------");
-        print(FMT, "Id", "State", "Updated");
-        print("---------------------------------------------");
-        transactions.forEach(txn -> print(FMT, txn.id(), txn.state(),  Tools.timeAgo(txn.lastUpdated())));
-        if (transactions.size() > 0) {
-            print("---------------------------------------------");
-        }
-    }
-
     /**
      * Converts collection of transactions into a JSON object.
      *
-     * @param transactions transactions
+     * @param transactionIds transaction identifiers
      */
-    private JsonNode json(Collection<Transaction> transactions) {
+    private JsonNode json(Collection<TransactionId> transactionIds) {
         ObjectMapper mapper = new ObjectMapper();
         ArrayNode txns = mapper.createArrayNode();
-
-        // Create a JSON node for each transaction
-        transactions.stream().forEach(txn -> {
-                    ObjectNode txnNode = mapper.createObjectNode();
-                    txnNode.put("id", txn.id())
-                    .put("state", txn.state().toString())
-                    .put("lastUpdated", txn.lastUpdated());
-                    txns.add(txnNode);
-                });
-
+        transactionIds.forEach(id -> txns.add(id.toString()));
         return txns;
     }
 
     @Override
     protected void execute() {
         StorageAdminService storageAdminService = get(StorageAdminService.class);
-
-        if (redrive) {
-            storageAdminService.redriveTransactions();
-            return;
-        }
-
-        Collection<Transaction> transactions = storageAdminService.getTransactions();
+        Collection<TransactionId> transactionIds = storageAdminService.getPendingTransactions();
         if (outputJson()) {
-            print("%s", json(transactions));
+            print("%s", json(transactionIds));
         } else {
-            displayTransactions(transactions);
+            transactionIds.forEach(id -> print("%s", id.toString()));
         }
     }
 }