Search in sources :

Example 6 with Port

use of org.apache.airavata.workflow.model.graph.Port 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)

Example 7 with Port

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

the class XBayaGUI method activeTabChanged.

private void activeTabChanged() {
    GraphCanvas graphPanel = getGraphCanvas();
    if (graphPanel != null) {
        // Reset the port viewers.
        Port inputPort = graphPanel.getSelectedInputPort();
        Port outputPort = graphPanel.getSelectedOutputPort();
        this.portViewer.setInputPort(inputPort);
        this.portViewer.setOutputPort(outputPort);
        // Reset component viewer.
        Node node = graphPanel.getSelectedNode();
        Component component;
        if (node != null) {
            component = node.getComponent();
        } else {
            component = this.componentSelector.getSelectedComponent();
        }
        this.componentViewer.setComponent(component);
        String name = graphPanel.getWorkflow().getName();
        setFrameName(name);
    } else {
    // TODO what to do when no tabs are present???
    }
}
Also used : Port(org.apache.airavata.workflow.model.graph.Port) Node(org.apache.airavata.workflow.model.graph.Node) Component(org.apache.airavata.workflow.model.component.Component) GraphCanvas(org.apache.airavata.xbaya.ui.graph.GraphCanvas)

Example 8 with Port

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

the class WorkflowModifier method getFinalOutputPorts.

/**
 * @param originalGraph
 * @param graph
 * @return The final output ports.
 */
private Set<WSPort> getFinalOutputPorts(WSGraph originalGraph, WSGraph graph) {
    Collection<Port> inputPorts = GraphUtil.getPorts(graph, Port.Kind.DATA_IN);
    Set<WSPort> originalFromPorts = new HashSet<WSPort>();
    for (Port inputPort : inputPorts) {
        Port fromPort = inputPort.getFromPort();
        if (fromPort == null) {
            // This input port is not connected.
            String inputPortID = inputPort.getID();
            logger.debug("id: " + inputPortID);
            Port originalInputPort = originalGraph.getPort(inputPortID);
            // No duplicate in set.
            Port originalFromPort = originalInputPort.getFromPort();
            originalFromPorts.add((WSPort) originalFromPort);
        }
    }
    return originalFromPorts;
}
Also used : WSPort(org.apache.airavata.workflow.model.graph.ws.WSPort) Port(org.apache.airavata.workflow.model.graph.Port) WSPort(org.apache.airavata.workflow.model.graph.ws.WSPort) HashSet(java.util.HashSet)

Example 9 with Port

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

the class EndDoWhileNode method edgeWasAdded.

/**
 * @throws GraphException
 * @see org.apache.airavata.workflow.model.graph.impl.NodeImpl#edgeWasAdded(org.apache.airavata.workflow.model.graph.Edge)
 */
@Override
protected void edgeWasAdded(Edge edge) throws GraphException {
    // XXX cannot detect if the type is array or not from WSDL at this
    // point. so no check here.
    // super.edgeWasAdded(edge);
    Port fromPort = edge.getFromPort();
    Port toPort = edge.getToPort();
    if (edge instanceof DataEdge) {
        if (fromPort instanceof EPRPort) {
            // TODO
            return;
        }
        DataPort fromDataPort = (DataPort) fromPort;
        DataPort toDataPort = (DataPort) toPort;
        DataType fromType = fromDataPort.getType();
        DataType toType = toDataPort.getType();
        if (fromDataPort.getNode() == this) {
            if (!(toType == null || toType.equals(WSConstants.XSD_ANY_TYPE))) {
                fromDataPort.copyType(toDataPort);
            }
        } else if (toDataPort.getNode() == this) {
            if (!(fromType == null || fromType.equals(WSConstants.XSD_ANY_TYPE))) {
                toDataPort.copyType(fromDataPort);
            }
        } else {
            throw new WorkflowRuntimeException();
        }
    }
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) ComponentDataPort(org.apache.airavata.workflow.model.component.ComponentDataPort) DataEdge(org.apache.airavata.workflow.model.graph.DataEdge) EPRPort(org.apache.airavata.workflow.model.graph.EPRPort) DataPort(org.apache.airavata.workflow.model.graph.DataPort) ComponentDataPort(org.apache.airavata.workflow.model.component.ComponentDataPort) EPRPort(org.apache.airavata.workflow.model.graph.EPRPort) Port(org.apache.airavata.workflow.model.graph.Port) DataType(org.apache.airavata.model.application.io.DataType) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)

Example 10 with Port

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

the class ConstantNode method edgeWasAdded.

/**
 * Called whan an Edge was added to the parameter port. Change the name of this node.
 *
 * @throws GraphException
 *
 * @see org.apache.airavata.workflow.model.graph.impl.NodeImpl#edgeWasAdded(org.apache.airavata.workflow.model.graph.impl.EdgeImpl)
 */
@Override
protected void edgeWasAdded(Edge edge) throws GraphException {
    super.edgeWasAdded(edge);
    // TODO this method can be removed.
    Port toPort = edge.getToPort();
    if (edge instanceof DataEdge) {
        DataPort toDataPort = (DataPort) toPort;
        DataType toType = toDataPort.getType();
        List edges = getEdges();
        if (edges.size() == 1) {
            // The first edge.
            this.type = toType;
        } else if (edges.size() > 1) {
            // Not the first edge.
            if (!toType.equals(WSConstants.XSD_ANY_TYPE) && !this.type.equals(toType)) {
                throw new GraphException("Cannot connect ports with different types.");
            }
        } else {
            // Should not happen.
            throw new WorkflowRuntimeException("edges.size(): " + edges.size());
        }
    }
}
Also used : DataPort(org.apache.airavata.workflow.model.graph.DataPort) GraphException(org.apache.airavata.workflow.model.graph.GraphException) DataEdge(org.apache.airavata.workflow.model.graph.DataEdge) DataPort(org.apache.airavata.workflow.model.graph.DataPort) Port(org.apache.airavata.workflow.model.graph.Port) DataType(org.apache.airavata.model.application.io.DataType) List(java.util.List) WorkflowRuntimeException(org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)

Aggregations

Port (org.apache.airavata.workflow.model.graph.Port)44 DataPort (org.apache.airavata.workflow.model.graph.DataPort)21 Node (org.apache.airavata.workflow.model.graph.Node)20 Point (java.awt.Point)18 InputNode (org.apache.airavata.workflow.model.graph.system.InputNode)18 WSNode (org.apache.airavata.workflow.model.graph.ws.WSNode)12 DataEdge (org.apache.airavata.workflow.model.graph.DataEdge)11 EPRPort (org.apache.airavata.workflow.model.graph.EPRPort)11 WSPort (org.apache.airavata.workflow.model.graph.ws.WSPort)10 GraphException (org.apache.airavata.workflow.model.graph.GraphException)9 OutputNode (org.apache.airavata.workflow.model.graph.system.OutputNode)9 WorkflowRuntimeException (org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException)8 StreamSourceNode (org.apache.airavata.workflow.model.graph.system.StreamSourceNode)8 WSComponentPort (org.apache.airavata.workflow.model.component.ws.WSComponentPort)7 MemoNode (org.apache.airavata.workflow.model.graph.system.MemoNode)7 DataType (org.apache.airavata.model.application.io.DataType)6 Edge (org.apache.airavata.workflow.model.graph.Edge)6 GraphPiece (org.apache.airavata.workflow.model.graph.GraphPiece)6 ConstantNode (org.apache.airavata.workflow.model.graph.system.ConstantNode)6 EndifNode (org.apache.airavata.workflow.model.graph.system.EndifNode)6