Refactoring BlockAllocatorBasedIdGenerator.java

Allowing first call to getNewId() to throw an NPE, and handling initial setup in catch block

Change-Id: I409aa9c8a309dbbf4fc3738c3870ec4d91831303
diff --git a/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java b/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
index ca483b4..d48c0d6 100644
--- a/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
+++ b/core/net/src/main/java/org/onosproject/core/impl/BlockAllocatorBasedIdGenerator.java
@@ -21,6 +21,8 @@
 import org.onosproject.core.IdGenerator;
 import org.onosproject.core.UnavailableIdException;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Base class of {@link IdGenerator} implementations which use {@link IdBlockAllocator} as
  * backend.
@@ -37,27 +39,29 @@
      * @param allocator the ID block allocator to use
      */
     protected BlockAllocatorBasedIdGenerator(IdBlockAllocator allocator) {
-        this.allocator = allocator;
+        this.allocator = checkNotNull(allocator, "allocator cannot be null");
         this.initialized = new AtomicBoolean(false);
     }
 
     @Override
     public long getNewId() {
         try {
-            if (!initialized.get()) {
-                synchronized (allocator) {
-                    if (!initialized.get()) {
-                        idBlock = allocator.allocateUniqueIdBlock();
-                        initialized.set(true);
-                    }
-                }
-            }
             return idBlock.getNextId();
         } catch (UnavailableIdException e) {
             synchronized (allocator) {
                 idBlock = allocator.allocateUniqueIdBlock();
             }
             return idBlock.getNextId();
+        } catch (NullPointerException e) {
+            synchronized (allocator) {
+                if (!initialized.get()) {
+                    idBlock = allocator.allocateUniqueIdBlock();
+                    initialized.set(true);
+                    return idBlock.getNextId();
+                } else {
+                    throw e;
+                }
+            }
         }
     }
 }