Search in sources :

Example 61 with Node

use of org.apache.airavata.workflow.model.graph.Node in project airavata by apache.

the class WorkflowHarvester method harvest.

public Workflow[] harvest(Workflow workflow, QName dataType) {
    LinkedList<Workflow> harvest = new LinkedList<Workflow>();
    LinkedList<Pair<String, String>> candidates = getCandidates(workflow, dataType);
    for (Pair<String, String> pair : candidates) {
        Workflow clone = workflow.clone();
        NodeImpl node = clone.getGraph().getNode(pair.getLeft());
        if (null == node) {
            throw new WorkflowRuntimeException("Specified node not found:" + pair.getLeft());
        }
        Port candidatePort = null;
        List<DataPort> inPorts = node.getInputPorts();
        for (DataPort dataPort : inPorts) {
            if (pair.getRight().equals(dataPort.getID())) {
                candidatePort = dataPort;
                break;
            }
        }
        if (null == candidatePort) {
            throw new WorkflowRuntimeException("Specifies Port was not found:" + pair.getRight());
        }
        if (!(candidatePort.getFromNode() instanceof InputNode)) {
            removeUnnecessaryNodes(node, candidatePort, clone);
            Node input = clone.addNode(new InputComponent());
            input.setPosition(new Point(Math.max(0, node.getPosition().x - 150), node.getPosition().y));
            // original
            if (clone.getGraph().getNodes().size() < workflow.getGraph().getNodes().size() && // its not the same as one already harvested
            !isWorkflowAlreadyHarvested(harvest, clone)) {
                try {
                    clone.getGraph().addEdge(input.getOutputPort(0), candidatePort);
                    cleanLeftOverInputNodes(clone);
                } catch (GraphException e) {
                    throw new RuntimeException(e);
                }
                harvest.add(clone);
            }
        }
    }
    return harvest.toArray(new Workflow[0]);
}
Also used : InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) InputComponent(org.apache.airavata.workflow.model.component.system.InputComponent) NodeImpl(org.apache.airavata.workflow.model.graph.impl.NodeImpl) DataPort(org.apache.airavata.workflow.model.graph.DataPort) Port(org.apache.airavata.workflow.model.graph.Port) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) Node(org.apache.airavata.workflow.model.graph.Node) Workflow(org.apache.airavata.workflow.model.wf.Workflow) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException) Point(java.awt.Point) LinkedList(java.util.LinkedList) DataPort(org.apache.airavata.workflow.model.graph.DataPort) GraphException(org.apache.airavata.workflow.model.graph.GraphException) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException) Pair(org.apache.airavata.common.utils.Pair)

Example 62 with Node

use of org.apache.airavata.workflow.model.graph.Node in project airavata by apache.

the class Workflow method getWorkflowServiceNodeIDs.

public List<String> getWorkflowServiceNodeIDs() {
    List<NodeImpl> nodes = getGraph().getNodes();
    ArrayList<String> nodeIDs = new ArrayList<String>();
    for (Node node : nodes) {
        if (node instanceof WSNode) {
            nodeIDs.add(node.getID());
        }
    }
    return nodeIDs;
}
Also used : WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) NodeImpl(org.apache.airavata.workflow.model.graph.impl.NodeImpl) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) Node(org.apache.airavata.workflow.model.graph.Node) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) OutputNode(org.apache.airavata.workflow.model.graph.system.OutputNode) ArrayList(java.util.ArrayList)

Example 63 with Node

use of org.apache.airavata.workflow.model.graph.Node in project airavata by apache.

the class WorkflowInterpreter method finish.

