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