You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2018/08/15 13:59:32 UTC
[4/8] incubator-taverna-language git commit: Add support for
datalinks while converting a Workflow
Add support for datalinks while converting a Workflow
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/2c17fa7e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/2c17fa7e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/2c17fa7e
Branch: refs/heads/cwlparser
Commit: 2c17fa7e41006b071494f3e812f3a2b9efa411da
Parents: d163547
Author: Majdi Haouech <m....@criteo.com>
Authored: Thu Aug 9 22:23:48 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Thu Aug 9 22:23:48 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/Converter.java | 35 +++++++++++++++++---
.../taverna/scufl2/cwl/components/Process.java | 20 +++++++++++
.../scufl2/cwl/components/WorkflowProcess.java | 2 ++
.../taverna/scufl2/cwl/TestConverting.java | 6 ++++
.../src/test/resources/hello_world.cwl | 2 +-
5 files changed, 59 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2c17fa7e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
index 4134783..5637ced 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java
@@ -22,6 +22,8 @@ import java.util.Set;
import java.util.HashSet;
import java.util.Map;
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.core.DataLink;
import org.apache.taverna.scufl2.api.core.Workflow;
import org.apache.taverna.scufl2.api.core.Processor;
import org.apache.taverna.scufl2.api.container.WorkflowBundle;
@@ -36,6 +38,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import org.apache.taverna.scufl2.api.port.ReceiverPort;
+import org.apache.taverna.scufl2.api.port.SenderPort;
import org.apache.taverna.scufl2.cwl.components.Process;
import org.apache.taverna.scufl2.cwl.components.*;
@@ -179,23 +183,44 @@ public class Converter {
Set<OutputWorkflowPort> outputs = new HashSet<>(workflowProcess.getWorkflowOutputs().values());
workflow.setInputPorts(inputs);
workflow.setOutputPorts(outputs);
- Set<InputPort> inputPorts = workflowProcess.getInputPorts();
- Set<OutputPort> outputPorts = workflowProcess.getOutputPorts();
+ Set<InputPort> inputPorts = workflowProcess.getInsideInputPorts();
+ Set<OutputPort> outputPorts = workflowProcess.getInsideOutputPorts();
+
+ NamedSet<InputProcessorPort> inputProcessorPorts = new NamedSet<>();
+ NamedSet<OutputProcessorPort> outputProcessorPorts = new NamedSet<>();
for(Process process: workflowProcess.getProcesses()) {
+ Processor processor;
if(process instanceof WorkflowProcess) {
Workflow childWorkflow = convertWorkflowProcess((WorkflowProcess) process, bundle); // TODO: Add nested relationship
- Processor processor = new Processor(workflow, childWorkflow.getName()); // TODO: Check if we want the processor to have the same name as the childworkflow
+ processor = new Processor(workflow, childWorkflow.getName()); // TODO: Check if we want the processor to have the same name as the childworkflow
createProcessPortsFromWorkflow(processor, childWorkflow);
bundle.getWorkflows().add(childWorkflow);
} else if(process instanceof CommandLineTool) {
- Processor processor = convertCommandLineTool((CommandLineTool) process);
+ processor = convertCommandLineTool((CommandLineTool) process);
workflow.getProcessors().add(processor);
} else {
assert(process instanceof Reference);
- Processor processor = convertReference((Reference) process);
+ processor = convertReference((Reference) process);
workflow.getProcessors().add(processor);
}
+ inputProcessorPorts.addAll(processor.getInputPorts());
+ outputProcessorPorts.addAll(processor.getOutputPorts());
+ }
+
+ // DataLinks
+ for(InputPort port: inputPorts) {
+ String senderName = port.getSource();
+ String destName = port.getName();
+ SenderPort senderPort = outputProcessorPorts.getByName(senderName);
+ if(senderPort == null) { // Source is one of the Workflow inputs
+ senderPort = workflow.getInputPorts().getByName(senderName);
+ }
+ ReceiverPort receiverPort = inputProcessorPorts.getByName(destName);
+ if(receiverPort == null) { // Destination is one of the Workflow outputs
+ receiverPort = workflow.getOutputPorts().getByName(destName);
+ }
+ new DataLink(workflow, senderPort, receiverPort);
}
return workflow;
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2c17fa7e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
index 5447e8c..6276278 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
@@ -27,6 +27,10 @@ public abstract class Process {
protected Set<InputPort> inputPorts = new HashSet<>();
protected Set<OutputPort> outputPorts = new HashSet<>();
+ protected Set<InputPort> insideInputPorts = new HashSet<>();
+
+ protected Set<OutputPort> insideOutputPorts = new HashSet<>();
+
public abstract void parse();
@@ -46,4 +50,20 @@ public abstract class Process {
this.outputPorts = outputs;
}
+ public Set<InputPort> getInsideInputPorts() {
+ return insideInputPorts;
+ }
+
+ public void setInsideInputPorts(Set<InputPort> insideInputPorts) {
+ this.insideInputPorts = insideInputPorts;
+ }
+
+ public Set<OutputPort> getInsideOutputPorts() {
+ return insideOutputPorts;
+ }
+
+ public void setInsideOutputPorts(Set<OutputPort> insideOutputPorts) {
+ this.insideOutputPorts = insideOutputPorts;
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2c17fa7e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
index 3a19d3a..263455d 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
@@ -104,6 +104,8 @@ public class WorkflowProcess extends Process {
Process process = step.getRun();
process.setInputPorts(step.getInputs());
process.setOutputPorts(step.getOutputs());
+ insideInputPorts.addAll(step.getInputs());
+ insideOutputPorts.addAll(step.getOutputs());
result.add(process);
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2c17fa7e/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
index 56885b2..a6a803f 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
@@ -19,6 +19,7 @@
package org.apache.taverna.scufl2.cwl;
+import org.apache.taverna.scufl2.api.core.DataLink;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -86,5 +87,10 @@ public class TestConverting {
Processor processor = workflow.getProcessors().iterator().next();
assertEquals(1, processor.getInputPorts().size());
assertEquals(0, processor.getOutputPorts().size());
+
+ assertEquals(1, workflow.getDataLinks().size());
+ DataLink dataLink = workflow.getDataLinks().iterator().next();
+ assertEquals("name", dataLink.getReceivesFrom().getName());
+ assertEquals("text", dataLink.getSendsTo().getName());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2c17fa7e/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/resources/hello_world.cwl b/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
index 4207afa..eee01dd 100644
--- a/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
+++ b/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
@@ -32,6 +32,6 @@ steps:
inputs:
- id: text
- source: "#x/name"
+ source: "name"
outputs: []