public Workflow convertWorkflowProcess()

in taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/Converter.java [186:233]


    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);
        Set<InputPort> inputPorts = workflowProcess.getInsideInputPorts();
        Set<OutputPort> outputPorts = workflowProcess.getInsideOutputPorts();

        NamedSet<InputProcessorPort> inputProcessorPorts = new NamedSet<>();
        NamedSet<OutputProcessorPort> outputProcessorPorts = new NamedSet<>();

        for(Process process: workflowProcess.getProcesses()) {
            Processor processor;
            if(process instanceof WorkflowProcess) {
                Workflow childWorkflow = convertWorkflowProcess((WorkflowProcess) process, bundle); // TODO: Add nested relationship
                processor = new Processor(workflow, childWorkflow.getName()); // TODO: Check if we want the processor to have the same name as the childworkflow
                createProcessPortsFromWorkflow(processor, childWorkflow);
                bundle.getWorkflows().add(childWorkflow);
            } else if(process instanceof CommandLineTool) {
                processor = convertCommandLineTool((CommandLineTool) process);
                workflow.getProcessors().add(processor);
            } else {
                assert(process instanceof Reference);
                processor = convertReference((Reference) process);
                workflow.getProcessors().add(processor);
            }
            inputProcessorPorts.addAll(processor.getInputPorts());
            outputProcessorPorts.addAll(processor.getOutputPorts());
        }

        // DataLinks
        for(InputPort port: inputPorts) {
            String senderName = port.getSource();
            String destName = port.getName();
            SenderPort senderPort = outputProcessorPorts.getByName(senderName);
            if(senderPort == null) { // Source is one of the Workflow inputs
                senderPort = workflow.getInputPorts().getByName(senderName);
            }
            ReceiverPort receiverPort = inputProcessorPorts.getByName(destName);
            if(receiverPort == null) { // Destination is one of the Workflow outputs
                receiverPort = workflow.getOutputPorts().getByName(destName);
            }
            new DataLink(workflow, senderPort, receiverPort);
        }

        return workflow;
    }