Extract common ID generation logic using IdBlockAllocator

- Define IdGenerator<T> interface
- Implement AbstractIdBlockAllocatorBasedIdGenerator<T>, which
  has the common logic for the existing IntentId, FlowId, MatchActionId,
  and MatchActionOperationsId generator implementations.

Change-Id: I7aeea249df1710719760ed477bffe62853577e0f
diff --git a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
index 0caef51..d02351b 100644
--- a/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
+++ b/src/main/java/net/onrc/onos/api/flowmanager/SingleDstTreeFlow.java
@@ -18,14 +18,15 @@
 
 import net.onrc.onos.api.flowmanager.FlowBatchOperation.Operator;
 import net.onrc.onos.core.matchaction.MatchAction;
-import net.onrc.onos.core.matchaction.MatchActionIdGenerator;
+import net.onrc.onos.core.matchaction.MatchActionId;
 import net.onrc.onos.core.matchaction.MatchActionOperationEntry;
 import net.onrc.onos.core.matchaction.MatchActionOperations;
-import net.onrc.onos.core.matchaction.MatchActionOperationsIdGenerator;
+import net.onrc.onos.core.matchaction.MatchActionOperationsId;
 import net.onrc.onos.core.matchaction.action.Action;
 import net.onrc.onos.core.matchaction.action.OutputAction;
 import net.onrc.onos.core.matchaction.match.PacketMatch;
 import net.onrc.onos.core.util.Dpid;
+import net.onrc.onos.core.util.IdGenerator;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.SwitchPort;
 
@@ -110,8 +111,8 @@
 
     @Override
     public List<MatchActionOperations> compile(Operator op,
-            MatchActionIdGenerator maIdGenerator,
-            MatchActionOperationsIdGenerator maoIdGenerator) {
+            IdGenerator<MatchActionId> maIdGenerator,
+            IdGenerator<MatchActionOperationsId> maoIdGenerator) {
         switch (op) {
         case ADD:
             return compileAddOperation(maIdGenerator, maoIdGenerator);
@@ -123,7 +124,7 @@
     }
 
     private MatchAction createMatchAction(SwitchPort port, List<Action> actions,
-            MatchActionIdGenerator maIdGenerator) {
+            IdGenerator<MatchActionId> maIdGenerator) {
         checkNotNull(port);
         checkNotNull(actions);
 
@@ -145,8 +146,8 @@
             Dpid egressSwitch,
             Map<Dpid, Set<PortNumber>> inPorts,
             Map<Dpid, PortNumber> outPorts,
-            MatchActionIdGenerator maIdGenerator,
-            MatchActionOperationsIdGenerator maoIdGenerator) {
+            IdGenerator<MatchActionId> maIdGenerator,
+            IdGenerator<MatchActionOperationsId> maoIdGenerator) {
         MatchActionOperations firstOps =
                 new MatchActionOperations(maoIdGenerator.getNewId());
         for (Entry<Dpid, Set<PortNumber>> innerSw : inPorts.entrySet()) {
@@ -183,8 +184,8 @@
     private MatchActionOperations generateSecondAddOperations(
             Dpid egressSwitch,
             Map<Dpid, PortNumber> outPorts,
-            MatchActionIdGenerator maIdGenerator,
-            MatchActionOperationsIdGenerator maoIdGenerator) {
+            IdGenerator<MatchActionId> maIdGenerator,
+            IdGenerator<MatchActionOperationsId> maoIdGenerator) {
         MatchActionOperations secondOps =
                 new MatchActionOperations(maoIdGenerator.getNewId());
         for (SwitchPort port : getIngressPorts()) {
@@ -213,8 +214,8 @@
     }
 
     private List<MatchActionOperations> compileAddOperation(
-            MatchActionIdGenerator maIdGenerator,
-            MatchActionOperationsIdGenerator maoIdGenerator) {
+            IdGenerator<MatchActionId> maIdGenerator,
+            IdGenerator<MatchActionOperationsId> maoIdGenerator) {
         checkNotNull(tree);
         checkState(tree.size() > 0, "Tree object has no link.");