Remove dependency on IntentData and IntentStore from IntentWorker

- Make createInitialPhase() static and move it to IntentProcessPhase
  - Additionally, rename to newInitialPhase()
- IntentWorker's constructor receives an initial intent process phase

Change-Id: I4774493230a008fc5530d9d90b262e1eb441f946
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
index 56bf122..5f7412b 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
@@ -15,8 +15,14 @@
  */
 package org.onosproject.net.intent.impl.phase;
 
+import org.onosproject.net.intent.IntentData;
+import org.onosproject.net.intent.impl.IntentProcessor;
+
 import java.util.Optional;
 
+import static org.onlab.util.Tools.isNullOrEmpty;
+import static org.onosproject.net.intent.IntentState.WITHDRAWN;
+
 /**
  * Represents a phase of processing an intent.
  */
@@ -29,4 +35,31 @@
      * @return next update
      */
     Optional<IntentProcessPhase> execute();
+
+    /**
+     * Create a starting intent process phase according to intent data this class holds.
+     *
+     * @param processor intent processor to be passed to intent process phases
+     *                  generated while this instance is working
+     * @param data intent data to be processed
+     * @param current intent date that is stored in the store
+     * @return starting intent process phase
+     */
+    static IntentProcessPhase newInitialPhase(IntentProcessor processor,
+                                              IntentData data, IntentData current) {
+        switch (data.state()) {
+            case INSTALL_REQ:
+                return new InstallRequest(processor, data, Optional.ofNullable(current));
+            case WITHDRAW_REQ:
+                if (current == null || isNullOrEmpty(current.installables())) {
+                    return new Withdrawn(data, WITHDRAWN);
+                } else {
+                    return new WithdrawRequest(processor, data, current);
+                }
+            default:
+                // illegal state
+                return new CompilingFailed(data);
+        }
+    }
+
 }