CORD-1071 Refactor VTN node service

Done
- Separated interface, implementation and store for node management
- Added unit tests for node manager and handler
- Offloaded more of the event handling off of the Atomix event thread

Todo
- Add REST interface for the node service

Change-Id: Ibf90d3a621013497cc891ca3086db6648f5d49df
diff --git a/src/main/java/org/opencord/cordvtn/api/node/CordVtnNodeState.java b/src/main/java/org/opencord/cordvtn/api/node/CordVtnNodeState.java
index e3d9cd5..49e02ff 100644
--- a/src/main/java/org/opencord/cordvtn/api/node/CordVtnNodeState.java
+++ b/src/main/java/org/opencord/cordvtn/api/node/CordVtnNodeState.java
@@ -18,13 +18,64 @@
 /**
  * Entity that defines possible init state of the cordvtn node.
  */
-public interface CordVtnNodeState {
+public enum CordVtnNodeState {
+
+    INIT {
+        @Override
+        public void process(CordVtnNodeHandler handler, CordVtnNode node) {
+            handler.processInitState(node);
+        }
+
+        @Override
+        public CordVtnNodeState nextState() {
+            return DEVICE_CREATED;
+        }
+    },
+    DEVICE_CREATED {
+        @Override
+        public void process(CordVtnNodeHandler handler, CordVtnNode node) {
+            handler.processDeviceCreatedState(node);
+        }
+
+        @Override
+        public CordVtnNodeState nextState() {
+            return PORT_CREATED;
+        }
+    },
+    PORT_CREATED {
+        @Override
+        public void process(CordVtnNodeHandler handler, CordVtnNode node) {
+            handler.processPortCreatedState(node);
+        }
+
+        @Override
+        public CordVtnNodeState nextState() {
+            return COMPLETE;
+        }
+    },
+    COMPLETE {
+        @Override
+        public void process(CordVtnNodeHandler handler, CordVtnNode node) {
+            handler.processCompleteState(node);
+        }
+
+        @Override
+        public CordVtnNodeState nextState() {
+            // last state
+            return COMPLETE;
+        }
+    };
+
     /**
-     * Returns null for no state.
+     * Processes the current node state to proceed to the next state.
      *
-     * @return null
+     * @param handler cordvtn node state handler
+     * @param node    cordvtn node
      */
-    static CordVtnNodeState noState() {
-        return null;
-    }
+    public abstract void process(CordVtnNodeHandler handler, CordVtnNode node);
+
+    /**
+     * Returns the next node state.
+     */
+    public abstract CordVtnNodeState nextState();
 }