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(-)
----------------------------------------------------------------------