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);
+ }
+ }
+
}