You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2018/08/15 13:59:35 UTC
[7/8] incubator-taverna-language git commit: Create a Taverna to
Custom CWL Objects converter
Create a Taverna to Custom CWL Objects converter
- Convert basic workflow, process, input and outputs
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/bebd694f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/bebd694f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/bebd694f
Branch: refs/heads/cwlparser
Commit: bebd694fb8bda54160f43b7049a3d16585f69ad7
Parents: 9d34b4a
Author: Majdi Haouech <m....@criteo.com>
Authored: Sat Aug 11 12:06:12 2018 +0200
Committer: Majdi Haouech <m....@criteo.com>
Committed: Sat Aug 11 12:06:12 2018 +0200
----------------------------------------------------------------------
.../taverna/scufl2/cwl/TavernaConverter.java | 81 ++++++++++++++++++++
.../scufl2/cwl/TestTavernaConverter.java | 80 +++++++++++++++++++
2 files changed, 161 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/bebd694f/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/TavernaConverter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/TavernaConverter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/TavernaConverter.java
new file mode 100644
index 0000000..da1ece3
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/TavernaConverter.java
@@ -0,0 +1,81 @@
+package org.apache.taverna.scufl2.cwl;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.core.DataLink;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.port.InputProcessorPort;
+import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
+import org.apache.taverna.scufl2.api.port.SenderPort;
+import org.apache.taverna.scufl2.cwl.components.InputPort;
+import org.apache.taverna.scufl2.cwl.components.OutputPort;
+import org.apache.taverna.scufl2.cwl.components.Reference;
+import org.apache.taverna.scufl2.cwl.components.Step;
+import org.apache.taverna.scufl2.cwl.components.WorkflowProcess;
+
+public class TavernaConverter {
+
+ public WorkflowProcess convertWorkflow(Workflow workflow) {
+ WorkflowProcess process = new WorkflowProcess();
+ process.setName(workflow.getName());
+ Set<InputPort> inputs = convertInputPorts(workflow);
+ Set<OutputPort> outputs = convertOutputPorts(workflow);
+
+ process.setInputPorts(inputs);
+ process.setOutputPorts(outputs);
+
+ return process;
+ }
+
+ public Set<InputPort> convertInputPorts(Workflow workflow) {
+ Set<InputPort> result = new HashSet<>();
+ for(InputWorkflowPort workflowPort: workflow.getInputPorts()) {
+ InputPort port = new InputPort(workflowPort.getName(), "");
+ result.add(port);
+ }
+ return result;
+ }
+
+ public Set<OutputPort> convertOutputPorts(Workflow workflow) {
+ Set<OutputPort> result = new HashSet<>();
+ for(OutputWorkflowPort workflowPort: workflow.getOutputPorts()) {
+ OutputPort port = new OutputPort(workflowPort.getName());
+ result.add(port);
+ }
+ return result;
+ }
+
+ public Set<Step> convertProcessors(Workflow workflow) {
+ Set<Step> result = new HashSet<>();
+ NamedSet<Processor> processors = workflow.getProcessors();
+ Set<DataLink> dataLinks = workflow.getDataLinks();
+ Map<String, SenderPort> portNameToSource = new HashMap<>();
+ for(DataLink link: dataLinks) {
+ portNameToSource.put(link.getSendsTo().getName(), link.getReceivesFrom());
+ }
+
+ for(Processor processor: processors) {
+ Step step = convertProcessor(processor, portNameToSource);
+ result.add(step);
+ }
+ return result;
+ }
+
+ public Step convertProcessor(Processor processor, Map<String, SenderPort> portNameToSource) {
+ Step step = new Step();
+ step.setRun(new Reference(processor.getName())); // TODO: Support nested steps. Check name value.
+ for(InputProcessorPort port: processor.getInputPorts()) {
+ InputPort stepPort = new InputPort();
+ stepPort.setName(port.getName());
+ SenderPort senderPort = portNameToSource.get(port.getName());
+ stepPort.setSource(senderPort.getName());
+ step.getInputs().add(stepPort);
+ }
+ return step;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/bebd694f/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestTavernaConverter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestTavernaConverter.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestTavernaConverter.java
new file mode 100644
index 0000000..14bb8a0
--- /dev/null
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestTavernaConverter.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.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.taverna.scufl2.api.core.Processor;
+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.cwl.components.InputPort;
+import org.apache.taverna.scufl2.cwl.components.Reference;
+import org.apache.taverna.scufl2.cwl.components.Step;
+import org.apache.taverna.scufl2.cwl.components.WorkflowProcess;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+
+public class TestTavernaConverter {
+
+ @Test
+ public void testWorkflowToWorkflowProcess() {
+ Workflow workflow = new Workflow();
+ workflow.setName("workflowName");
+ workflow.getInputPorts().add(new InputWorkflowPort(workflow, "input1"));
+ workflow.getInputPorts().add(new InputWorkflowPort(workflow, "input2"));
+ workflow.getOutputPorts().add(new OutputWorkflowPort(workflow, "output"));
+
+ TavernaConverter converter = new TavernaConverter();
+
+ WorkflowProcess workflowProcess = converter.convertWorkflow(workflow);
+ assertEquals(workflow.getInputPorts().size(), workflowProcess.getInputPorts().size());
+ assertEquals(workflow.getOutputPorts().size(), workflowProcess.getOutputPorts().size());
+
+ Set<String> expectedInputNames = workflow.getInputPorts().stream().map(InputWorkflowPort::getName).collect(Collectors.toSet());
+ Set<String> convertedInputNames = workflowProcess.getInputPorts().stream().map(InputPort::getName).collect(Collectors.toSet());
+
+ assertEquals(expectedInputNames, convertedInputNames);
+
+ assertEquals("output", workflowProcess.getOutputPorts().iterator().next().getName());
+ }
+
+ @Test
+ public void testProcessorsToSteps() {
+ Workflow workflow = new Workflow();
+ workflow.setName("workflowName");
+ workflow.getProcessors().add(new Processor(workflow, "processor1"));
+ workflow.getProcessors().add(new Processor(workflow, "processor2"));
+
+ Step step1 = new Step();
+ step1.setRun(new Reference("processor1"));
+ Step step2 = new Step();
+ step2.setRun(new Reference("processor2"));
+ Set<Step> steps = new HashSet<>();
+ steps.add(step1);
+ steps.add(step2);
+
+ TavernaConverter converter = new TavernaConverter();
+ Set<Step> convertedSteps = converter.convertProcessors(workflow);
+
+ assertEquals(steps, convertedSteps);
+ }
+}