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:
}
}
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");
}
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;
}
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;
}
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");
}
}
Aggregations