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/06 14:46:05 UTC
[01/14] incubator-taverna-language git commit: Parse workflows and
command line tools recursively
Repository: incubator-taverna-language
Updated Branches:
refs/heads/cwlparser afcfd77c5 -> 9cd4b8781
Parse workflows and command line tools recursively
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/70c9d4ad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/70c9d4ad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/70c9d4ad
Branch: refs/heads/cwlparser
Commit: 70c9d4adc1b2568821b20bd1a7a9a3aeb164cf62
Parents: d39a8a2
Author: Majdi Haouech <m....@criteo.com>
Authored: Fri Jun 22 12:17:21 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Wed Jul 11 09:53:08 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLParser.java | 13 +-
.../apache/taverna/scufl2/cwl/Converter.java | 2 +
.../org/apache/taverna/scufl2/cwl/Main.java | 46 ++++
.../taverna/scufl2/cwl/WorkflowParser.java | 8 +-
.../apache/taverna/scufl2/cwl/YAMLHelper.java | 64 ++---
.../scufl2/cwl/components/CommandLineTool.java | 80 +++++++
.../taverna/scufl2/cwl/components/Main.java | 0
.../taverna/scufl2/cwl/components/Process.java | 36 +++
.../scufl2/cwl/components/ProcessFactory.java | 65 ++++++
.../scufl2/cwl/components/Reference.java | 43 ++++
.../taverna/scufl2/cwl/components/Step.java | 6 +-
.../scufl2/cwl/components/WorkflowProcess.java | 232 +++++++++++++++++++
.../src/main/resources/hello_world.cwl | 37 +++
.../main/resources/workflow_with_command.cwl | 45 ++++
.../apache/taverna/scufl2/cwl/TestParser.java | 9 -
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 99 ++++++++
.../src/test/resources/hello_world.cwl | 3 +-
17 files changed, 737 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
index 5a4d6cf..382208d 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
@@ -51,7 +51,7 @@ public class CWLParser {
Map<String, Integer> inputDepths = yamlHelper.processInputDepths(cwlFile);
if(inputs == null || inputDepths == null) {
- return null;
+ return new HashSet<PortDetail>();
}
Set<PortDetail> result = new HashSet<PortDetail>();
for(String id: inputs.keySet()) {
@@ -66,14 +66,15 @@ public class CWLParser {
}
public Set<PortDetail> parseOutputs() {
- Map<String, PortDetail> inputs = yamlHelper.processOutputDetails(cwlFile);
+ Map<String, PortDetail> outputs = yamlHelper.processOutputDetails(cwlFile);
- if(inputs == null) {
- return null;
+ if(outputs == null) {
+ return new HashSet<PortDetail>();
}
Set<PortDetail> result = new HashSet<PortDetail>();
- for(String id: inputs.keySet()) {
- PortDetail port = inputs.get(id);
+ for(String id: outputs.keySet()) {
+ PortDetail port = outputs.get(id);
+ port.setId(id);
result.add(port);
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/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 7ddf9de..b607190 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
@@ -20,6 +20,8 @@ package org.apache.taverna.scufl2.cwl;
import java.util.Set;
import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
import org.apache.taverna.scufl2.api.core.Workflow;
import org.apache.taverna.scufl2.api.core.Processor;
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
new file mode 100644
index 0000000..d4fa6b8
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.scufl2.cwl;
+
+import org.yaml.snakeyaml.Yaml;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class Main {
+
+ private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
+ private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
+ private static JsonNode cwlFile;
+
+ public static void main(String[] args) {
+
+ Yaml reader = new Yaml();
+ ObjectMapper mapper = new ObjectMapper();
+ cwlFile = mapper.valueToTree(reader.load(Main.class.getResourceAsStream(WORKFLOW_WITH_COMMAND)));
+ System.out.println(cwlFile);
+
+ Process workflow = ProcessFactory.createProcess(cwlFile);
+ workflow.parse();
+ Converter converter = new Converter();
+ JsonNode node = converter.convertWorkflowProcessToJsonNode((WorkflowProcess) workflow);
+ System.out.println("NODE");
+ System.out.println(node);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
index 0b6c095..b18dc54 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
@@ -43,6 +43,7 @@ import org.apache.taverna.scufl2.api.port.InputProcessorPort;
import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
import org.apache.taverna.scufl2.api.port.SenderPort;
import org.apache.taverna.scufl2.api.port.ReceiverPort;
+
import org.apache.taverna.scufl2.api.container.WorkflowBundle;
import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
@@ -67,6 +68,12 @@ public class WorkflowParser {
JsonNode cwlFile = mapper.valueToTree(reader.load(WorkflowParser.class.getResourceAsStream(FILE_NAME)));
this.cwlParser = new CWLParser(cwlFile);
this.converter = new Converter();
+ workflowInputs = new HashMap<>();
+ workflowOutputs = new HashMap<>();
+ workflowProcessors = new HashMap<>();
+ processorInputs = new HashMap<>();
+ processorOutputs = new HashMap<>();
+ dataLinks = new HashSet<DataLink>();
}
public WorkflowParser(JsonNode cwlFile) {
@@ -144,7 +151,6 @@ public class WorkflowParser {
Processor processor = converter.convertStepToProcessor(step);
workflowProcessors.put(step.getId(), processor);
- DataLink datalink = new DataLink();
for(StepInput stepInput: step.getInputs()) {
InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getId());
processorInputs.put(stepInput.getId(), processorPort);
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
index dacdc4f..c9b10dc 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
@@ -108,42 +108,44 @@ public class YAMLHelper {
public Set<Step> processSteps(JsonNode file) {
Set<Step> result = new HashSet<>();
- if(file == null) {
+ if(file == null || !file.has(STEPS)) {
return result;
}
- if(file.has(STEPS)) {
- JsonNode steps = file.get(STEPS);
- if(steps.isArray()) {
- for (JsonNode stepNode : steps) {
- Step step = new Step();
- String id = stepNode.get(ID).asText();
+ JsonNode steps = file.get(STEPS);
+ if(steps.isArray()) {
+ for (JsonNode stepNode : steps) {
+ Step step = new Step();
+ String id = stepNode.get(ID).asText();
+
+ JsonNode runNode = stepNode.get(RUN);
+ Process run = ProcessFactory.createProcess(runNode);
+ run.parse(); // Recursively parse nested process
+ Set<StepInput> inputs = processStepInput(stepNode.get(INPUTS));
+ step.setId(id);
+ step.setRun(run);
+ step.setInputs(inputs);
+ result.add(step);
+ }
+ } else if(steps.isObject()) {
+ Iterator<Entry<String, JsonNode>> iterator = steps.fields();
+ while(iterator.hasNext()) {
+ Entry<String, JsonNode> entry = iterator.next();
+ Step step = new Step();
- String run = stepNode.get(RUN).asText();
- Set<StepInput> inputs = processStepInput(stepNode.get(INPUTS));
- step.setId(id);
+ String id = entry.getKey();
+ JsonNode value = entry.getValue();
+ if(value.has(RUN)) {
+ JsonNode runNode = value.get(RUN);
+ Process run = ProcessFactory.createProcess(runNode);
+ run.parse();
step.setRun(run);
- step.setInputs(inputs);
- result.add(step);
}
- } else if(steps.isObject()) {
- Iterator<Entry<String, JsonNode>> iterator = steps.fields();
- while(iterator.hasNext()) {
- Entry<String, JsonNode> entry = iterator.next();
- Step step = new Step();
-
- String id = entry.getKey();
- JsonNode value = entry.getValue();
- if(value.has(RUN)) {
- String run = entry.getValue().get(RUN).asText();
- step.setRun(run);
- }
- Set<StepInput> inputs = processStepInput(value.get(INPUTS));
- step.setId(id);
- step.setInputs(inputs);
+ Set<StepInput> inputs = processStepInput(value.get(INPUTS));
+ step.setId(id);
+ step.setInputs(inputs);
- result.add(step);
- }
+ result.add(step);
}
}
@@ -156,7 +158,7 @@ public class YAMLHelper {
if(inputs == null) {
return result;
}
- if (inputs.getClass() == ArrayNode.class) {
+ if (inputs.isArray()) {
for (JsonNode input : inputs) {
String id = input.get(ID).asText();
@@ -164,7 +166,7 @@ public class YAMLHelper {
result.add(new StepInput(id, source));
}
- } else if (inputs.getClass() == ObjectNode.class) {
+ } else if (inputs.isObject()) {
Iterator<Entry<String, JsonNode>> iterator = inputs.fields();
while (iterator.hasNext()) {
Entry<String, JsonNode> entry = iterator.next();
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
new file mode 100644
index 0000000..d05d38a
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+import java.util.Set;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
+
+public class CommandLineTool implements Process {
+
+ private final static String BASE_COMMAND = "baseCommand";
+ private final static String ID = "id";
+ private final static String INPUT_BINDINDGS = "inputBinding";
+
+ private CWLParser cwlParser;
+
+ private JsonNode node;
+
+ private String baseCommand = null;
+ private Map<String, InputProcessorPort> processorInputs;
+ private Map<String, OutputProcessorPort> processorOutputs;
+
+ public CommandLineTool(JsonNode node) {
+ this.node = node;
+ this.cwlParser = new CWLParser(node);
+ this.processorInputs = new HashMap<>();
+ this.processorOutputs = new HashMap<>();
+ this.parse();
+ this.receiverPorts = new HashSet(processorInputs.values());
+ this.senderPorts = new HashSet(processorOutputs.values());
+ }
+
+ public void parse() {
+ baseCommand = node.get(BASE_COMMAND).asText();
+ parseInputs();
+ parseOutputs();
+ }
+
+ public void parseInputs() {
+ Set<PortDetail> cwlInputs = cwlParser.parseInputs();
+ for(PortDetail detail: cwlInputs) {
+ String portId = detail.getId();
+ InputProcessorPort port = new InputProcessorPort();
+ port.setName(portId);
+ processorInputs.put(portId, port);
+ }
+ }
+
+ public void parseOutputs() {
+ Set<PortDetail> cwlOutputs = cwlParser.parseOutputs();
+ for(PortDetail detail: cwlOutputs) {
+ String portId = detail.getId();
+ OutputProcessorPort port = new OutputProcessorPort();
+ port.setName(portId);
+ processorOutputs.put(portId, port);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/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
new file mode 100644
index 0000000..342864a
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Process.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.HashSet;
+import org.apache.taverna.scufl2.api.port.SenderPort;
+import org.apache.taverna.scufl2.api.port.ReceiverPort;
+
+public interface Process {
+
+ Set<ReceiverPort> receiverPorts;
+ Set<SenderPort> senderPorts;
+
+ public void parse();
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/ProcessFactory.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/ProcessFactory.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/ProcessFactory.java
new file mode 100644
index 0000000..301d417
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/ProcessFactory.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class ProcessFactory {
+
+ private final static String RUN = "run";
+ private final static String CLASS = "class";
+
+ public static Process createProcess(JsonNode node) {
+
+ Process process = null;
+
+ if(node.isValueNode()) {
+ return new Reference(node.asText());
+ }
+
+ JsonNode className = node.get(CLASS);
+ if(className != null) {
+ if(className.asText().equals("Workflow")) {
+ process = new WorkflowProcess(node);
+ } else if(className.asText().equals("CommandLineTool")) {
+ process = new CommandLineTool(node);
+ }
+ } else {
+ JsonNode runNode = node.get(RUN);
+ if(runNode.isValueNode()) {
+ process = new Reference(runNode.asText());
+ } else {
+ String runClass = runNode.get(CLASS).asText();
+ switch(runClass) {
+ case "CommandLineTool":
+ process = new CommandLineTool(runNode);
+ break;
+ case "Workflow":
+ process = new WorkflowProcess(runNode);
+ break;
+ }
+ }
+ }
+
+
+ return process;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
new file mode 100644
index 0000000..7a25744
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class Reference implements Process {
+
+ private String source;
+
+ public Reference() {
+ source = "";
+ }
+
+ public Reference(String src) {
+ this.source = src;
+ }
+
+ public void parse() {
+ // TODO: read source file and parse nested workflow
+ }
+
+ public String toString() {
+ return source;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
index 3f3d653..cdcd46e 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
@@ -28,7 +28,7 @@ public class Step {
private String id;
- private String run;
+ private Process run;
private Set<StepInput> inputs;
private Set<StepOutput> outputs;
@@ -46,11 +46,11 @@ public class Step {
this.id = id;
}
- public String getRun() {
+ public Process getRun() {
return run;
}
- public void setRun(String run) {
+ public void setRun(Process run) {
this.run = run;
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/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
new file mode 100644
index 0000000..c56cbb5
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+
+
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
+import org.apache.taverna.scufl2.api.port.SenderPort;
+import org.apache.taverna.scufl2.api.port.ReceiverPort;
+
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class WorkflowProcess implements Process {
+
+ private CWLParser cwlParser;
+
+ private Map<String, InputWorkflowPort> workflowInputs;
+ private Map<String, OutputWorkflowPort> workflowOutputs;
+ private Map<String, Processor> workflowProcessors;
+ private Map<String, InputProcessorPort> processorInputs;
+ private Map<String, OutputProcessorPort> processorOutputs;
+ private Set<DataLink> dataLinks;
+
+ private Converter converter;
+
+ public WorkflowProcess(JsonNode node) {
+ cwlParser = new CWLParser(node);
+ converter = new Converter();
+ workflowInputs = new HashMap<>();
+ workflowOutputs = new HashMap<>();
+ workflowProcessors = new HashMap<>();
+ processorInputs = new HashMap<>();
+ processorOutputs = new HashMap<>();
+ dataLinks = new HashSet<>();
+ this.parse();
+ this.receiverPorts = new HashSet(workflowInputs.values());
+ this.senderPorts = new HashSet(workflowOutputs.values());
+ }
+
+ public void parse() {
+ parseInputs();
+ parseOutputs();
+ Set<Step> cwlSteps = cwlParser.parseSteps();
+ parseProcessors(cwlSteps);
+ parseDataLinks(cwlSteps);
+
+ Workflow workflow = new Workflow();
+ Set<InputWorkflowPort> inputs = new HashSet<>(workflowInputs.values());
+ Set<OutputWorkflowPort> outputs = new HashSet<>(workflowOutputs.values());
+ Set<Processor> processors = new HashSet<>(workflowProcessors.values());
+
+ workflow.setInputPorts(inputs);
+ workflow.setOutputPorts(outputs);
+ workflow.setProcessors(processors);
+ workflow.setDataLinks(dataLinks);
+
+// System.out.println(workflow);
+// writeWorkflowToFile(workflow);
+//
+// System.out.println("DEBUG WORKFLOW");
+// System.out.println(workflow.getInputPorts());
+// System.out.println(workflow.getOutputPorts());
+// System.out.println(workflow.getProcessors());
+
+ }
+
+ public void writeWorkflowToFile(Workflow workflow) {
+ try {
+ WorkflowBundleIO io = new WorkflowBundleIO();
+ File scufl2File = new File("workflow.wfbundle");
+ WorkflowBundle bundle = io.createBundle();
+ Set<Workflow> workflowSet = new HashSet<>();
+ workflowSet.add(workflow);
+ bundle.setWorkflows(workflowSet);
+ bundle.setMainWorkflow(workflow);
+ io.writeBundle(bundle, scufl2File, "text/vnd.taverna.scufl2.structure");
+ } catch(WriterException e) {
+ System.out.println("Exception writing the workflow bundle");
+ } catch(IOException e) {
+ System.out.println("IOException");
+ }
+ }
+
+ public void parseInputs() {
+ Set<PortDetail> cwlInputs = cwlParser.parseInputs();
+ for (PortDetail port: cwlInputs) {
+ String portId = port.getId();
+ InputWorkflowPort workflowPort = converter.convertInputWorkflowPort(port);
+ workflowInputs.put(portId, workflowPort);
+ }
+ }
+
+ public void parseOutputs() {
+ Set<PortDetail> cwlOutputs = cwlParser.parseOutputs();
+ for(PortDetail port: cwlOutputs) {
+ String portId = port.getId();
+ OutputWorkflowPort workflowPort = converter.convertOutputWorkflowPort(port);
+ workflowOutputs.put(portId, workflowPort);
+ }
+ }
+
+ public void parseProcessors(Set<Step> cwlSteps) {
+ for(Step step: cwlSteps) {
+
+ Processor processor = converter.convertStepToProcessor(step);
+ workflowProcessors.put(step.getId(), processor);
+
+ // TODO: Add only receiver and sender ports from the Process interface
+ for(StepInput stepInput: step.getInputs()) {
+ InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getId());
+ processorInputs.put(stepInput.getId(), processorPort);
+ }
+ for(StepOutput stepOutput: step.getOutputs()) {
+ OutputProcessorPort processorPort = new OutputProcessorPort(processor, stepOutput.getId());
+ processorOutputs.put(stepOutput.getId(), processorPort);
+ }
+ }
+ }
+
+ public void parseDataLinks(Set<Step> cwlSteps) {
+ for(Step step: cwlSteps) {
+ for(StepInput stepInput: step.getInputs()) {
+ String[] sourcePath = stepInput.getSource().split("/");
+ String source = sourcePath[sourcePath.length-1];
+ source = source.replace("#", "");
+
+ DataLink dataLink = new DataLink();
+ SenderPort sender = workflowInputs.get(source);
+ if(sender == null) {
+ sender = processorOutputs.get(source);
+ }
+ if(sender == null) {
+ throw new NullPointerException("Cannot find sender port with name: " + source);
+ }
+ String receiverId = stepInput.getId();
+ ReceiverPort receiver = workflowOutputs.get(receiverId);
+ if(receiver == null) {
+ receiver = processorInputs.get(receiverId);
+ }
+ if(receiver == null) {
+ throw new NullPointerException("Cannot find receiver port with name: " + receiverId);
+ }
+ dataLink.setSendsTo(receiver);
+ dataLink.setReceivesFrom(sender);
+ dataLinks.add(dataLink);
+ }
+ }
+ }
+
+ public Map<String, InputWorkflowPort> getWorkflowInputs() {
+ return workflowInputs;
+ }
+
+ public void setWorkflowInputs(Map<String, InputWorkflowPort> workflowInputs) {
+ this.workflowInputs = workflowInputs;
+ }
+
+ public Map<String, OutputWorkflowPort> getWorkflowOutputs() {
+ return workflowOutputs;
+ }
+
+ public void setWorkflowOutputs(Map<String, OutputWorkflowPort> workflowOutputs) {
+ this.workflowOutputs = workflowOutputs;
+ }
+
+ public Map<String, Processor> getWorkflowProcessors() {
+ return workflowProcessors;
+ }
+
+ public void setWorkflowProcessors(Map<String, Processor> workflowProcessors) {
+ this.workflowProcessors = workflowProcessors;
+ }
+
+ public Map<String, InputProcessorPort> getProcessorInputs() {
+ return processorInputs;
+ }
+
+ public void setProcessorInputs(Map<String, InputProcessorPort> processorInputs) {
+ this.processorInputs = processorInputs;
+ }
+
+ public Map<String, OutputProcessorPort> getProcessorOutputs() {
+ return processorOutputs;
+ }
+
+ public void setProcessorOutputs(Map<String, OutputProcessorPort> processorOutputs) {
+ this.processorOutputs = processorOutputs;
+ }
+
+ public Set<DataLink> getDataLinks() {
+ return dataLinks;
+ }
+
+ public void setDataLinks(Set<DataLink> dataLinks) {
+ this.dataLinks = dataLinks;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/resources/hello_world.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/resources/hello_world.cwl b/taverna-scufl2-cwl/src/main/resources/hello_world.cwl
new file mode 100644
index 0000000..4207afa
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/resources/hello_world.cwl
@@ -0,0 +1,37 @@
+#!/usr/bin/env cwl-runner
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+cwlVersion: v1.0
+class: Workflow
+
+inputs:
+ name: string
+
+outputs:
+ output1: string
+
+steps:
+ step1:
+ run: example.cwl
+
+ inputs:
+ - id: text
+ source: "#x/name"
+
+ outputs: []
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl b/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
new file mode 100644
index 0000000..e640ecc
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
@@ -0,0 +1,45 @@
+#!/usr/bin/env cwl-runner
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+cwlVersion: v1.0
+class: Workflow
+
+inputs:
+ name: string
+
+outputs: []
+
+steps:
+ step1:
+ run:
+ class: CommandLineTool
+ baseCommand: echo
+ inputs:
+ message:
+ type: string
+
+ inputBinding:
+ position: 1
+ outputs: []
+
+ inputs:
+ - id: text
+ source: "#x/name"
+
+ outputs: []
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestParser.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestParser.java
index 4e3e69e..20c494c 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestParser.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestParser.java
@@ -77,15 +77,6 @@ public class TestParser {
}
@Test
- public void testParseOutputs() throws Exception {
-
- NamedSet<OutputWorkflowPort> workflowOutputs = workflow.getOutputPorts();
- NamedSet<OutputWorkflowPort> expectedOutputs = new NamedSet<>();
-
- assertEquals(expectedOutputs, workflowOutputs);
- }
-
- @Test
public void testParseProcessors() throws Exception {
workflow.setParent(null);
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
new file mode 100644
index 0000000..015ded4
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.scufl2.cwl;
+
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+import org.yaml.snakeyaml.Yaml;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.DataLink;
+
+import org.apache.taverna.scufl2.api.common.NamedSet;
+
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+
+
+public class TestWorkflowProcess {
+ private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
+ private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
+
+ private static JsonNode cwlFile;
+
+ public JsonNode loadYamlFile(String filename) {
+
+ Yaml reader = new Yaml();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode node = mapper.valueToTree(reader.load(TestWorkflowProcess.class.getResourceAsStream(filename)));
+
+ return node;
+ }
+
+ @Test
+ public void testWorkflowInputs() {
+ cwlFile = loadYamlFile(HELLO_WORLD_CWL);
+ WorkflowProcess workflow = new WorkflowProcess(cwlFile);
+ workflow.parseInputs();
+
+ Map<String, InputWorkflowPort> expected = new HashMap<>();
+ InputWorkflowPort expectedInput = new InputWorkflowPort();
+ expectedInput.setName("name");
+ expected.put("name", expectedInput);
+
+ assertEquals(expected, workflow.getWorkflowInputs());
+ }
+
+ @Test
+ public void testWorkflowOutputs() {
+ cwlFile = loadYamlFile(HELLO_WORLD_CWL);
+ WorkflowProcess workflow = new WorkflowProcess(cwlFile);
+ workflow.parseOutputs();
+
+ Map<String, OutputWorkflowPort> expected = new HashMap<>();
+ OutputWorkflowPort expectedOutput = new OutputWorkflowPort();
+ expectedOutput.setName("output1");
+ expected.put("output1", expectedOutput);
+
+ assertEquals(expected, workflow.getWorkflowOutputs());
+ }
+
+ @Test
+ public void testWorkflowSteps() {
+ cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
+ WorkflowProcess workflow = new WorkflowProcess(cwlFile);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/70c9d4ad/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 2172578..4207afa 100644
--- a/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
+++ b/taverna-scufl2-cwl/src/test/resources/hello_world.cwl
@@ -23,7 +23,8 @@ class: Workflow
inputs:
name: string
-outputs: []
+outputs:
+ output1: string
steps:
step1:
[07/14] incubator-taverna-language git commit: Revert "Parse
workflows and command line tools recursively"
Posted by st...@apache.org.
Revert "Parse workflows and command line tools recursively"
This reverts commit b56f451d2e5accb6ab602ec1155e17db6e969eaf.
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/e27be561
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/e27be561
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/e27be561
Branch: refs/heads/cwlparser
Commit: e27be561fa2414c2afaffde5561cde6173bc2a74
Parents: a4e79d4
Author: Majdi Haouech <m....@criteo.com>
Authored: Wed Jul 25 15:30:08 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Wed Jul 25 15:39:49 2018 +0200
----------------------------------------------------------------------
.../main/resources/workflow_with_command.cwl | 45 -------------------
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 44 +++++++++---------
.../test/resources/workflow_with_command.cwl | 45 +++++++++++++++++++
taverna-scufl2-cwl/taverna-scufl2-cwl.iml | 11 -----
taverna-scufl2-cwl/workflow.t2flow.txt | 10 -----
.../workflow.vnd.taverna.scufl2.structure.txt | Bin 2574 -> 0 bytes
taverna-scufl2-cwl/workflow.wfbundle | 10 -----
7 files changed, 69 insertions(+), 96 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl b/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
deleted file mode 100644
index e640ecc..0000000
--- a/taverna-scufl2-cwl/src/main/resources/workflow_with_command.cwl
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env cwl-runner
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-cwlVersion: v1.0
-class: Workflow
-
-inputs:
- name: string
-
-outputs: []
-
-steps:
- step1:
- run:
- class: CommandLineTool
- baseCommand: echo
- inputs:
- message:
- type: string
-
- inputBinding:
- position: 1
- outputs: []
-
- inputs:
- - id: text
- source: "#x/name"
-
- outputs: []
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
index 97d944f..fc386ac 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
@@ -18,47 +18,35 @@
*/
package org.apache.taverna.scufl2.cwl;
-<<<<<<< HEAD
-=======
import java.io.File;
import java.io.IOException;
->>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.HashMap;
-import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.yaml.snakeyaml.Yaml;
-import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.DataLink;
+import com.fasterxml.jackson.core.JsonProcessingException;
-import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.core.Workflow;
import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-<<<<<<< HEAD
-=======
import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
import org.apache.taverna.scufl2.api.io.WriterException;
import org.apache.taverna.scufl2.api.container.WorkflowBundle;
->>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
-
public class TestWorkflowProcess {
private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
@@ -105,15 +93,32 @@ public class TestWorkflowProcess {
@Test
public void testWorkflowSteps() {
cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
-<<<<<<< HEAD
- WorkflowProcess workflow = new WorkflowProcess(cwlFile);
-
-=======
Process workflow = ProcessFactory.createProcess(cwlFile);
assert(workflow instanceof WorkflowProcess);
}
+ @Test
+ public void testConvertWorkflowProcess() {
+ cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
+
+ Process workflow = ProcessFactory.createProcess(cwlFile);
+ workflow.parse();
+ Converter converter = new Converter();
+ JsonNode node = converter.convertWorkflowProcessToJsonNode((WorkflowProcess) workflow);
+ printAsYaml(node);
+ }
+
+ private static void printAsYaml(JsonNode node) {
+ try {
+ String yaml = new YAMLMapper().writeValueAsString(node);
+ System.out.println("YAML DATA");
+ System.out.println(yaml);
+ } catch (JsonProcessingException e) {
+ System.err.println("Error writing JsonNode to YAML");
+ }
+ }
+
public void writeWorkflowToFile(Workflow workflow) {
try {
WorkflowBundleIO io = new WorkflowBundleIO();
@@ -129,7 +134,6 @@ public class TestWorkflowProcess {
} catch(IOException e) {
System.out.println("IOException");
}
->>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
}
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/src/test/resources/workflow_with_command.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/resources/workflow_with_command.cwl b/taverna-scufl2-cwl/src/test/resources/workflow_with_command.cwl
new file mode 100644
index 0000000..e640ecc
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/resources/workflow_with_command.cwl
@@ -0,0 +1,45 @@
+#!/usr/bin/env cwl-runner
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+cwlVersion: v1.0
+class: Workflow
+
+inputs:
+ name: string
+
+outputs: []
+
+steps:
+ step1:
+ run:
+ class: CommandLineTool
+ baseCommand: echo
+ inputs:
+ message:
+ type: string
+
+ inputBinding:
+ position: 1
+ outputs: []
+
+ inputs:
+ - id: text
+ source: "#x/name"
+
+ outputs: []
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/taverna-scufl2-cwl.iml b/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
deleted file mode 100644
index 788bb17..0000000
--- a/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
- <component name="NewModuleRootManager" inherit-compiler-output="true">
- <exclude-output />
- <content url="file://$MODULE_DIR$">
- <sourceFolder url="file://$MODULE_DIR$/src2" isTestSource="false" />
- </content>
- <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
- <orderEntry type="sourceFolder" forTests="false" />
- </component>
-</module>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/workflow.t2flow.txt
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.t2flow.txt b/taverna-scufl2-cwl/workflow.t2flow.txt
deleted file mode 100644
index 59ce3fb..0000000
--- a/taverna-scufl2-cwl/workflow.t2flow.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-WorkflowBundle 'bundle1'
- MainWorkflow 'cdba0a80-366b-4f66-8f26-85e882d41eed'
- Workflow 'cdba0a80-366b-4f66-8f26-85e882d41eed'
- In 'name'
- Processor 'step1'
- In 'text'
- Links
- 'name' -> 'step1:text'
- MainProfile 'profile1'
- Profile 'profile1'
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt b/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt
deleted file mode 100644
index e8b6430..0000000
Binary files a/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e27be561/taverna-scufl2-cwl/workflow.wfbundle
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.wfbundle b/taverna-scufl2-cwl/workflow.wfbundle
deleted file mode 100644
index e2c6d40..0000000
--- a/taverna-scufl2-cwl/workflow.wfbundle
+++ /dev/null
@@ -1,10 +0,0 @@
-WorkflowBundle 'bundle1'
- MainWorkflow '6ce2e3b6-39b1-4773-8aee-e74cccb7ca7d'
- Workflow '6ce2e3b6-39b1-4773-8aee-e74cccb7ca7d'
- In 'name'
- Processor 'step1'
- In 'text'
- Links
- 'name' -> 'step1:text'
- MainProfile 'profile1'
- Profile 'profile1'
[12/14] incubator-taverna-language git commit: Create input/output
port adapted to all step types (workflow or other)
Posted by st...@apache.org.
Create input/output port adapted to all step types (workflow or other)
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/ba5ea1b6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/ba5ea1b6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/ba5ea1b6
Branch: refs/heads/cwlparser
Commit: ba5ea1b6ea02cac618d145b52b2523a63546d8be
Parents: 38d1fad
Author: Majdi Haouech <m....@criteo.com>
Authored: Sun Aug 5 20:09:40 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sun Aug 5 20:11:14 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/Converter.java | 12 ++---
.../taverna/scufl2/cwl/WorkflowParser.java | 18 +++----
.../apache/taverna/scufl2/cwl/YAMLHelper.java | 12 ++---
.../scufl2/cwl/components/CommandLineTool.java | 2 +-
.../scufl2/cwl/components/InputPort.java | 53 +++++++++++++++++++
.../scufl2/cwl/components/OutputPort.java | 41 +++++++++++++++
.../taverna/scufl2/cwl/components/Process.java | 30 ++++++++---
.../scufl2/cwl/components/Reference.java | 2 +-
.../taverna/scufl2/cwl/components/Step.java | 20 ++++----
.../scufl2/cwl/components/StepInput.java | 54 --------------------
.../scufl2/cwl/components/StepOutput.java | 41 ---------------
.../scufl2/cwl/components/WorkflowProcess.java | 6 +--
12 files changed, 153 insertions(+), 138 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/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 086d9dd..6bfe77d 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
@@ -63,17 +63,17 @@ public class Converter {
Processor processor = new Processor(null, step.getId());
// Convert input ports
Set<InputProcessorPort> processorInputs = new HashSet<>();
- Set<StepInput> inputs = step.getInputs();
- for(StepInput input: inputs) {
- InputProcessorPort port = new InputProcessorPort(processor, input.getId());
+ Set<InputPort> inputs = step.getInputs();
+ for(InputPort input: inputs) {
+ InputProcessorPort port = new InputProcessorPort(processor, input.getName());
processorInputs.add(port);
}
processor.setInputPorts(processorInputs);
// Convert output ports
Set<OutputProcessorPort> processorOutputs = new HashSet<>();
- Set<StepOutput> outputs = step.getOutputs();
- for(StepOutput output: outputs) {
- OutputProcessorPort port = new OutputProcessorPort(processor, output.getId());
+ Set<OutputPort> outputs = step.getOutputs();
+ for(OutputPort output: outputs) {
+ OutputProcessorPort port = new OutputProcessorPort(processor, output.getName());
processorOutputs.add(port);
}
processor.setOutputPorts(processorOutputs);
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
index b66991c..2680bf4 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
@@ -78,7 +78,7 @@ public class WorkflowParser {
parseOutputs();
Set<Step> cwlSteps = cwlParser.parseSteps();
parseProcessors(cwlSteps);
- parseDataLinks(cwlSteps);
+// parseDataLinks(cwlSteps);
Workflow workflow = new Workflow();
Set<InputWorkflowPort> inputs = new HashSet<>(workflowInputs.values());
@@ -137,20 +137,20 @@ public class WorkflowParser {
Processor processor = converter.convertStepToProcessor(step);
workflowProcessors.put(step.getId(), processor);
- for(StepInput stepInput: step.getInputs()) {
- InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getId());
- processorInputs.put(stepInput.getId(), processorPort);
+ for(InputPort stepInput: step.getInputs()) {
+ InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getName());
+ processorInputs.put(stepInput.getName(), processorPort);
}
- for(StepOutput stepOutput: step.getOutputs()) {
- OutputProcessorPort processorPort = new OutputProcessorPort(processor, stepOutput.getId());
- processorOutputs.put(stepOutput.getId(), processorPort);
+ for(OutputPort stepOutput: step.getOutputs()) {
+ OutputProcessorPort processorPort = new OutputProcessorPort(processor, stepOutput.getName());
+ processorOutputs.put(stepOutput.getName(), processorPort);
}
}
}
public void parseDataLinks(Set<Step> cwlSteps) {
for(Step step: cwlSteps) {
- for(StepInput stepInput: step.getInputs()) {
+ for(InputPort stepInput: step.getInputs()) {
String[] sourcePath = stepInput.getSource().split("/");
String source = sourcePath[sourcePath.length-1];
source = source.replace("#", "");
@@ -163,7 +163,7 @@ public class WorkflowParser {
if(sender == null) {
throw new NullPointerException("Cannot find sender port with name: " + source);
}
- String receiverId = stepInput.getId();
+ String receiverId = stepInput.getName();
ReceiverPort receiver = workflowOutputs.get(receiverId);
if(receiver == null) {
receiver = processorInputs.get(receiverId);
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
index c9b10dc..1b016f8 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
@@ -121,7 +121,7 @@ public class YAMLHelper {
JsonNode runNode = stepNode.get(RUN);
Process run = ProcessFactory.createProcess(runNode);
run.parse(); // Recursively parse nested process
- Set<StepInput> inputs = processStepInput(stepNode.get(INPUTS));
+ Set<InputPort> inputs = processStepInput(stepNode.get(INPUTS));
step.setId(id);
step.setRun(run);
step.setInputs(inputs);
@@ -141,7 +141,7 @@ public class YAMLHelper {
run.parse();
step.setRun(run);
}
- Set<StepInput> inputs = processStepInput(value.get(INPUTS));
+ Set<InputPort> inputs = processStepInput(value.get(INPUTS));
step.setId(id);
step.setInputs(inputs);
@@ -152,9 +152,9 @@ public class YAMLHelper {
return result;
}
- private Set<StepInput> processStepInput(JsonNode inputs) {
+ private Set<InputPort> processStepInput(JsonNode inputs) {
- Set<StepInput> result = new HashSet<>();
+ Set<InputPort> result = new HashSet<>();
if(inputs == null) {
return result;
}
@@ -164,7 +164,7 @@ public class YAMLHelper {
String id = input.get(ID).asText();
String source = input.get(SOURCE).asText();
- result.add(new StepInput(id, source));
+ result.add(new InputPort(id, source));
}
} else if (inputs.isObject()) {
Iterator<Entry<String, JsonNode>> iterator = inputs.fields();
@@ -174,7 +174,7 @@ public class YAMLHelper {
String id = entry.getKey();
String source = entry.getValue().get(SOURCE).asText();
- result.add(new StepInput(id, source));
+ result.add(new InputPort(id, source));
}
}
return result;
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
index 70d9098..dc5e16d 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-public class CommandLineTool implements Process {
+public class CommandLineTool extends Process {
private final static String BASE_COMMAND = "baseCommand";
private final static String ID = "id";
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/InputPort.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/InputPort.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/InputPort.java
new file mode 100644
index 0000000..1d1522d
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/InputPort.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+public class InputPort {
+
+ private String name;
+
+ private String source;
+
+ public InputPort() {
+ this.name = "";
+ this.source = "";
+ }
+
+ public InputPort(String name, String source) {
+ this.name = name;
+ this.source = source;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSource() {
+ return source;
+ }
+
+ public void setSource(String source) {
+ this.source = source;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/OutputPort.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/OutputPort.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/OutputPort.java
new file mode 100644
index 0000000..c865e9c
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/OutputPort.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.taverna.scufl2.cwl;
+
+public class OutputPort {
+
+ private String name;
+
+ public OutputPort() {
+ this.name = "";
+ }
+
+ public OutputPort(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/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 70e3669..991df0a 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
@@ -19,15 +19,31 @@
package org.apache.taverna.scufl2.cwl;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
import java.util.HashSet;
-import org.apache.taverna.scufl2.api.port.SenderPort;
-import org.apache.taverna.scufl2.api.port.ReceiverPort;
+import java.util.Set;
+
+public abstract class Process {
+
+ private Set<InputPort> inputPorts = new HashSet<>();
+ private Set<OutputPort> outputPorts = new HashSet<>();
+
+
+ public abstract void parse();
+
+ public Set<InputPort> getInputPorts() {
+ return this.inputPorts;
+ }
+
+ public void setInputPorts(Set<InputPort> inputs) {
+ this.inputPorts = inputs;
+ }
-public interface Process {
+ public Set<OutputPort> getOutputPorts() {
+ return this.outputPorts;
+ }
- public void parse();
+ public void setOutputPorts(Set<OutputPort> outputs) {
+ this.outputPorts = outputs;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
index 193e1a6..9d5d0c0 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
@@ -21,7 +21,7 @@ package org.apache.taverna.scufl2.cwl;
import com.fasterxml.jackson.databind.JsonNode;
-public class Reference implements Process {
+public class Reference extends Process {
private String source;
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
index cdcd46e..80ccf03 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Step.java
@@ -30,8 +30,8 @@ public class Step {
private String id;
private Process run;
- private Set<StepInput> inputs;
- private Set<StepOutput> outputs;
+ private Set<InputPort> inputs;
+ private Set<OutputPort> outputs;
public Step() {
inputs = new HashSet<>();
@@ -54,27 +54,27 @@ public class Step {
this.run = run;
}
- public void addInput(String id, String source) {
- inputs.add(new StepInput(id, source));
+ public void addInput(String name, String source) {
+ inputs.add(new InputPort(name, source));
}
- public void setInputs(Set<StepInput> inputs) {
+ public void setInputs(Set<InputPort> inputs) {
this.inputs = inputs;
}
- public Set<StepInput> getInputs() {
+ public Set<InputPort> getInputs() {
return inputs;
}
- public void addOutput(String id) {
- outputs.add(new StepOutput(id));
+ public void addOutput(String name) {
+ outputs.add(new OutputPort(name));
}
- public void setOutputs(Set<StepOutput> outputs) {
+ public void setOutputs(Set<OutputPort> outputs) {
this.outputs = outputs;
}
- public Set<StepOutput> getOutputs() {
+ public Set<OutputPort> getOutputs() {
return outputs;
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepInput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepInput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepInput.java
deleted file mode 100644
index 0432272..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepInput.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.taverna.scufl2.cwl;
-
-import java.util.*;
-
-public class StepInput {
-
- private String id;
- private String source;
-
- public StepInput() {
- this.id = null;
- this.source = null;
- }
-
- public StepInput(String id, String source) {
- this.id = id;
- this.source = source;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getId() {
- return id;
- }
-
- public void setSource(String source) {
- this.source = source;
- }
-
- public String getSource() {
- return source;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepOutput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepOutput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepOutput.java
deleted file mode 100644
index 145fa2d..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/StepOutput.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.taverna.scufl2.cwl;
-
-public class StepOutput {
-
- private String id;
-
- public StepOutput() {
- this.id = null;
- }
-
- public StepOutput(String id) {
- this.id = id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getId() {
- return id;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/ba5ea1b6/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 8470434..9f61758 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
@@ -41,7 +41,7 @@ import org.apache.taverna.scufl2.api.port.ReceiverPort;
import com.fasterxml.jackson.databind.JsonNode;
-public class WorkflowProcess implements Process {
+public class WorkflowProcess extends Process {
private CWLParser cwlParser;
@@ -127,7 +127,7 @@ public class WorkflowProcess implements Process {
public void parseDataLinks(Set<Step> cwlSteps) {
for(Step step: cwlSteps) {
- for(StepInput stepInput: step.getInputs()) {
+ for(InputPort stepInput: step.getInputs()) {
String[] sourcePath = stepInput.getSource().split("/");
String source = sourcePath[sourcePath.length-1];
source = source.replace("#", "");
@@ -140,7 +140,7 @@ public class WorkflowProcess implements Process {
if(sender == null) {
throw new NullPointerException("Cannot find sender port with name: " + source);
}
- String receiverId = stepInput.getId();
+ String receiverId = stepInput.getName();
ReceiverPort receiver = workflowOutputs.get(receiverId);
if(receiver == null) {
receiver = processorInputs.get(receiverId);
[11/14] incubator-taverna-language git commit: Add basic cwl
WorkflowBundleReader
Posted by st...@apache.org.
Add basic cwl WorkflowBundleReader
- Support only WorkflowProcess as initial object.
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/38d1fad8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/38d1fad8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/38d1fad8
Branch: refs/heads/cwlparser
Commit: 38d1fad8e936301d893d532600edea3f9c09ed14
Parents: e0ec556
Author: Majdi Haouech <m....@criteo.com>
Authored: Thu Aug 2 04:48:38 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sun Aug 5 14:34:55 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLReader.java | 62 ++++++++++++++++++++
.../scufl2/cwl/components/WorkflowProcess.java | 13 ++++
...e.taverna.scufl2.api.io.WorkflowBundleReader | 1 +
3 files changed, 76 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/38d1fad8/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLReader.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLReader.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLReader.java
new file mode 100644
index 0000000..de9d799
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLReader.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.scufl2.cwl;
+
+import static java.util.Collections.singleton;
+
+import java.io.*;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleReader;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+
+
+public class CWLReader implements WorkflowBundleReader {
+
+ public static final String CWL_TYPE = "text/cwl";
+
+ @Override
+ public Set<String> getMediaTypes() {
+ return singleton(CWL_TYPE);
+ }
+
+ @Override
+ public WorkflowBundle readBundle(File bundleFile, String mediaType) throws ReaderException, IOException {
+ try (BufferedInputStream is = new BufferedInputStream(
+ new FileInputStream(bundleFile))) {
+ Converter converter = new Converter();
+ return converter.buildWorkflowBundle(new WorkflowProcess(is));
+ }
+ }
+
+ @Override
+ public WorkflowBundle readBundle(InputStream inputStream, String mediaType) throws ReaderException, IOException {
+ Converter converter = new Converter();
+ return converter.buildWorkflowBundle(new WorkflowProcess(inputStream));
+ }
+
+ @Override
+ public String guessMediaTypeForSignature(byte[] firstBytes) {
+ if (new String(firstBytes)
+ .contains("cwlVersion"))
+ return CWL_TYPE;
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/38d1fad8/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 1b660dd..8470434 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
@@ -23,7 +23,10 @@ import java.util.Set;
import java.util.HashSet;
import java.util.Map;
import java.util.HashMap;
+import java.io.InputStream;
+import org.yaml.snakeyaml.Yaml;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.taverna.scufl2.api.core.Processor;
import org.apache.taverna.scufl2.api.core.DataLink;
@@ -53,6 +56,16 @@ public class WorkflowProcess implements Process {
private Converter converter = new Converter();
+ public WorkflowProcess(InputStream stream) {
+
+ Yaml reader = new Yaml();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode node = mapper.valueToTree(reader.load(stream));
+
+ cwlParser = new CWLParser(node);
+ this.parse();
+ }
+
public WorkflowProcess(JsonNode node) {
cwlParser = new CWLParser(node);
this.parse();
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/38d1fad8/taverna-scufl2-cwl/src/main/resources/META-INF/services/org.apache.taverna.scufl2.api.io.WorkflowBundleReader
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/resources/META-INF/services/org.apache.taverna.scufl2.api.io.WorkflowBundleReader b/taverna-scufl2-cwl/src/main/resources/META-INF/services/org.apache.taverna.scufl2.api.io.WorkflowBundleReader
new file mode 100644
index 0000000..607d8b7
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/resources/META-INF/services/org.apache.taverna.scufl2.api.io.WorkflowBundleReader
@@ -0,0 +1 @@
+org.apache.taverna.scufl2.cwl.CWLReader
\ No newline at end of file
[06/14] incubator-taverna-language git commit: Fix conflicts and
merge branch 'cwlparser' into cwl
Posted by st...@apache.org.
Fix conflicts and merge branch 'cwlparser' into cwl
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/a4e79d49
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/a4e79d49
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/a4e79d49
Branch: refs/heads/cwlparser
Commit: a4e79d4976213b95fc3461277f7d2eba0d97779a
Parents: b56f451 87fa1c1
Author: Majdi Haouech <m....@criteo.com>
Authored: Mon Jul 16 20:20:22 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Mon Jul 16 20:20:22 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLParser.java | 3 +-
.../taverna/scufl2/cwl/WorkflowParser.java | 28 +++---------
.../scufl2/cwl/components/CommandLineTool.java | 7 ++-
.../scufl2/cwl/components/WorkflowProcess.java | 45 ++++----------------
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 36 ++++++++++++++++
5 files changed, 55 insertions(+), 64 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/a4e79d49/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
----------------------------------------------------------------------
diff --cc taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/WorkflowProcess.java
index b41d054,b8902e7..481c93f
--- 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
@@@ -31,8 -29,6 +31,7 @@@ import org.apache.taverna.scufl2.api.co
import org.apache.taverna.scufl2.api.core.DataLink;
import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
@@@ -85,35 -71,15 +77,14 @@@ public class WorkflowProcess implement
workflow.setInputPorts(inputs);
workflow.setOutputPorts(outputs);
workflow.setProcessors(processors);
-- workflow.setDataLinks(dataLinks);
+
- // System.out.println(workflow);
- // writeWorkflowToFile(workflow);
- //
+
// System.out.println("DEBUG WORKFLOW");
// System.out.println(workflow.getInputPorts());
// System.out.println(workflow.getOutputPorts());
// System.out.println(workflow.getProcessors());
}
-
- public void writeWorkflowToFile(Workflow workflow) {
- try {
- WorkflowBundleIO io = new WorkflowBundleIO();
- File scufl2File = new File("workflow.wfbundle");
- WorkflowBundle bundle = io.createBundle();
- Set<Workflow> workflowSet = new HashSet<>();
- workflowSet.add(workflow);
- bundle.setWorkflows(workflowSet);
- bundle.setMainWorkflow(workflow);
- io.writeBundle(bundle, scufl2File, "text/vnd.taverna.scufl2.structure");
- } catch(WriterException e) {
- System.out.println("Exception writing the workflow bundle");
- } catch(IOException e) {
- System.out.println("IOException");
- }
- }
--
public void parseInputs() {
Set<PortDetail> cwlInputs = cwlParser.parseInputs();
for (PortDetail port: cwlInputs) {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/a4e79d49/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
----------------------------------------------------------------------
diff --cc taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
index 015ded4,10604b1..97d944f
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
@@@ -18,7 -18,8 +18,12 @@@
*/
package org.apache.taverna.scufl2.cwl;
++<<<<<<< HEAD
+
++=======
+ import java.io.File;
+ import java.io.IOException;
++>>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
@@@ -45,6 -46,11 +50,14 @@@ import org.apache.taverna.scufl2.api.po
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
++<<<<<<< HEAD
++=======
+ import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+ import org.apache.taverna.scufl2.api.io.WriterException;
+
+ import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
++>>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
public class TestWorkflowProcess {
private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
@@@ -92,8 -98,26 +105,31 @@@
@Test
public void testWorkflowSteps() {
cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
++<<<<<<< HEAD
+ WorkflowProcess workflow = new WorkflowProcess(cwlFile);
+
++=======
+ Process workflow = ProcessFactory.createProcess(cwlFile);
+
+ assert(workflow instanceof WorkflowProcess);
+ }
+
+ public void writeWorkflowToFile(Workflow workflow) {
+ try {
+ WorkflowBundleIO io = new WorkflowBundleIO();
+ File scufl2File = new File("workflow.wfbundle");
+ WorkflowBundle bundle = io.createBundle();
+ Set<Workflow> workflowSet = new HashSet<>();
+ workflowSet.add(workflow);
+ bundle.setWorkflows(workflowSet);
+ bundle.setMainWorkflow(workflow);
+ io.writeBundle(bundle, scufl2File, "text/vnd.taverna.scufl2.structure");
+ } catch(WriterException e) {
+ System.out.println("Exception writing the workflow bundle");
+ } catch(IOException e) {
+ System.out.println("IOException");
+ }
++>>>>>>> 87fa1c18d2b7aa210db3d238905234bf4f52b491
}
}
[08/14] incubator-taverna-language git commit: Delete useless main
class
Posted by st...@apache.org.
Delete useless main class
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/5557bc6f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/5557bc6f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/5557bc6f
Branch: refs/heads/cwlparser
Commit: 5557bc6ff3c0c71b85ddd563bbdb7340cf86b6d6
Parents: e27be56
Author: Majdi Haouech <m....@criteo.com>
Authored: Wed Jul 25 15:40:35 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Wed Jul 25 15:40:35 2018 +0200
----------------------------------------------------------------------
.../org/apache/taverna/scufl2/cwl/Main.java | 58 --------------------
1 file changed, 58 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/5557bc6f/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
deleted file mode 100644
index e5f7159..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.taverna.scufl2.cwl;
-
-import org.yaml.snakeyaml.Yaml;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-
-public class Main {
-
- private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
- private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
- private static JsonNode cwlFile;
-
- public static void main(String[] args) {
-
- Yaml reader = new Yaml();
- ObjectMapper mapper = new ObjectMapper();
- cwlFile = mapper.valueToTree(reader.load(Main.class.getResourceAsStream(WORKFLOW_WITH_COMMAND)));
- System.out.println(cwlFile);
-
- Process workflow = ProcessFactory.createProcess(cwlFile);
- workflow.parse();
- Converter converter = new Converter();
- JsonNode node = converter.convertWorkflowProcessToJsonNode((WorkflowProcess) workflow);
- printAsYaml(node);
- }
-
- private static void printAsYaml(JsonNode node) {
- try {
- String yaml = new YAMLMapper().writeValueAsString(node);
- System.out.println("YAML DATA");
- System.out.println(yaml);
- } catch (JsonProcessingException e) {
- System.err.println("Error writing JsonNode to YAML");
- }
- }
-}
\ No newline at end of file
[03/14] incubator-taverna-language git commit: Move test-like
functions to test folder
Posted by st...@apache.org.
Move test-like functions to test folder
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/87fa1c18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/87fa1c18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/87fa1c18
Branch: refs/heads/cwlparser
Commit: 87fa1c18d2b7aa210db3d238905234bf4f52b491
Parents: 6d2da02
Author: Majdi Haouech <m....@criteo.com>
Authored: Sat Jul 14 15:14:29 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sat Jul 14 15:14:29 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLParser.java | 1 -
.../org/apache/taverna/scufl2/cwl/Main.java | 46 --------------------
.../scufl2/cwl/components/CommandLineTool.java | 3 +-
.../taverna/scufl2/cwl/components/Process.java | 3 --
.../scufl2/cwl/components/WorkflowProcess.java | 29 ------------
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 28 +++++++++++-
6 files changed, 27 insertions(+), 83 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
index 9e764e0..63e70d1 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
@@ -39,7 +39,6 @@ public class CWLParser {
public CWLParser(JsonNode cwlFile) {
this.cwlFile = cwlFile;
- this.yamlHelper;
}
public Set<Step> parseSteps() {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
deleted file mode 100644
index d4fa6b8..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Main.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.taverna.scufl2.cwl;
-
-import org.yaml.snakeyaml.Yaml;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public class Main {
-
- private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
- private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
- private static JsonNode cwlFile;
-
- public static void main(String[] args) {
-
- Yaml reader = new Yaml();
- ObjectMapper mapper = new ObjectMapper();
- cwlFile = mapper.valueToTree(reader.load(Main.class.getResourceAsStream(WORKFLOW_WITH_COMMAND)));
- System.out.println(cwlFile);
-
- Process workflow = ProcessFactory.createProcess(cwlFile);
- workflow.parse();
- Converter converter = new Converter();
- JsonNode node = converter.convertWorkflowProcessToJsonNode((WorkflowProcess) workflow);
- System.out.println("NODE");
- System.out.println(node);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
index db954aa..ca551fa 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -46,8 +46,6 @@ public class CommandLineTool implements Process {
this.node = node;
this.cwlParser = new CWLParser(node);
this.parse();
- this.receiverPorts = new HashSet(processorInputs.values());
- this.senderPorts = new HashSet(processorOutputs.values());
}
public void parse() {
@@ -57,6 +55,7 @@ public class CommandLineTool implements Process {
}
public void parseInputs() {
+ // TODO: Set the processor port depth from the CWL type
Set<PortDetail> cwlInputs = cwlParser.parseInputs();
for(PortDetail detail: cwlInputs) {
String portId = detail.getId();
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/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 342864a..70e3669 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
@@ -28,9 +28,6 @@ import org.apache.taverna.scufl2.api.port.ReceiverPort;
public interface Process {
- Set<ReceiverPort> receiverPorts;
- Set<SenderPort> senderPorts;
-
public void parse();
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/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 afee5da..b8902e7 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
@@ -19,8 +19,6 @@
package org.apache.taverna.scufl2.cwl;
-import java.io.File;
-import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
@@ -31,8 +29,6 @@ import org.apache.taverna.scufl2.api.core.Processor;
import org.apache.taverna.scufl2.api.core.DataLink;
import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-
import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
@@ -40,9 +36,6 @@ import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
import org.apache.taverna.scufl2.api.port.SenderPort;
import org.apache.taverna.scufl2.api.port.ReceiverPort;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.io.WriterException;
-
import com.fasterxml.jackson.databind.JsonNode;
public class WorkflowProcess implements Process {
@@ -61,8 +54,6 @@ public class WorkflowProcess implements Process {
public WorkflowProcess(JsonNode node) {
cwlParser = new CWLParser(node);
this.parse();
- this.receiverPorts = new HashSet(workflowInputs.values());
- this.senderPorts = new HashSet(workflowOutputs.values());
}
public void parse() {
@@ -82,9 +73,6 @@ public class WorkflowProcess implements Process {
workflow.setProcessors(processors);
workflow.setDataLinks(dataLinks);
-// System.out.println(workflow);
-// writeWorkflowToFile(workflow);
-//
// System.out.println("DEBUG WORKFLOW");
// System.out.println(workflow.getInputPorts());
// System.out.println(workflow.getOutputPorts());
@@ -92,23 +80,6 @@ public class WorkflowProcess implements Process {
}
- public void writeWorkflowToFile(Workflow workflow) {
- try {
- WorkflowBundleIO io = new WorkflowBundleIO();
- File scufl2File = new File("workflow.wfbundle");
- WorkflowBundle bundle = io.createBundle();
- Set<Workflow> workflowSet = new HashSet<>();
- workflowSet.add(workflow);
- bundle.setWorkflows(workflowSet);
- bundle.setMainWorkflow(workflow);
- io.writeBundle(bundle, scufl2File, "text/vnd.taverna.scufl2.structure");
- } catch(WriterException e) {
- System.out.println("Exception writing the workflow bundle");
- } catch(IOException e) {
- System.out.println("IOException");
- }
- }
-
public void parseInputs() {
Set<PortDetail> cwlInputs = cwlParser.parseInputs();
for (PortDetail port: cwlInputs) {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87fa1c18/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
index 015ded4..10604b1 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
@@ -18,7 +18,8 @@
*/
package org.apache.taverna.scufl2.cwl;
-
+import java.io.File;
+import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
@@ -45,6 +46,11 @@ import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
public class TestWorkflowProcess {
private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
@@ -92,8 +98,26 @@ public class TestWorkflowProcess {
@Test
public void testWorkflowSteps() {
cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
- WorkflowProcess workflow = new WorkflowProcess(cwlFile);
+ Process workflow = ProcessFactory.createProcess(cwlFile);
+
+ assert(workflow instanceof WorkflowProcess);
+ }
+ public void writeWorkflowToFile(Workflow workflow) {
+ try {
+ WorkflowBundleIO io = new WorkflowBundleIO();
+ File scufl2File = new File("workflow.wfbundle");
+ WorkflowBundle bundle = io.createBundle();
+ Set<Workflow> workflowSet = new HashSet<>();
+ workflowSet.add(workflow);
+ bundle.setWorkflows(workflowSet);
+ bundle.setMainWorkflow(workflow);
+ io.writeBundle(bundle, scufl2File, "text/vnd.taverna.scufl2.structure");
+ } catch(WriterException e) {
+ System.out.println("Exception writing the workflow bundle");
+ } catch(IOException e) {
+ System.out.println("IOException");
+ }
}
}
[02/14] incubator-taverna-language git commit: Initialize simple
objects outside of constructor
Posted by st...@apache.org.
Initialize simple objects outside of constructor
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/6d2da02e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/6d2da02e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/6d2da02e
Branch: refs/heads/cwlparser
Commit: 6d2da02e94a0a0ce705584aeb065b8e6a52ffd5f
Parents: 70c9d4a
Author: Majdi Haouech <m....@criteo.com>
Authored: Sat Jul 14 15:03:56 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sat Jul 14 15:03:56 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLParser.java | 4 +--
.../taverna/scufl2/cwl/WorkflowParser.java | 28 +++++---------------
.../scufl2/cwl/components/CommandLineTool.java | 6 ++---
.../scufl2/cwl/components/WorkflowProcess.java | 21 +++++----------
4 files changed, 18 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6d2da02e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
index 382208d..9e764e0 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLParser.java
@@ -35,11 +35,11 @@ import com.fasterxml.jackson.databind.JsonNode;
public class CWLParser {
private JsonNode cwlFile;
- private YAMLHelper yamlHelper;
+ private YAMLHelper yamlHelper = new YAMLHelper();
public CWLParser(JsonNode cwlFile) {
this.cwlFile = cwlFile;
- this.yamlHelper = new YAMLHelper();
+ this.yamlHelper;
}
public Set<Step> parseSteps() {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6d2da02e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
index b18dc54..b66991c 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/WorkflowParser.java
@@ -53,38 +53,24 @@ public class WorkflowParser {
private static final String FILE_NAME = "/hello_world.cwl";
private CWLParser cwlParser;
- private Converter converter;
+ private Converter converter = new Converter();
- private Map<String, InputWorkflowPort> workflowInputs;
- private Map<String, OutputWorkflowPort> workflowOutputs;
- private Map<String, Processor> workflowProcessors;
- private Map<String, InputProcessorPort> processorInputs;
- private Map<String, OutputProcessorPort> processorOutputs;
- private Set<DataLink> dataLinks;
+ private Map<String, InputWorkflowPort> workflowInputs = new HashMap<>();
+ private Map<String, OutputWorkflowPort> workflowOutputs = new HashMap<>();
+ private Map<String, Processor> workflowProcessors = new HashMap<>();
+ private Map<String, InputProcessorPort> processorInputs = new HashMap<>();
+ private Map<String, OutputProcessorPort> processorOutputs = new HashMap<>();
+ private Set<DataLink> dataLinks = new HashSet<DataLink>();
public WorkflowParser() {
Yaml reader = new Yaml();
ObjectMapper mapper = new ObjectMapper();
JsonNode cwlFile = mapper.valueToTree(reader.load(WorkflowParser.class.getResourceAsStream(FILE_NAME)));
this.cwlParser = new CWLParser(cwlFile);
- this.converter = new Converter();
- workflowInputs = new HashMap<>();
- workflowOutputs = new HashMap<>();
- workflowProcessors = new HashMap<>();
- processorInputs = new HashMap<>();
- processorOutputs = new HashMap<>();
- dataLinks = new HashSet<DataLink>();
}
public WorkflowParser(JsonNode cwlFile) {
this.cwlParser = new CWLParser(cwlFile);
- this.converter = new Converter();
- workflowInputs = new HashMap<>();
- workflowOutputs = new HashMap<>();
- workflowProcessors = new HashMap<>();
- processorInputs = new HashMap<>();
- processorOutputs = new HashMap<>();
- dataLinks = new HashSet<DataLink>();
}
public Workflow buildWorkflow() {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6d2da02e/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
index d05d38a..db954aa 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -39,14 +39,12 @@ public class CommandLineTool implements Process {
private JsonNode node;
private String baseCommand = null;
- private Map<String, InputProcessorPort> processorInputs;
- private Map<String, OutputProcessorPort> processorOutputs;
+ private Map<String, InputProcessorPort> processorInputs = new HashMap<>();
+ private Map<String, OutputProcessorPort> processorOutputs = new HashMap<>();
public CommandLineTool(JsonNode node) {
this.node = node;
this.cwlParser = new CWLParser(node);
- this.processorInputs = new HashMap<>();
- this.processorOutputs = new HashMap<>();
this.parse();
this.receiverPorts = new HashSet(processorInputs.values());
this.senderPorts = new HashSet(processorOutputs.values());
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6d2da02e/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 c56cbb5..afee5da 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
@@ -49,24 +49,17 @@ public class WorkflowProcess implements Process {
private CWLParser cwlParser;
- private Map<String, InputWorkflowPort> workflowInputs;
- private Map<String, OutputWorkflowPort> workflowOutputs;
- private Map<String, Processor> workflowProcessors;
- private Map<String, InputProcessorPort> processorInputs;
- private Map<String, OutputProcessorPort> processorOutputs;
- private Set<DataLink> dataLinks;
+ private Map<String, InputWorkflowPort> workflowInputs = new HashMap<>();
+ private Map<String, OutputWorkflowPort> workflowOutputs = new HashMap<>();
+ private Map<String, Processor> workflowProcessors = new HashMap<>();
+ private Map<String, InputProcessorPort> processorInputs = new HashMap<>();
+ private Map<String, OutputProcessorPort> processorOutputs = new HashMap<>();
+ private Set<DataLink> dataLinks = new HashSet<>();
- private Converter converter;
+ private Converter converter = new Converter();
public WorkflowProcess(JsonNode node) {
cwlParser = new CWLParser(node);
- converter = new Converter();
- workflowInputs = new HashMap<>();
- workflowOutputs = new HashMap<>();
- workflowProcessors = new HashMap<>();
- processorInputs = new HashMap<>();
- processorOutputs = new HashMap<>();
- dataLinks = new HashSet<>();
this.parse();
this.receiverPorts = new HashSet(workflowInputs.values());
this.senderPorts = new HashSet(workflowOutputs.values());
[10/14] incubator-taverna-language git commit: Convert
WorkflowProcess to WorkflowBundle with nested processes
Posted by st...@apache.org.
Convert WorkflowProcess to WorkflowBundle with nested processes
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/e0ec5566
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/e0ec5566
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/e0ec5566
Branch: refs/heads/cwlparser
Commit: e0ec55666060c28b2cefd43fc67890519ce5119e
Parents: 8aa7422
Author: Majdi Haouech <m....@criteo.com>
Authored: Fri Jul 27 00:44:35 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Fri Jul 27 00:44:35 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/Converter.java | 44 ++++++++++
.../scufl2/cwl/components/Reference.java | 4 +
.../taverna/scufl2/cwl/TestConverting.java | 88 ++++++++++++++++++++
3 files changed, 136 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e0ec5566/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 687a278..086d9dd 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
@@ -25,6 +25,7 @@ import java.util.HashMap;
import org.apache.taverna.scufl2.api.core.Workflow;
import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
@@ -158,4 +159,47 @@ public class Converter {
return port;
}
+
+ public WorkflowBundle buildWorkflowBundle(Process process) {
+ WorkflowBundle bundle = new WorkflowBundle();
+ if(!(process instanceof WorkflowProcess)) {
+ throw new UnsupportedOperationException("WorkflowBundle is not created without an initial workflow yet");
+ }
+ Workflow workflow = convertWorkflowProcess((WorkflowProcess) process, bundle);
+ workflow.setParent(bundle);
+
+ return bundle;
+ }
+
+ public Workflow convertWorkflowProcess(WorkflowProcess workflowProcess, WorkflowBundle bundle) {
+ Workflow workflow = new Workflow();
+ Set<InputWorkflowPort> inputs = new HashSet<>(workflowProcess.getWorkflowInputs().values());
+ Set<OutputWorkflowPort> outputs = new HashSet<>(workflowProcess.getWorkflowOutputs().values());
+ workflow.setInputPorts(inputs);
+ workflow.setOutputPorts(outputs);
+
+ for(Process process: workflowProcess.getProcesses()) {
+ if(process instanceof WorkflowProcess) {
+ Workflow childWorkflow = convertWorkflowProcess((WorkflowProcess) process, bundle); // TODO: Add nested relationship
+ bundle.getWorkflows().add(childWorkflow);
+ } else if(process instanceof CommandLineTool) {
+ Processor processor = convertCommandLineTool((CommandLineTool) process);
+ workflow.getProcessors().add(processor);
+ } else {
+ assert(process instanceof Reference);
+ Processor processor = convertReference((Reference) process);
+ workflow.getProcessors().add(processor);
+ }
+ }
+
+ return workflow;
+ }
+
+ public Processor convertCommandLineTool(CommandLineTool command) {
+ return new Processor(null, command.getBaseCommand());
+ }
+
+ public Processor convertReference(Reference reference) {
+ return new Processor(null, reference.getSource());
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e0ec5566/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
index 7a25744..193e1a6 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Reference.java
@@ -40,4 +40,8 @@ public class Reference implements Process {
public String toString() {
return source;
}
+
+ public String getSource() {
+ return source;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/e0ec5566/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
new file mode 100644
index 0000000..b17cc88
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestConverting.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.scufl2.cwl;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+import org.yaml.snakeyaml.Yaml;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+public class TestConverting {
+ private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
+ private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
+ private static final String WORKFLOW_WITH_WORKFLOW = "/workflow_with_workflow.cwl";
+
+ private static JsonNode cwlFile;
+
+ public JsonNode loadYamlFile(String filename) {
+
+ Yaml reader = new Yaml();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode node = mapper.valueToTree(reader.load(TestWorkflowProcess.class.getResourceAsStream(filename)));
+
+ return node;
+ }
+
+ @Test
+ public void testWorkflowBundleWithOneWorkflow() {
+ JsonNode cwlFile = loadYamlFile(HELLO_WORLD_CWL);
+
+ WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
+ Converter converter = new Converter();
+ WorkflowBundle workflowBundle = converter.buildWorkflowBundle(workflow);
+
+ assertEquals(workflowBundle.getWorkflows().size(), 1);
+ }
+
+ @Test
+ public void testWorkflowBundleWithMultipleWorkflows() {
+ JsonNode cwlFile = loadYamlFile(WORKFLOW_WITH_WORKFLOW);
+
+ WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
+ Converter converter = new Converter();
+ WorkflowBundle workflowBundle = converter.buildWorkflowBundle(workflow);
+
+ assertEquals(workflowBundle.getWorkflows().size(), 2);
+ }
+
+}
[04/14] incubator-taverna-language git commit: remove empty file
Posted by st...@apache.org.
remove empty file
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/a5251d10
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/a5251d10
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/a5251d10
Branch: refs/heads/cwlparser
Commit: a5251d10fac4f6ec811026400df987debbd43634
Parents: afcfd77
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jul 16 10:29:33 2018 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jul 16 10:29:33 2018 +0100
----------------------------------------------------------------------
.../src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java | 0
1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/a5251d10/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/Main.java
deleted file mode 100644
index e69de29..0000000
[13/14] incubator-taverna-language git commit: Convert ports inside
steps while converting parent processes
Posted by st...@apache.org.
Convert ports inside steps while converting parent processes
- Cleanup some unused imports
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/b8081faf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/b8081faf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/b8081faf
Branch: refs/heads/cwlparser
Commit: b8081fafc2810e3371a85ad3370bd4846eeae290
Parents: ba5ea1b
Author: Majdi Haouech <m....@criteo.com>
Authored: Sun Aug 5 20:11:54 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sun Aug 5 20:11:54 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/Converter.java | 34 ++++++++++++++++-
.../scufl2/cwl/components/WorkflowProcess.java | 2 +
.../taverna/scufl2/cwl/TestConverting.java | 40 ++++++++++----------
3 files changed, 55 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b8081faf/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 6bfe77d..5cfd9ce 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
@@ -196,10 +196,40 @@ public class Converter {
}
public Processor convertCommandLineTool(CommandLineTool command) {
- return new Processor(null, command.getBaseCommand());
+ Processor processor = new Processor(null, command.getBaseCommand());
+
+ processor.setInputPorts(convertInputProcessPorts(command.getInputPorts()));
+ processor.setOutputPorts(convertOutputProcessPorts(command.getOutputPorts()));
+
+ return processor;
}
public Processor convertReference(Reference reference) {
- return new Processor(null, reference.getSource());
+ Processor processor = new Processor(null, reference.getSource());
+
+ processor.setInputPorts(convertInputProcessPorts(reference.getInputPorts()));
+ processor.setOutputPorts(convertOutputProcessPorts(reference.getOutputPorts()));
+
+ return processor;
+ }
+
+ public Set<InputProcessorPort> convertInputProcessPorts(Set<InputPort> inputPorts) {
+ Set<InputProcessorPort> processorInputPorts = new HashSet<>();
+
+ for(InputPort port: inputPorts) {
+ processorInputPorts.add(new InputProcessorPort(null, port.getName()));
+ }
+
+ return processorInputPorts;
+ }
+
+ public Set<OutputProcessorPort> convertOutputProcessPorts(Set<OutputPort> outputPorts) {
+ Set<OutputProcessorPort> processorOutputPorts = new HashSet<>();
+
+ for(OutputPort port: outputPorts) {
+ processorOutputPorts.add(new OutputProcessorPort(null, port.getName()));
+ }
+
+ return processorOutputPorts;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b8081faf/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 9f61758..a8e6607 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
@@ -101,6 +101,8 @@ public class WorkflowProcess extends Process {
for(Step step: cwlSteps) {
Process process = step.getRun();
+ process.setInputPorts(step.getInputs());
+ process.setOutputPorts(step.getOutputs());
result.add(process);
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b8081faf/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 b17cc88..2b34a3c 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,13 +19,7 @@
package org.apache.taverna.scufl2.cwl;
-import java.io.File;
-import java.io.IOException;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.HashMap;
-
+import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -35,17 +29,9 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
-import com.fasterxml.jackson.core.JsonProcessingException;
-
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.io.WriterException;
-
import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.core.Processor;
public class TestConverting {
private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
@@ -65,7 +51,7 @@ public class TestConverting {
@Test
public void testWorkflowBundleWithOneWorkflow() {
- JsonNode cwlFile = loadYamlFile(HELLO_WORLD_CWL);
+ this.cwlFile = loadYamlFile(HELLO_WORLD_CWL);
WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
Converter converter = new Converter();
@@ -76,7 +62,7 @@ public class TestConverting {
@Test
public void testWorkflowBundleWithMultipleWorkflows() {
- JsonNode cwlFile = loadYamlFile(WORKFLOW_WITH_WORKFLOW);
+ this.cwlFile = loadYamlFile(WORKFLOW_WITH_WORKFLOW);
WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
Converter converter = new Converter();
@@ -85,4 +71,20 @@ public class TestConverting {
assertEquals(workflowBundle.getWorkflows().size(), 2);
}
+ @Test
+ public void testConvertWorkflowProcessToWorkflow() {
+ this.cwlFile = loadYamlFile(HELLO_WORLD_CWL);
+
+ WorkflowProcess workflowProcess = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
+ WorkflowBundle bundle = new WorkflowBundle();
+ Converter converter = new Converter();
+ Workflow workflow = converter.convertWorkflowProcess(workflowProcess, bundle);
+ assertEquals(1, workflow.getProcessors().size());
+ assertEquals(1, workflow.getInputPorts().size());
+ assertEquals(1, workflow.getOutputPorts().size());
+
+ Processor processor = workflow.getProcessors().iterator().next();
+ assertEquals(1, processor.getInputPorts().size());
+ assertEquals(0, processor.getOutputPorts().size());
+ }
}
[05/14] incubator-taverna-language git commit: Parse workflows and
command line tools recursively
Posted by st...@apache.org.
Parse workflows and command line tools recursively
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/b56f451d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/b56f451d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/b56f451d
Branch: refs/heads/cwlparser
Commit: b56f451d2e5accb6ab602ec1155e17db6e969eaf
Parents: a5251d1
Author: Majdi Haouech <m....@criteo.com>
Authored: Fri Jun 22 12:17:21 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Mon Jul 16 20:15:19 2018 +0200
----------------------------------------------------------------------
taverna-scufl2-cwl/taverna-scufl2-cwl.iml | 11 +++++++++++
taverna-scufl2-cwl/workflow.t2flow.txt | 10 ++++++++++
.../workflow.vnd.taverna.scufl2.structure.txt | Bin 0 -> 2574 bytes
taverna-scufl2-cwl/workflow.wfbundle | 10 ++++++++++
4 files changed, 31 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b56f451d/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/taverna-scufl2-cwl.iml b/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
new file mode 100644
index 0000000..788bb17
--- /dev/null
+++ b/taverna-scufl2-cwl/taverna-scufl2-cwl.iml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src2" isTestSource="false" />
+ </content>
+ <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b56f451d/taverna-scufl2-cwl/workflow.t2flow.txt
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.t2flow.txt b/taverna-scufl2-cwl/workflow.t2flow.txt
new file mode 100644
index 0000000..59ce3fb
--- /dev/null
+++ b/taverna-scufl2-cwl/workflow.t2flow.txt
@@ -0,0 +1,10 @@
+WorkflowBundle 'bundle1'
+ MainWorkflow 'cdba0a80-366b-4f66-8f26-85e882d41eed'
+ Workflow 'cdba0a80-366b-4f66-8f26-85e882d41eed'
+ In 'name'
+ Processor 'step1'
+ In 'text'
+ Links
+ 'name' -> 'step1:text'
+ MainProfile 'profile1'
+ Profile 'profile1'
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b56f451d/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt b/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt
new file mode 100644
index 0000000..e8b6430
Binary files /dev/null and b/taverna-scufl2-cwl/workflow.vnd.taverna.scufl2.structure.txt differ
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/b56f451d/taverna-scufl2-cwl/workflow.wfbundle
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/workflow.wfbundle b/taverna-scufl2-cwl/workflow.wfbundle
new file mode 100644
index 0000000..e2c6d40
--- /dev/null
+++ b/taverna-scufl2-cwl/workflow.wfbundle
@@ -0,0 +1,10 @@
+WorkflowBundle 'bundle1'
+ MainWorkflow '6ce2e3b6-39b1-4773-8aee-e74cccb7ca7d'
+ Workflow '6ce2e3b6-39b1-4773-8aee-e74cccb7ca7d'
+ In 'name'
+ Processor 'step1'
+ In 'text'
+ Links
+ 'name' -> 'step1:text'
+ MainProfile 'profile1'
+ Profile 'profile1'
[09/14] incubator-taverna-language git commit: Clean up and add tests
for the nested workflows
Posted by st...@apache.org.
Clean up and add tests for the nested workflows
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/8aa74225
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/8aa74225
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/8aa74225
Branch: refs/heads/cwlparser
Commit: 8aa7422573e81b580a5bfaed9a1ed7da7b37b930
Parents: 5557bc6
Author: Majdi Haouech <m....@criteo.com>
Authored: Fri Jul 27 00:09:04 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Fri Jul 27 00:09:04 2018 +0200
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/Converter.java | 4 -
.../scufl2/cwl/components/CommandLineTool.java | 4 +
.../scufl2/cwl/components/WorkflowProcess.java | 77 ++++++++--------
.../taverna/scufl2/cwl/TestWorkflowNesting.java | 95 ++++++++++++++++++++
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 2 +-
.../test/resources/workflow_with_workflow.cwl | 48 ++++++++++
.../src/test/resources/worklflow2.cwl | 44 ---------
7 files changed, 186 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/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 eff7ef6..687a278 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
@@ -81,10 +81,6 @@ public class Converter {
}
public JsonNode convertWorkflowProcessToJsonNode(WorkflowProcess workflow) {
- Map<String, Processor> workflowProcessors = workflow.getWorkflowProcessors();
- Map<String, InputProcessorPort> processorInputs = workflow.getProcessorInputs();
- Map<String, OutputProcessorPort> processorOutputs = workflow.getProcessorOutputs();
-
ObjectNode result = jsonNodeFactory.objectNode();
ObjectNode inputs = convertInputWorkflows(workflow.getWorkflowInputs());
ObjectNode outputs = convertOutputWorkflows(workflow.getWorkflowOutputs());
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
index ca551fa..70d9098 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/components/CommandLineTool.java
@@ -74,4 +74,8 @@ public class CommandLineTool implements Process {
processorOutputs.put(portId, port);
}
}
+
+ public String getBaseCommand() {
+ return baseCommand;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/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 481c93f..1b660dd 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
@@ -19,8 +19,6 @@
package org.apache.taverna.scufl2.cwl;
-import java.io.File;
-import java.io.IOException;
import java.util.Set;
import java.util.HashSet;
import java.util.Map;
@@ -31,7 +29,6 @@ import org.apache.taverna.scufl2.api.core.Processor;
import org.apache.taverna.scufl2.api.core.DataLink;
import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
import org.apache.taverna.scufl2.api.port.InputProcessorPort;
@@ -39,9 +36,6 @@ import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
import org.apache.taverna.scufl2.api.port.SenderPort;
import org.apache.taverna.scufl2.api.port.ReceiverPort;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.io.WriterException;
-
import com.fasterxml.jackson.databind.JsonNode;
public class WorkflowProcess implements Process {
@@ -55,6 +49,8 @@ public class WorkflowProcess implements Process {
private Map<String, OutputProcessorPort> processorOutputs = new HashMap<>();
private Set<DataLink> dataLinks = new HashSet<>();
+ private Set<Process> processes = new HashSet<>();
+
private Converter converter = new Converter();
public WorkflowProcess(JsonNode node) {
@@ -66,25 +62,9 @@ public class WorkflowProcess implements Process {
parseInputs();
parseOutputs();
Set<Step> cwlSteps = cwlParser.parseSteps();
- parseProcessors(cwlSteps);
- parseDataLinks(cwlSteps);
-
- Workflow workflow = new Workflow();
- Set<InputWorkflowPort> inputs = new HashSet<>(workflowInputs.values());
- Set<OutputWorkflowPort> outputs = new HashSet<>(workflowOutputs.values());
- Set<Processor> processors = new HashSet<>(workflowProcessors.values());
-
- workflow.setInputPorts(inputs);
- workflow.setOutputPorts(outputs);
- workflow.setProcessors(processors);
-
-
-// System.out.println("DEBUG WORKFLOW");
-// System.out.println(workflow.getInputPorts());
-// System.out.println(workflow.getOutputPorts());
-// System.out.println(workflow.getProcessors());
-
+ this.processes = parseProcessors(cwlSteps);
}
+
public void parseInputs() {
Set<PortDetail> cwlInputs = cwlParser.parseInputs();
for (PortDetail port: cwlInputs) {
@@ -103,23 +83,34 @@ public class WorkflowProcess implements Process {
}
}
- public void parseProcessors(Set<Step> cwlSteps) {
- for(Step step: cwlSteps) {
-
- Processor processor = converter.convertStepToProcessor(step);
- workflowProcessors.put(step.getId(), processor);
+ public Set<Process> parseProcessors(Set<Step> cwlSteps) {
+ Set<Process> result = new HashSet<>();
- // TODO: Add only receiver and sender ports from the Process interface
- for(StepInput stepInput: step.getInputs()) {
- InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getId());
- processorInputs.put(stepInput.getId(), processorPort);
- }
- for(StepOutput stepOutput: step.getOutputs()) {
- OutputProcessorPort processorPort = new OutputProcessorPort(processor, stepOutput.getId());
- processorOutputs.put(stepOutput.getId(), processorPort);
- }
+ for(Step step: cwlSteps) {
+ Process process = step.getRun();
+ result.add(process);
}
- }
+
+ return result;
+ }
+
+// public void parseProcessors(Set<Step> cwlSteps) {
+// for(Step step: cwlSteps) {
+//
+// Processor processor = converter.convertStepToProcessor(step);
+// workflowProcessors.put(step.getId(), processor);
+//
+// // TODO: Add only receiver and sender ports from the Process interface
+// for(StepInput stepInput: step.getInputs()) {
+// InputProcessorPort processorPort = new InputProcessorPort(processor, stepInput.getId());
+// processorInputs.put(stepInput.getId(), processorPort);
+// }
+// for(StepOutput stepOutput: step.getOutputs()) {
+// OutputProcessorPort processorPort = new OutputProcessorPort(processor, stepOutput.getId());
+// processorOutputs.put(stepOutput.getId(), processorPort);
+// }
+// }
+// }
public void parseDataLinks(Set<Step> cwlSteps) {
for(Step step: cwlSteps) {
@@ -198,4 +189,12 @@ public class WorkflowProcess implements Process {
public void setDataLinks(Set<DataLink> dataLinks) {
this.dataLinks = dataLinks;
}
+
+ public Set<Process> getProcesses() {
+ return processes;
+ }
+
+ public void setProcesses(Set<Process> processes) {
+ this.processes = processes;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowNesting.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowNesting.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowNesting.java
new file mode 100644
index 0000000..d0f3e88
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowNesting.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.taverna.scufl2.cwl;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+import org.yaml.snakeyaml.Yaml;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+
+public class TestWorkflowNesting {
+ private static final String HELLO_WORLD_CWL = "/hello_world.cwl";
+ private static final String WORKFLOW_WITH_COMMAND = "/workflow_with_command.cwl";
+ private static final String WORKFLOW_WITH_WORKFLOW = "/workflow_with_workflow.cwl";
+
+ private static JsonNode cwlFile;
+
+ public JsonNode loadYamlFile(String filename) {
+
+ Yaml reader = new Yaml();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode node = mapper.valueToTree(reader.load(TestWorkflowProcess.class.getResourceAsStream(filename)));
+
+ return node;
+ }
+
+ @Test
+ public void testWorkflowWithProcessor() {
+ JsonNode cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
+
+ WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
+ Set<Process> processes = workflow.getProcesses();
+ assertEquals(processes.size(), 1);
+ Process child = processes.iterator().next();
+ assert(child instanceof CommandLineTool);
+ assertEquals(((CommandLineTool) child).getBaseCommand(), "echo");
+ }
+
+ @Test
+ public void testWorkflowWithWorkflow() {
+ JsonNode cwlFile = loadYamlFile(WORKFLOW_WITH_WORKFLOW);
+
+ WorkflowProcess workflow = (WorkflowProcess) ProcessFactory.createProcess(cwlFile);
+ Set<Process> processes = workflow.getProcesses();
+ assert(processes.size() == 1);
+ Process child = processes.iterator().next();
+ assert(child instanceof WorkflowProcess);
+ WorkflowProcess childWorkflow = (WorkflowProcess) child;
+ assertEquals(childWorkflow.getProcesses().size(), 1);
+
+ Process reference = childWorkflow.getProcesses().iterator().next();
+
+ assert(reference instanceof Reference);
+ assertEquals(((Reference) reference).toString(), "example.cwl");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
index fc386ac..4b3bba7 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestWorkflowProcess.java
@@ -91,7 +91,7 @@ public class TestWorkflowProcess {
}
@Test
- public void testWorkflowSteps() {
+ public void testProcessType() {
cwlFile = loadYamlFile(WORKFLOW_WITH_COMMAND);
Process workflow = ProcessFactory.createProcess(cwlFile);
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/taverna-scufl2-cwl/src/test/resources/workflow_with_workflow.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/resources/workflow_with_workflow.cwl b/taverna-scufl2-cwl/src/test/resources/workflow_with_workflow.cwl
new file mode 100644
index 0000000..58323c5
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/resources/workflow_with_workflow.cwl
@@ -0,0 +1,48 @@
+#!/usr/bin/env cwl-runner
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+cwlVersion: v1.0
+class: Workflow
+
+inputs:
+ message: string
+
+outputs:
+ download:
+ type: File
+ outputSource: "#step1/curl"
+
+steps:
+ step1:
+ run:
+ class: Workflow
+ inputs:
+ name: string
+ outputs:
+ output1: string
+ steps:
+ step2:
+ run: example.cwl
+ inputs:
+ - id: text
+ source: "#x/name"
+ outputs: []
+ in:
+ text: message
+
+ out: [curl]
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/8aa74225/taverna-scufl2-cwl/src/test/resources/worklflow2.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/resources/worklflow2.cwl b/taverna-scufl2-cwl/src/test/resources/worklflow2.cwl
deleted file mode 100644
index fc5e846..0000000
--- a/taverna-scufl2-cwl/src/test/resources/worklflow2.cwl
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env cwl-runner
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-cwlVersion: v1.0
-class: Workflow
-
-inputs:
- message: string
-
-outputs:
- download:
- type: File
- outputSource: "#step1/curl"
-
-steps:
- step1:
- run:
- class: CommandLineTool
- baseCommand: echo
- inputs:
- text:
- type: string
- inputBinding:
- position: 1
- outputs: []
- in:
- text: message
-
- out: [curl]
[14/14] incubator-taverna-language git commit: Support nested
workflows by parsing processes recursively
Posted by st...@apache.org.
Support nested workflows by parsing processes recursively
Merge commit 'refs/pull/39/head' of github.com:apache/incubator-taverna-language into cwlparser
Merges #39
Contributed by @haouech, ICLA on file.
Signed-off-by: Stian Soiland-Reyes <st...@apache.org>
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/9cd4b878
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/9cd4b878
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/9cd4b878
Branch: refs/heads/cwlparser
Commit: 9cd4b87815d2a514a8a3b821cda4bef97b597cfb
Parents: afcfd77 b8081fa
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Aug 6 15:45:35 2018 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Aug 6 15:45:35 2018 +0100
----------------------------------------------------------------------
.../apache/taverna/scufl2/cwl/CWLParser.java | 3 +-
.../apache/taverna/scufl2/cwl/CWLReader.java | 62 +++++++++
.../apache/taverna/scufl2/cwl/Converter.java | 90 ++++++++++--
.../org/apache/taverna/scufl2/cwl/Main.java | 58 --------
.../taverna/scufl2/cwl/WorkflowParser.java | 46 +++----
.../apache/taverna/scufl2/cwl/YAMLHelper.java | 12 +-
.../scufl2/cwl/components/CommandLineTool.java | 13 +-
.../scufl2/cwl/components/InputPort.java | 53 +++++++
.../taverna/scufl2/cwl/components/Main.java | 0
.../scufl2/cwl/components/OutputPort.java | 41 ++++++
.../taverna/scufl2/cwl/components/Process.java | 30 +++-
.../scufl2/cwl/components/Reference.java | 6 +-
.../taverna/scufl2/cwl/components/Step.java | 20 +--
.../scufl2/cwl/components/StepInput.java | 54 --------
.../scufl2/cwl/components/StepOutput.java | 41 ------
.../scufl2/cwl/components/WorkflowProcess.java | 137 +++++++++----------
...e.taverna.scufl2.api.io.WorkflowBundleReader | 1 +
.../main/resources/workflow_with_command.cwl | 45 ------
.../taverna/scufl2/cwl/TestConverting.java | 90 ++++++++++++
.../taverna/scufl2/cwl/TestWorkflowNesting.java | 95 +++++++++++++
.../taverna/scufl2/cwl/TestWorkflowProcess.java | 60 ++++++--
.../test/resources/workflow_with_command.cwl | 45 ++++++
.../test/resources/workflow_with_workflow.cwl | 48 +++++++
.../src/test/resources/worklflow2.cwl | 44 ------
24 files changed, 695 insertions(+), 399 deletions(-)
----------------------------------------------------------------------