Search in sources :

Example 21 with Node

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

the class GraphCanvas method mouseMoved.

private void mouseMoved(MouseEvent event) {
    Point point = event.getPoint();
    GraphPiece graphPiece = NodeController.getGUI(this.graph).getGraphPieceAt(point);
    if (graphPiece instanceof Node) {
        Node node = (Node) graphPiece;
        if (NodeController.getGUI(node).isInConfig(point)) {
            this.panel.setCursor(SwingUtil.HAND_CURSOR);
        } else {
            this.panel.setCursor(SwingUtil.DEFAULT_CURSOR);
        }
    } else if (graphPiece instanceof Port) {
        this.panel.setCursor(SwingUtil.CROSSHAIR_CURSOR);
    } else {
        this.panel.setCursor(SwingUtil.DEFAULT_CURSOR);
    }
}
Also used : GraphPiece(org.apache.airavata.workflow.model.graph.GraphPiece) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) DynamicNode(org.apache.airavata.workflow.model.graph.dynamic.DynamicNode) Node(org.apache.airavata.workflow.model.graph.Node) StreamSourceNode(org.apache.airavata.workflow.model.graph.system.StreamSourceNode) DataPort(org.apache.airavata.workflow.model.graph.DataPort) Port(org.apache.airavata.workflow.model.graph.Port) Point(java.awt.Point)

Example 22 with Node

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

the class GraphGUI method paint.

/**
 * @param g
 */
protected void paint(Graphics2D g) {
    // Calcurate the widge of the nodes.
    for (Node node : this.graph.getNodes()) {
        NodeController.getGUI(node).calculatePositions(g);
    }
    LinkedList<Node> nodes = new LinkedList<Node>(this.graph.getNodes());
    List<MemoNode> memoNodes = GraphUtil.getNodes(this.graph, MemoNode.class);
    nodes.removeAll(memoNodes);
    // Paints the edges before nodes.
    for (Edge edge : this.graph.getEdges()) {
        NodeController.getGUI(edge).paint(g);
    }
    // The ports are painted from inside of each node.
    for (Node node : nodes) {
        NodeController.getGUI(node).paint(g);
    }
    // Print memoNodes at last so that they stay on top of everything.
    for (MemoNode node : memoNodes) {
        NodeController.getGUI(node).paint(g);
    }
}
Also used : MemoNode(org.apache.airavata.workflow.model.graph.system.MemoNode) StreamSourceNode(org.apache.airavata.workflow.model.graph.system.StreamSourceNode) Node(org.apache.airavata.workflow.model.graph.Node) MemoNode(org.apache.airavata.workflow.model.graph.system.MemoNode) Edge(org.apache.airavata.workflow.model.graph.Edge) LinkedList(java.util.LinkedList)

Example 23 with Node

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

the class GraphGUI method getBounds.

/**
 * Gets the bounding Rectangle of this Graph.
 *
 * @return A rectangle indicating this component's bounds
 */
protected Rectangle getBounds() {
    Rectangle bounds = new Rectangle();
    for (Node node : this.graph.getNodes()) {
        bounds.add(NodeController.getGUI(node).getBounds());
    }
    final int margin = 10;
    bounds.height += margin;
    bounds.width += margin;
    return bounds;
}
Also used : MemoNode(org.apache.airavata.workflow.model.graph.system.MemoNode) StreamSourceNode(org.apache.airavata.workflow.model.graph.system.StreamSourceNode) Node(org.apache.airavata.workflow.model.graph.Node) Rectangle(java.awt.Rectangle) Point(java.awt.Point)

Example 24 with Node

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

the class JythonScript method writeInvocation.

/**
 * @param node
 * @param thread
 * @param pw
 */
