Prevents system workflow context from duplicated name assignment(with timestamp).

The name of the system workflow context is created based on the
msec timestamp('timestamp = System.currentTimeMillis'), so
duplicated system workflow context name can be assigned in a msec.

In order to prevent this duplicated name assignment,
It is changed to use UUID is used for guaranteeting
the uniqueness of system workflow context name instead of msec timestamp.

And name duplication checking is applied.

Change-Id: I4772e15d361af42bf61b6d47f93fee8a482814af
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/SystemWorkflowContext.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/SystemWorkflowContext.java
index 4cc15bd..f371254 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/SystemWorkflowContext.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/SystemWorkflowContext.java
@@ -17,6 +17,8 @@
 
 import com.google.common.base.MoreObjects;
 
+import java.util.UUID;
+
 /**
  * WorkflowContext for system workflow.
  */
@@ -28,6 +30,11 @@
     private final long timestamp;
 
     /**
+     * UUID of this system workflow context.
+     */
+    private final String uuid;
+
+    /**
      * Distributor string for designating which onos node executes this workflow context with work partition.
      */
     private String distributor;
@@ -39,6 +46,7 @@
     public SystemWorkflowContext(Builder builder) {
         super(builder);
         timestamp = System.currentTimeMillis();
+        uuid = UUID.randomUUID().toString();
         //initial distributor(It can be changed)
         distributor = name();
     }
@@ -59,7 +67,7 @@
     @Override
     public String name() {
         return workflowId().toString()
-                + ":" + timestamp
+                + ":" + uuid
                 + "@" + workplaceName();
     }
 
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
index 68c556e..d746985 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
@@ -78,6 +78,7 @@
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.workflow.api.CheckCondition.check;
 import static org.onosproject.workflow.api.WorkflowAttribute.REMOVE_AFTER_COMPLETE;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -199,6 +200,9 @@
                 log.trace("{} context: {}", context.name(), context);
             }
 
+            check(workplaceStore.getContext(context.name()) == null,
+                    "Duplicated workflow context(" + context.name() + ") assignment.");
+
         } catch (WorkflowException e) {
             log.error("Exception: ", e);
             context.setCause(e.getMessage());