Changing Intent Ids to use explicit id assignment
Change-Id: I5a4bff87842c37a869e7691b353529eaefc929db
diff --git a/core/net/src/main/java/org/onlab/onos/core/impl/BlockAllocatorBasedIdGenerator.java b/core/net/src/main/java/org/onlab/onos/core/impl/BlockAllocatorBasedIdGenerator.java
new file mode 100644
index 0000000..e231394
--- /dev/null
+++ b/core/net/src/main/java/org/onlab/onos/core/impl/BlockAllocatorBasedIdGenerator.java
@@ -0,0 +1,36 @@
+package org.onlab.onos.core.impl;
+
+import org.onlab.onos.core.IdBlock;
+import org.onlab.onos.core.IdGenerator;
+import org.onlab.onos.core.UnavailableIdException;
+
+/**
+ * Base class of {@link IdGenerator} implementations which use {@link IdBlockAllocator} as
+ * backend.
+ */
+public class BlockAllocatorBasedIdGenerator implements IdGenerator {
+ protected final IdBlockAllocator allocator;
+ protected IdBlock idBlock;
+
+ /**
+ * Constructs an ID generator which use {@link IdBlockAllocator} as backend.
+ *
+ * @param allocator
+ */
+ protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) {
+ this.allocator = allocator;
+ this.idBlock = allocator.allocateUniqueIdBlock();
+ }
+
+ @Override
+ public long getNewId() {
+ try {
+ return idBlock.getNextId();
+ } catch (UnavailableIdException e) {
+ synchronized (allocator) {
+ idBlock = allocator.allocateUniqueIdBlock();
+ return idBlock.getNextId();
+ }
+ }
+ }
+}