private void writeInvocation(WSNode node, boolean thread, PrintWriter pw) {
    String id = node.getID();
    String wsdlID = getWSDLID(node);
    WSComponent component = node.getComponent();
    QName portTypeQName = component.getPortTypeQName();
    String operation = component.getOperationName();
    pw.println(TAB + "# Invoke " + id + ".");
    pw.println(TAB + id + QNAME_SUFFIX + " = QName('" + portTypeQName.getNamespaceURI() + "', '" + portTypeQName.getLocalPart() + "')");
    pw.println(TAB + wsdlID + " = " + PROPERTIES_VARIABLE + "." + GET_PROPERTY_METHOD + "('" + wsdlID + "')");
    pw.println(TAB + id + INVOKER_SUFFIX + " = " + "(" + id + QNAME_SUFFIX + ", " + wsdlID + ", '" + id + "',");
    pw.println(TAB + TAB + MESSAGE_BOX_URL_VARIABLE + ", " + GFAC_VARIABLE + ", " + NOTIFICATION_VARIABLE + ")");
    pw.println(TAB + "def " + INVOKE_METHOD + id + "():");
    pw.println(TAB + TAB + id + INVOKER_SUFFIX + "." + SETUP_METHOD + "()");
    pw.println(TAB + TAB + id + INVOKER_SUFFIX + "." + SET_OPERATION_METHOD + "('" + operation + "')");
    // Ports
    for (Port port : node.getInputPorts()) {
        String portName = port.getName();
        String value;
        Node fromNode = port.getFromNode();
        if (fromNode instanceof InputNode) {
            value = PROPERTIES_VARIABLE + "." + GET_PROPERTY_METHOD + "('" + fromNode.getID() + "')";
        } else {
            Port fromPort = port.getFromPort();
            value = "" + fromNode.getID() + INVOKER_SUFFIX + "." + GET_OUTPUT_METHOD + "('" + fromPort.getName() + "')";
            // This might try to remove a node that has been removed
            // already, but it's OK.
            this.executingNodes.remove(fromNode);
        }
        pw.println(TAB + TAB + portName + VALUE_SUFFIX + " = " + value);
        pw.println(TAB + TAB + id + INVOKER_SUFFIX + "." + SET_INPUT_METHOD + "('" + portName + "', " + portName + VALUE_SUFFIX + ")");
    }
    pw.println(TAB + TAB + "print 'Invoking " + id + ".'");
    pw.println(TAB + TAB + id + INVOKER_SUFFIX + "." + INVOKE_METHOD + "()");
    if (thread) {
        pw.println(TAB + "thread.start_new_thread(" + INVOKE_METHOD + id + ", ())");
    } else {
        pw.println(TAB + INVOKE_METHOD + id + "()");
    }
    pw.println();
    this.executingNodes.add(node);
}
Also used : InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) QName(javax.xml.namespace.QName) Port(org.apache.airavata.workflow.model.graph.Port) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) IfNode(org.apache.airavata.workflow.model.graph.system.IfNode) MemoNode(org.apache.airavata.workflow.model.graph.system.MemoNode) Node(org.apache.airavata.workflow.model.graph.Node) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) ConstantNode(org.apache.airavata.workflow.model.graph.system.ConstantNode) EndifNode(org.apache.airavata.workflow.model.graph.system.EndifNode) OutputNode(org.apache.airavata.workflow.model.graph.system.OutputNode) WSComponent(org.apache.airavata.workflow.model.component.ws.WSComponent)

Example 25 with Node

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

the class JythonScript method validate.

/**
 * @param warnings
 *            returns the warning messages.
 * @return true if the workflow is valid; false otherwise.
 */
public boolean validate(List<String> warnings) {
    // Empty
    if (this.graph.getNodes().size() == 0) {
        String message = "The workflow is empty.";
        warnings.add(message);
    }
    // Input ports need to be connected.
    Collection<Port> inputPorts = GraphUtil.getPorts(this.graph, Port.Kind.DATA_IN);
    for (Port inputPort : inputPorts) {
        Collection<Port> fromPorts = inputPort.getFromPorts();
        if (fromPorts.size() == 0) {
            Node node = inputPort.getNode();
            String message = node.getID() + " has an unconnected input " + inputPort.getName();
            warnings.add(message);
        }
    }
    // Input nodes need to be connected.
    for (InputNode inputNode : this.inputNodes) {
        if (inputNode.getPort().getToPorts().size() == 0) {
            String message = inputNode.getID() + " is not connected to any service.";
            warnings.add(message);
        }
    }
    // Cycle
    if (GraphUtil.containsCycle(this.graph)) {
        String message = "There is a cycle in the workflow, only acyclic workflows are supported";
        warnings.add(message);
    }
    // Constants are not supported.
    List<ConstantNode> constantNodes = GraphUtil.getNodes(this.graph, ConstantNode.class);
    if (constantNodes.size() > 0) {
        String message = "Constants are not supported for Jython scripts.";
        warnings.add(message);
    }
    // If/endif are not supported.
    List<IfNode> ifNodes = GraphUtil.getNodes(this.graph, IfNode.class);
    List<EndifNode> endifNodes = GraphUtil.getNodes(this.graph, EndifNode.class);
    if (ifNodes.size() > 0 || endifNodes.size() > 0) {
        String message = "If/endif are not supported for Jython scripts.";
        warnings.add(message);
    }
    if (warnings.size() > 0) {
        return false;
    } else {
        // No error.
        return true;
    }
}
Also used : InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) ConstantNode(org.apache.airavata.workflow.model.graph.system.ConstantNode) Port(org.apache.airavata.workflow.model.graph.Port) InputNode(org.apache.airavata.workflow.model.graph.system.InputNode) IfNode(org.apache.airavata.workflow.model.graph.system.IfNode) MemoNode(org.apache.airavata.workflow.model.graph.system.MemoNode) Node(org.apache.airavata.workflow.model.graph.Node) WSNode(org.apache.airavata.workflow.model.graph.ws.WSNode) ConstantNode(org.apache.airavata.workflow.model.graph.system.ConstantNode) EndifNode(org.apache.airavata.workflow.model.graph.system.EndifNode) OutputNode(org.apache.airavata.workflow.model.graph.system.OutputNode) IfNode(org.apache.airavata.workflow.model.graph.system.IfNode) EndifNode(org.apache.airavata.workflow.model.graph.system.EndifNode)

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