private void finish() throws WorkflowException, RegistryException {
    ArrayList<Node> outoutNodes = new ArrayList<Node>();
    List<NodeImpl> nodes = this.getGraph().getNodes();
    for (Node node : nodes) {
        if (node instanceof OutputNode) {
            if (node.getInputPort(0).getFromNode().getState() == NodeExecutionState.FINISHED) {
                outoutNodes.add(node);
            } else {
                // workflowFinished
                return;
            }
        }
    }
    LinkedList<Object> outputValues = new LinkedList<Object>();
    LinkedList<String> outputKeywords = new LinkedList<String>();
    for (Node outputNode : outoutNodes) {
        OutputNode node = (OutputNode) outputNode;
        List<DataPort> inputPorts = node.getInputPorts();
        for (DataPort dataPort : inputPorts) {
            Object val = InterpreterUtil.findInputFromPort(dataPort, this.invokerMap);
            ;
            if (null == val) {
                throw new WorkFlowInterpreterException("Unable to find output for the node:" + node.getID());
            }
            WorkflowNodeDetails workflowNodeDetails = nodeInstanceList.get(node);
            OutputDataObjectType elem = new OutputDataObjectType();
            elem.setName(node.getName());
            elem.setValue(val.toString());
            workflowNodeDetails.addToNodeOutputs(elem);
            try {
                getExperimentCatalog().update(ExperimentCatalogModelType.WORKFLOW_NODE_DETAIL, workflowNodeDetails, workflowNodeDetails.getNodeInstanceId());
            } catch (RegistryException e) {
                log.error(e.getMessage(), e);
            }
            updateWorkflowNodeStatus(workflowNodeDetails, WorkflowNodeState.COMPLETED);
        }
    }
}
Also used : NodeImpl(org.apache.airavata.workflow.model.graph.impl.NodeImpl) DynamicNode(org.apache.airavata.workflow.model.graph.dynamic.DynamicNode) Node(org.apache.airavata.workflow.model.graph.Node) SubWorkflowNode(org.apache.airavata.workflow.model.graph.subworkflow.SubWorkflowNode) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) RegistryException(org.apache.airavata.registry.cpi.RegistryException) DataPort(org.apache.airavata.workflow.model.graph.DataPort) OutputDataObjectType(org.apache.airavata.model.application.io.OutputDataObjectType)

Example 64 with Node

use of org.apache.airavata.workflow.model.graph.Node in project airavata by apache.

the class WorkflowInterpreter method setupNodeDetailsInput.

private void setupNodeDetailsInput(Node node, WorkflowNodeDetails nodeDetails) {
    List<DataPort> inputPorts = node.getInputPorts();
    for (DataPort dataPort : inputPorts) {
        Node fromNode = dataPort.getFromNode();
        String portInputValue = null;
        if (fromNode instanceof InputNode) {
            portInputValue = (String) ((InputNode) fromNode).getDefaultValue();
        } else if (fromNode instanceof WSNode) {
            Map<String, String> outputData = nodeOutputData.get(fromNode);
            portInputValue = outputData.get(dataPort.getName());
            if (portInputValue == null) {
                portInputValue = outputData.get(dataPort.getEdge(0).getFromPort().getName());
            }
        }
        // 123456789
        InputDataObjectType elem = new InputDataObjectType();
        elem.setName(dataPort.getName());
        elem.setValue(portInputValue);
        if (dataPort instanceof WSPort) {
            WSPort port = (WSPort) dataPort;
            elem.setInputOrder(port.getComponentPort().getInputOrder());
            elem.setApplicationArgument((port.getComponentPort().getApplicationArgument() != null ? port.getComponentPort().getApplicationArgument() : ""));
            elem.setType(port.getType());
        }
        nodeDetails.addToNodeInputs(elem);
    }
    try {
        getExperimentCatalog().update(ExperimentCatalogModelType.WORKFLOW_NODE_DETAIL, nodeDetails, nodeDetails.getNodeInstanceId());
    } catch (RegistryException e) {
        log.error(e.getMessage(), e);
    }
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) WSPort(org.apache.airavata.workflow.model.graph.ws.WSPort) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) DynamicNode(org.apache.airavata.workflow.model.graph.dynamic.DynamicNode) Node(org.apache.airavata.workflow.model.graph.Node) SubWorkflowNode(org.apache.airavata.workflow.model.graph.subworkflow.SubWorkflowNode) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) RegistryException(org.apache.airavata.registry.cpi.RegistryException)

Example 65 with Node

use of org.apache.airavata.workflow.model.graph.Node in project airavata by apache.

the class WorkflowInterpreter method runInThread.

