Search in sources :

Example 46 with Node

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

the class ComponentViewer method graphCanvasChanged.

/**
 * @see org.apache.airavata.xbaya.ui.graph.GraphCanvasListener#graphCanvasChanged(org.apache.airavata.xbaya.ui.graph.GraphCanvasEvent)
 */
public void graphCanvasChanged(GraphCanvasEvent event) {
    GraphCanvasEventType type = event.getType();
    GraphCanvas graphCanvas = event.getGraphCanvas();
    switch(type) {
        case NODE_SELECTED:
            Node node = graphCanvas.getSelectedNode();
            if (node == null) {
                setComponent(null);
            } else {
                setComponent(node.getComponent());
            }
            break;
        case GRAPH_LOADED:
        case NAME_CHANGED:
        case INPUT_PORT_SELECTED:
        case OUTPUT_PORT_SELECTED:
    }
}
Also used : GraphCanvasEventType(org.apache.airavata.xbaya.ui.graph.GraphCanvasEvent.GraphCanvasEventType) Node(org.apache.airavata.workflow.model.graph.Node) GraphCanvas(org.apache.airavata.xbaya.ui.graph.GraphCanvas)

Example 47 with Node

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

the class XBayaUtil method findEndForEachFor.

/**
 * @param node
 * @return
 */
public static Node findEndForEachFor(ForEachNode node) {
    Collection<Node> toNodes = node.getOutputPort(0).getToNodes();
    if (toNodes.size() != 1) {
        throw new WorkflowRuntimeException("ForEach output does not contain single out-edge");
    }
    Node middleNode = toNodes.iterator().next();
    List<DataPort> outputPorts = middleNode.getOutputPorts();
    for (DataPort dataPort : outputPorts) {
        if (dataPort.getToNodes().size() == 1) {
            Node possibleEndForEachNode = dataPort.getToNodes().get(0);
            if (possibleEndForEachNode instanceof EndForEachNode) {
                return possibleEndForEachNode;
            }
        }
    }
    throw new WorkflowRuntimeException("EndForEachNode not found");
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) EndForEachNode(org.apache.airavata.workflow.model.graph.system.EndForEachNode) ForEachNode(org.apache.airavata.workflow.model.graph.system.ForEachNode) Node(org.apache.airavata.workflow.model.graph.Node) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException) EndForEachNode(org.apache.airavata.workflow.model.graph.system.EndForEachNode)

Example 48 with Node

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

the class GraphUtil method getJoinRequiredNodes.

/**
 * @param wsGraph
 * @return
 */
public static List<Node> getJoinRequiredNodes(WSGraph wsGraph) {
    List<NodeImpl> nodes = wsGraph.getNodes();
    List<Node> ret = new LinkedList<Node>();
    for (NodeImpl node : nodes) {
        if (node.getRequireJoin()) {
            ret.add(node);
        }
    }
    return ret;
}
Also used : NodeImpl(org.apache.airavata.workflow.model.graph.impl.NodeImpl) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) StreamSourceNode(org.apache.airavata.workflow.model.graph.system.StreamSourceNode) 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) LinkedList(java.util.LinkedList)

Example 49 with Node

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

the class GraphUtil method getOutputNodes.

/**
 * @param node
 * @return The output nodes.
 */
public static List<Node> getOutputNodes(Node node) {
    List<Node> outputNodes = new ArrayList<Node>();
    for (Port port : node.getOutputPorts()) {
        Collection<Node> toNodes = port.getToNodes();
        outputNodes.addAll(toNodes);
    }
    return outputNodes;
}
Also used : InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) StreamSourceNode(org.apache.airavata.workflow.model.graph.system.StreamSourceNode) 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) DataPort(org.apache.airavata.workflow.model.graph.DataPort) ControlPort(org.apache.airavata.workflow.model.graph.ControlPort) Port(org.apache.airavata.workflow.model.graph.Port) WSPort(org.apache.airavata.workflow.model.graph.ws.WSPort) EPRPort(org.apache.airavata.workflow.model.graph.EPRPort) ArrayList(java.util.ArrayList)

Example 50 with Node

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

the class WSGraph method topologicalSort.

/**
 * @return
 * @throws GraphException
 */
private LinkedList<Node> topologicalSort() throws GraphException {
    List<EdgeImpl> alledges = this.getEdges();
    HashSet<EdgeImpl> edgeSet = new HashSet<EdgeImpl>(alledges);
    List<Node> workQueue = new LinkedList<Node>(GraphUtil.getInputNodes(this));
    workQueue.addAll(GraphUtil.getStreamSourceNodes(this));
    LinkedList<Node> sortedOrder = new LinkedList<Node>();
    while (!workQueue.isEmpty()) {
        Node currentNode = workQueue.remove(0);
        sortedOrder.add(currentNode);
        List<DataPort> outputPorts = currentNode.getOutputPorts();
        for (DataPort dataPort : outputPorts) {
            List<DataEdge> curentEdges = dataPort.getEdges();
            for (DataEdge dataEdge : curentEdges) {
                edgeSet.remove(dataEdge);
                if (isAllEdgesRemoved(edgeSet, dataEdge.getToPort().getNode())) {
                    workQueue.add(dataEdge.getToPort().getNode());
                }
            }
        }
    }
    if (edgeSet.isEmpty()) {
        return sortedOrder;
    } else {
        throw new GraphException("Graph Topological sorting failed, Graph has at least one cycle");
    }
}
Also used : Node(org.apache.airavata.workflow.model.graph.Node) EdgeImpl(org.apache.airavata.workflow.model.graph.impl.EdgeImpl) LinkedList(java.util.LinkedList) DataPort(org.apache.airavata.workflow.model.graph.DataPort) GraphException(org.apache.airavata.workflow.model.graph.GraphException) DataEdge(org.apache.airavata.workflow.model.graph.DataEdge) HashSet(java.util.HashSet)

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