use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class GraphGUI method getGraphPieceAt.
/**
* Returns the visible object at the specified location. The object is either a Node, a Port, or an Edge.
*
* @param point
* The location
* @return The visible object a the specified location
*/
protected GraphPiece getGraphPieceAt(Point point) {
GraphPiece piece = null;
// Starts from edge because it is drawn first, which means it's at the
// bottom.
double minEdgeDist = Double.MAX_VALUE;
Edge closestEdge = null;
for (Edge edge : this.graph.getEdges()) {
double dist = NodeController.getGUI(edge).getMiddlePosition().distance(point);
if (dist < minEdgeDist) {
closestEdge = edge;
minEdgeDist = dist;
}
}
if (minEdgeDist < 20) {
piece = closestEdge;
}
// Then, each node and ports of it.
for (Node node : this.graph.getNodes()) {
// Check the node first
if (NodeController.getGUI(node).isIn(point)) {
piece = node;
}
// Find the closest port of this node.
double minPortDist = Double.MAX_VALUE;
Port closestPort = null;
for (Port port : node.getAllPorts()) {
double dist = NodeController.getGUI(port).getPosition().distance(point);
if (dist < minPortDist) {
closestPort = port;
minPortDist = dist;
}
}
if (minPortDist <= PortGUI.DATA_PORT_SIZE) {
piece = closestPort;
}
// Don't break from this loop because the later ones are drawn at
// the top of other nodes.
}
return piece;
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class NodeGUI method setPortPositions.
/**
* Sets up the position of ports
*/
protected void setPortPositions() {
// inputs
List<? extends Port> inputPorts = getNode().getInputPorts();
for (int i = 0; i < inputPorts.size(); i++) {
Port port = inputPorts.get(i);
Point offset = new Point(PortGUI.DATA_PORT_SIZE / 2, this.headHeight + PORT_INITIAL_GAP + PORT_GAP * i);
NodeController.getGUI(port).setOffset(offset);
}
// outputs
List<? extends Port> outputPorts = getNode().getOutputPorts();
for (int i = 0; i < outputPorts.size(); i++) {
Port port = outputPorts.get(i);
// Use getBounds() instead of this.dimension because subclass might
// overwrite getBounds() to have different shape.
Point offset = new Point(this.getBounds().width - PortGUI.DATA_PORT_SIZE / 2, this.headHeight + PORT_INITIAL_GAP + PORT_GAP * i);
NodeController.getGUI(port).setOffset(offset);
}
// control-in
Port controlInPort = getNode().getControlInPort();
if (controlInPort != null) {
NodeController.getGUI(controlInPort).setOffset(new Point(0, 0));
}
// control-outs
for (Port controlOutPort : getNode().getControlOutPorts()) {
// By default, all ports will be drawn at the same place. Subclass
// should rearrange them if there are more than one control-out
// ports.
NodeController.getGUI(controlOutPort).setOffset(new Point(getBounds().width, getBounds().height));
}
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class MonitorEventHandler method finishPredecessorNodes.
/**
* Make preceding nodes done. This helps the monitoring GUI when a user subscribes from the middle of the workflow
* execution.
*
* @param node
*/
private void finishPredecessorNodes(Node node) {
for (Port inputPort : node.getInputPorts()) {
for (Edge edge : inputPort.getEdges()) {
Port fromPort = edge.getFromPort();
if (!(fromPort instanceof EPRPort)) {
Node fromNode = fromPort.getNode();
finishNode(fromNode);
finishPredecessorNodes(fromNode);
}
}
}
Port controlInPort = node.getControlInPort();
if (controlInPort != null) {
for (Node fromNode : controlInPort.getFromNodes()) {
finishNode(fromNode);
finishPredecessorNodes(fromNode);
}
}
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class BlockNodeGUI method setPortPositions.
/**
* Sets up the position of ports
*/
@Override
protected void setPortPositions() {
// No input ports
Port controlInPort = this.node.getControlInPort();
if (controlInPort != null) {
NodeController.getGUI(controlInPort).setOffset(new Point(0, 0));
}
// There are two controlOutPorts.
List<? extends Port> controlOutPorts = this.node.getControlOutPorts();
Port controlOutPort1 = controlOutPorts.get(0);
Point offset = new Point(getBounds().width, +getBounds().height / 2);
NodeController.getGUI(controlOutPort1).setOffset(offset);
Port controlOutPort2 = controlOutPorts.get(1);
offset = new Point(this.getBounds().width, getBounds().height);
NodeController.getGUI(controlOutPort2).setOffset(offset);
// No outputs
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class EndBlockNodeGUI method setPortPositions.
/**
* @see org.apache.airavata.xbaya.ui.graph.NodeGUI#setPortPositions()
*/
@Override
protected void setPortPositions() {
// inputs
List<? extends Port> inputPorts = this.node.getInputPorts();
for (int i = 0; i < inputPorts.size(); i++) {
Port port = inputPorts.get(i);
Point offset;
if (i < inputPorts.size() / 2) {
offset = new Point(PortGUI.DATA_PORT_SIZE / 2, this.headHeight + PORT_INITIAL_GAP + PORT_GAP * i);
} else {
offset = new Point(PortGUI.DATA_PORT_SIZE / 2, this.headHeight + PORT_INITIAL_GAP + PORT_GAP * (i + 1));
}
NodeController.getGUI(port).setOffset(offset);
}
// outputs
List<? extends Port> outputPorts = this.node.getOutputPorts();
for (int i = 0; i < outputPorts.size(); i++) {
Port port = outputPorts.get(i);
Point offset = new Point(this.getBounds().width - PortGUI.DATA_PORT_SIZE / 2, (int) (this.headHeight + PORT_INITIAL_GAP + PORT_GAP * (outputPorts.size() / 2.0 + i)));
NodeController.getGUI(port).setOffset(offset);
}
// control-in
Port controlInPort = this.node.getControlInPort();
if (controlInPort != null) {
NodeController.getGUI(controlInPort).setOffset(new Point(0, 0));
}
// control-out
for (Port controlOutPort : this.node.getControlOutPorts()) {
NodeController.getGUI(controlOutPort).setOffset(new Point(getBounds().width, getBounds().height - this.headHeight / 2));
// Has only one
break;
}
}
Aggregations