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;
}
}
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???
}
}
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;
}
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();
}
}
}
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());
}
}
}
Aggregations