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