private void runInThread(final LinkedList<String> listOfValues, ForEachNode forEachNode, final Node middleNode, List<Node> endForEachNodes, Map<Node, Invoker> tempInvoker, AtomicInteger counter, final Integer[] inputNumber) throws WorkflowException, RegistryException, TException {
    final LinkedList<String> taskIdList = new LinkedList<String>();
    if (inputNumber.length > 1) {
        List<String> inputValues = createInputValues(listOfValues, inputNumber);
        for (final Iterator<String> iterator = inputValues.iterator(); iterator.hasNext(); ) {
            final String input = iterator.next();
            WSComponent wsComponent = (WSComponent) middleNode.getComponent();
            final String invoker2 = createInvokerForEachSingleWSNode(middleNode, wsComponent);
            taskIdList.add(invoker2);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                log.error(e.getLocalizedMessage(), e);
            }
        }
    } else {
        String invoker = null;
        for (Iterator<String> iterator = listOfValues.iterator(); iterator.hasNext(); ) {
            String input = iterator.next();
            WSComponent wsComponent = (WSComponent) middleNode.getComponent();
            taskIdList.add(invoker);
            // find inputs
            List<DataPort> inputPorts = middleNode.getInputPorts();
            // for (DataPort port : inputPorts) {
            // Object inputVal = InterpreterUtil.findInputFromPort(port, this.invokerMap);
            // /*
            // * Handle ForEachNode
            // */
            // Node fromNode = port.getFromNode();
            // // if (fromNode instanceof ForEachNode) {
            // inputVal = WorkflowInputUtil.parseValue((WSComponentPort) port.getComponentPort(), input);
            // // }
            // 
            // if (null == inputVal) {
            // throw new WorkFlowInterpreterException("Unable to find inputs for the node:" + middleNode.getID());
            // }
            // }
            invoker = createInvokerForEachSingleWSNode(middleNode, wsComponent);
        }
    }
    // String arrayElementName = foreachWSNode.getOperationName() +
    // "ArrayResponse";
    // String outputStr = "<" + arrayElementName + ">";
    // invokerMap size and endForEachNodes size can be difference
    // because we can create endForEachNode with n number of input/output
    // ports so always have to use
    // middleNode.getOutputPorts when iterate
    String[] outputStr = new String[middleNode.getOutputPorts().size()];
    int i = 0;
    for (DataPort port : middleNode.getOutputPorts()) {
        String outputString = "";
        // for (Iterator<Invoker> iterator = taskIdList.iterator(); iterator.hasNext();) {
        // Invoker workflowInvoker = iterator.next();
        // 
        // // /
        // Object output = workflowInvoker.getOutput(port.getName());
        // if (output instanceof org.xmlpull.v1.builder.XmlElement) {
        // org.xmlpull.v1.builder.XmlElement element = (org.xmlpull.v1.builder.XmlElement) ((org.xmlpull.v1.builder.XmlElement) output).children()
        // .next();
        // outputString += "\n" + XMLUtil.xmlElementToString(element);
        // } else {
        // outputString += "\n<value>" + output + "</value>";
        // }
        // counter.incrementAndGet();
        // }
        outputStr[i] = outputString;
        System.out.println(outputStr[i]);
        i++;
    }
    i = 0;
    // outputStr += "\n</" + arrayElementName + ">";
    int outputPortIndex = 0;
    for (DataPort port : middleNode.getOutputPorts()) {
        for (Node endForEachNode : endForEachNodes) {
            if (tempInvoker.get(endForEachNode) != null) {
                if (!(endForEachNode instanceof OutputNode)) {
                    ((SystemComponentInvoker) tempInvoker.get(endForEachNode)).addOutput(port.getName(), outputStr[i]);
                }
            }
            outputPortIndex++;
        }
        i++;
    }
    forEachNode.setState(NodeExecutionState.FINISHED);
}
Also used : DynamicNode(org.apache.airavata.workflow.model.graph.dynamic.DynamicNode) Node(org.apache.airavata.workflow.model.graph.Node) SubWorkflowNode(org.apache.airavata.workflow.model.graph.subworkflow.SubWorkflowNode) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) WSComponent(org.apache.airavata.workflow.model.component.ws.WSComponent) DataPort(org.apache.airavata.workflow.model.graph.DataPort)

Aggregations

Node (org.apache.airavata.workflow.model.graph.Node)74 InputNode (org.apache.airavata.workflow.model.graph.system.InputNode)46 WSNode (org.apache.airavata.workflow.model.graph.ws.WSNode)40 DataPort (org.apache.airavata.workflow.model.graph.DataPort)31 DynamicNode (org.apache.airavata.workflow.model.graph.dynamic.DynamicNode)24 Port (org.apache.airavata.workflow.model.graph.Port)20 OutputNode (org.apache.airavata.workflow.model.graph.system.OutputNode)20 StreamSourceNode (org.apache.airavata.workflow.model.graph.system.StreamSourceNode)18 EndForEachNode (org.apache.airavata.workflow.model.graph.system.EndForEachNode)16 ForEachNode (org.apache.airavata.workflow.model.graph.system.ForEachNode)16 MemoNode (org.apache.airavata.workflow.model.graph.system.MemoNode)15 NodeImpl (org.apache.airavata.workflow.model.graph.impl.NodeImpl)14 SubWorkflowNode (org.apache.airavata.workflow.model.graph.subworkflow.SubWorkflowNode)14 WorkflowRuntimeException (org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)13 ConstantNode (org.apache.airavata.workflow.model.graph.system.ConstantNode)12 EndifNode (org.apache.airavata.workflow.model.graph.system.EndifNode)12 IfNode (org.apache.airavata.workflow.model.graph.system.IfNode)12 GraphException (org.apache.airavata.workflow.model.graph.GraphException)11 LinkedList (java.util.LinkedList)9 ArrayList (java.util.ArrayList)8