[ONOS-7732] Automating switch workflow: annotation based data model injection, applying programming counter, and small fixes
Change-Id: I4092d9c2695bcc8c4e8e01d54c442d3fac284eb6
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java
index 3f96ba9..5c0f5de 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowCommand.java
@@ -21,23 +21,22 @@
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.workflow.api.DefaultWorkflowDescription;
+import org.onosproject.workflow.api.WorkflowContext;
+import org.onosproject.workflow.api.WorkflowExecutionService;
import org.onosproject.workflow.api.WorkflowService;
import org.onosproject.workflow.api.WorkflowException;
+import org.onosproject.workflow.api.WorkplaceStore;
-import java.util.Arrays;
import java.util.Objects;
@Service
@Command(scope = "onos", name = "workflow", description = "workflow cli")
public class WorkFlowCommand extends AbstractShellCommand {
- @Argument(index = 0, name = "cmd", description = "command(invoke)", required = true)
+ @Argument(index = 0, name = "cmd", description = "command(invoke|eval)", required = true)
private String cmd = null;
- @Argument (index = 1, name = "id", description = "workflow id(URI)", required = true)
- private String id = null;
-
- @Argument (index = 2, name = "name", description = "workplace name", required = true)
+ @Argument(index = 1, name = "name", description = "workflow context name(workflow@workplace)", required = true)
private String name = null;
@Override
@@ -47,19 +46,26 @@
return;
}
+ if (Objects.isNull(name)) {
+ error("invalid workflow context name");
+ return;
+ }
+
+ String[] tokens = name.split("@");
+ if (tokens != null && tokens.length != 2) {
+ error("invalid workflow context name(workflow@workplace)");
+ return;
+ }
+
+ String workflowId = tokens[0];
+ String workplace = tokens[1];
+
switch (cmd) {
case "invoke":
- if (Objects.isNull(id)) {
- error("invalid workflow id parameter");
- return;
- }
-
- if (Objects.isNull(name)) {
- error("invalid workplace name parameter");
- return;
- }
-
- invoke(id, name);
+ invoke(workflowId, workplace);
+ break;
+ case "eval":
+ eval(name);
break;
default:
print("Unsupported cmd: " + cmd);
@@ -74,15 +80,33 @@
private void invoke(String workflowId, String workplaceName) {
WorkflowService service = get(WorkflowService.class);
- DefaultWorkflowDescription wfDesc = DefaultWorkflowDescription.builder()
- .workplaceName(workplaceName)
- .id(workflowId)
- .data(JsonNodeFactory.instance.objectNode())
- .build();
try {
+ DefaultWorkflowDescription wfDesc = DefaultWorkflowDescription.builder()
+ .workplaceName(workplaceName)
+ .id(workflowId)
+ .data(JsonNodeFactory.instance.objectNode())
+ .build();
+
service.invokeWorkflow(wfDesc);
} catch (WorkflowException e) {
- error(e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));
+ error("Exception: ", e);
}
}
+
+ /**
+ * Evaluates workflow context.
+ * @param workflowContextName workflow context name
+ */
+ private void eval(String workflowContextName) {
+ WorkplaceStore storService = get(WorkplaceStore.class);
+ WorkflowExecutionService execService = get(WorkflowExecutionService.class);
+
+ WorkflowContext context = storService.getContext(workflowContextName);
+ if (context == null) {
+ error("failed to find workflow context {}", workflowContextName);
+ return;
+ }
+ execService.eval(workflowContextName);
+ }
+
}
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowEventMapCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowEventMapCommand.java
index e23e97d..5240252 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowEventMapCommand.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowEventMapCommand.java
@@ -51,7 +51,7 @@
try {
print(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(tree));
} catch (JsonProcessingException e) {
- error(e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));
+ error("Exception: " + e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));
}
break;
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowStoreCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowStoreCommand.java
index f5e795a..d1e37c8 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowStoreCommand.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowStoreCommand.java
@@ -32,7 +32,7 @@
@Argument(index = 0, name = "cmd", description = "command(rm)", required = false)
private String cmd = null;
- @Argument (index = 1, name = "id", description = "workflow id(URI)", required = false)
+ @Argument(index = 1, name = "id", description = "workflow id(URI)", required = false)
private String id = null;
@Override
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowTestCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowTestCommand.java
index b3c34ec..8d13508 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowTestCommand.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkFlowTestCommand.java
@@ -16,6 +16,7 @@
package org.onosproject.workflow.cli;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.lifecycle.Service;
@@ -34,7 +35,7 @@
@Argument(index = 0, name = "cmd", description = "command(invoke)", required = true)
private String cmd = null;
- @Argument (index = 1, name = "number", description = "number of test", required = true)
+ @Argument(index = 1, name = "number", description = "number of test", required = true)
private String number = null;
@Override
@@ -74,12 +75,16 @@
private void invoke(String workflowId, String workplaceName) {
WorkflowService service = get(WorkflowService.class);
- DefaultWorkflowDescription wfDesc = DefaultWorkflowDescription.builder()
- .workplaceName(workplaceName)
- .id(workflowId)
- .data(JsonNodeFactory.instance.objectNode())
- .build();
+
+ ObjectNode dataModel = JsonNodeFactory.instance.objectNode();
+ dataModel.put("count", 0);
+
try {
+ DefaultWorkflowDescription wfDesc = DefaultWorkflowDescription.builder()
+ .workplaceName(workplaceName)
+ .id(workflowId)
+ .data(dataModel)
+ .build();
service.invokeWorkflow(wfDesc);
} catch (WorkflowException e) {
error(e.getMessage() + "trace: " + Arrays.asList(e.getStackTrace()));
@@ -94,6 +99,8 @@
for (int i = 0; i <= num; i++) {
String wpName = "test-" + i;
invoke("sample.workflow-0", wpName);
+ invoke("sample.workflow-1", wpName);
+ invoke("sample.workflow-2", wpName);
}
}
}
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkplaceStoreCommand.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkplaceStoreCommand.java
index db1a736..1b4ba8a 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkplaceStoreCommand.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/cli/WorkplaceStoreCommand.java
@@ -38,7 +38,7 @@
@Argument(index = 0, name = "cmd", description = "command(add/rm/clear/print)", required = false)
private String cmd = null;
- @Argument (index = 1, name = "name", description = "workspace name", required = false)
+ @Argument(index = 1, name = "name", description = "workspace name", required = false)
private String name = null;
@Option(name = "-f", aliases = "--filter", description = "including filter",
@@ -97,10 +97,10 @@
*/
private void addEmptyWorkplace(String name) {
WorkflowService service = get(WorkflowService.class);
- DefaultWorkplaceDescription wpDesc = DefaultWorkplaceDescription.builder()
- .name(name)
- .build();
try {
+ DefaultWorkplaceDescription wpDesc = DefaultWorkplaceDescription.builder()
+ .name(name)
+ .build();
service.createWorkplace(wpDesc);
} catch (WorkflowException e) {
error(e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));
@@ -125,10 +125,10 @@
*/
private void rmWorkplace(String name) {
WorkflowService service = get(WorkflowService.class);
- DefaultWorkplaceDescription wpDesc = DefaultWorkplaceDescription.builder()
- .name(name)
- .build();
try {
+ DefaultWorkplaceDescription wpDesc = DefaultWorkplaceDescription.builder()
+ .name(name)
+ .build();
service.removeWorkplace(wpDesc);
} catch (WorkflowException e) {
error(e.getMessage() + ", trace: " + Arrays.asList(e.getStackTrace()));