use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class BPELScript method getBlockBlock.
// /**
// * @param node
// * @param block
// * @param sequence
// */
// private void addReceive(ReceiveNode node, GpelSequence sequence) {
// String id = node.getID();
// String operationName = id;
//
// // Create this operation and type in WSDL.
// WsdlPortType portType = this.workflowWSDL.addReceivePortType(operationName, node);
// QName portTypeQName = portType.getQName();
//
// // Partner link
// String partnerLinkName = createPartnerLinkName(id);
// XmlNamespace partnerLinkTypeNS = this.targetNamespace;
// String partnerLinkTypeName = id + PARTNER_LINK_TYPE_SUFFIX;
// String myRollName = id + MY_ROLE_SUFFIX;
// this.process.addPartnerLink(partnerLinkName, partnerLinkTypeNS, partnerLinkTypeName, myRollName, null);
// this.workflowWSDL.addPartnerLinkTypeAndRoll(partnerLinkTypeName, myRollName, portTypeQName);
//
// GpelReceive receive = new GpelReceive(this.bpelNS, partnerLinkName, portTypeQName, operationName);
// String variableName = id + INPUT_SUFFIX;
// this.process.addMessageVariable(variableName, WSConstants.XSD_NS, variableName);
// receive.setGpelVariableName(variableName);
// sequence.addActivity(receive);
// }
//
// private void addBlock(BlockNode blockNode, Collection<Node> parentBlock, GpelSequence sequence)
// throws GraphException {
//
// //
// // normal block
// //
// EndBlockNode endBlockNode = getEndBlockNode(blockNode);
// GpelSequence normalSequence = createBlockSequence(blockNode, endBlockNode, true, parentBlock);
// GpelScope scope = new GpelScope(this.bpelNS, normalSequence);
//
// //
// // exception block
// //
// // GpelSequence compensationSequence = createBlockSequence(blockNode,
// // endBlockNode, false, parentBlock);
// // TODO GpelExceptionHandler handler
// // = new GpelExceptionHandler(compensationSequence);
// // scope.add(handler);
//
// sequence.addActivity(scope);
// }
//
// private GpelSequence createBlockSequence(BlockNode blockNode, EndBlockNode endBlockNode, boolean blockBlock,
// Collection<Node> parentBlock) throws GraphException {
// Set<Node> block = getBlockBlock(blockNode, blockBlock);
// parentBlock.removeAll(block);
// GpelSequence sequence = new GpelSequence(this.bpelNS);
// addBlock(block, sequence);
//
// // Create a copy to global variable.
// List<DataPort> outputPorts = endBlockNode.getOutputPorts();
// ArrayList<GpelAssignCopy> copies = new ArrayList<GpelAssignCopy>();
// for (int i = 0; i < outputPorts.size(); i++) {
// DataPort outputPort = outputPorts.get(i);
// String variable = outputPort.getID() + OUTPUT_SUFFIX;
// int index = blockBlock ? i : i + outputPorts.size();
// DataPort inputPort = endBlockNode.getInputPort(index);
// Port fromPort = inputPort.getFromPort();
// GpelAssignCopyFrom from = createAssignCopyFrom(fromPort);
// GpelAssignCopyTo to = new GpelAssignCopyTo(this.bpelNS);
// to.setVariable(variable);
// GpelAssignCopy copy = new GpelAssignCopy(this.bpelNS, from, to);
// copies.add(copy);
// }
// GpelAssign assign = new GpelAssign(this.bpelNS, copies);
// sequence.addActivity(assign);
//
// return sequence;
// }
private Set<Node> getBlockBlock(Node node, boolean blockBlock) throws GraphException {
Set<Node> block = new HashSet<Node>();
int index = blockBlock ? 0 : 1;
Port controlOutPort = node.getControlOutPorts().get(index);
for (Node nextNode : controlOutPort.getToNodes()) {
block.add(nextNode);
getSpecialBlock(nextNode, 0, block, BlockNode.class, EndBlockNode.class);
}
return block;
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class BPELScript 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) {
ComponentPort componentPort = inputPort.getComponentPort();
if (componentPort instanceof WSComponentPort) {
WSComponentPort wsComponentPort = (WSComponentPort) componentPort;
if (wsComponentPort.isOptional()) {
// optional input.
continue;
}
}
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.
List<InputNode> inputNodes = GraphUtil.getNodes(this.graph, InputNode.class);
for (InputNode inputNode : 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.";
warnings.add(message);
}
// XXX bypass some checks for debugging.
String debug = System.getProperty("xbaya.debug");
if (!"true".equalsIgnoreCase(debug)) {
// split/merge are not supported.
List<ForEachNode> splitNodes = GraphUtil.getNodes(this.graph, ForEachNode.class);
List<EndForEachNode> mergeNodes = GraphUtil.getNodes(this.graph, EndForEachNode.class);
if (splitNodes.size() > 0 || mergeNodes.size() > 0) {
String message = "Split/merge are not supported yet.";
warnings.add(message);
}
// block are not supported.
List<BlockNode> blockNodes = GraphUtil.getNodes(this.graph, BlockNode.class);
List<EndBlockNode> endBlockNodes = GraphUtil.getNodes(this.graph, EndBlockNode.class);
if (blockNodes.size() > 0 || endBlockNodes.size() > 0) {
String message = "Blocks/EndBlocks are not supported yet.";
warnings.add(message);
}
// // receive is not supported.
// List<ReceiveNode> receiveNodes = GraphUtil.getNodes(this.graph,
// ReceiveNode.class);
// if (receiveNodes.size() > 0) {
// String message = "Receive is not supported yet.";
// 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 BPELScript method getIfBlock.
// private void addIf(IfNode ifNode, Collection<Node> parentBlock, GpelSequence sequence) throws GraphException {
// //
// // Condition
// //
// String booleanExpression = ifNode.getXPath();
// if (booleanExpression == null) {
// throw new GraphException("XPath cannot be null");
// }
// // replace $1, $2,... with actual value.
// List<? extends Port> inputPorts = ifNode.getInputPorts();
// ArrayList<GpelAssignCopy> copies = new ArrayList<GpelAssignCopy>();
// for (int i = 0; i < inputPorts.size(); i++) {
// Port port = inputPorts.get(i);
// Port fromPort = port.getFromPort();
// if (fromPort != null) {
// String variableName = port.getID() + INPUT_SUFFIX;
//
// GpelVariable ifVar = new GpelVariable(this.process.xml().getNamespace(), variableName);
// XmlNamespace xsdNS = process.xml().lookupNamespaceByName(WSConstants.XSD_NS_URI);
// if (null != xsdNS && xsdNS.getPrefix() != null) {
// ifVar.xml().setAttributeValue("element",
// xsdNS.getPrefix() + ":" + WSConstants.XSD_ANY_TYPE.getLocalPart());
// } else {
// this.process.xml().declareNamespace(WSConstants.XSD_NS);
// ifVar.xml().setAttributeValue("element",
// WSConstants.XSD_NS.getPrefix() + ":" + WSConstants.XSD_ANY_TYPE.getLocalPart());
// }
// this.process.getVariables().addVariable(ifVar);
//
// GpelAssignCopyFrom from = createAssignCopyFrom(fromPort);
// GpelAssignCopyTo to = new GpelAssignCopyTo(this.bpelNS);
// to.setVariable(variableName);
// GpelAssignCopy copy = new GpelAssignCopy(this.bpelNS, from, to);
// copies.add(copy);
//
// booleanExpression = booleanExpression.replaceAll("\\$" + i, "\\$" + variableName);
// }
// }
// if (copies.size() > 0) {
// GpelAssign assign = new GpelAssign(this.bpelNS, copies);
// sequence.addActivity(assign);
// }
// GpelCondition condition = new GpelCondition(this.bpelNS, booleanExpression);
//
// //
// // If block
// //
// EndifNode endifNode = getEndifNode(ifNode);
// GpelSequence ifSequence = createIfSequence(ifNode, endifNode, true, parentBlock);
// GpelIf gpelIf = new GpelIf(this.bpelNS, condition, ifSequence);
//
// //
// // Else block
// //
// GpelSequence elseSequence = createIfSequence(ifNode, endifNode, false, parentBlock);
// GpelElse gpelElse = new GpelElse(this.bpelNS, elseSequence);
// gpelIf.setElse(gpelElse);
//
// //
// // Create global variables for endif.
// //
// for (Port outputPort : endifNode.getOutputPorts()) {
// String variable = outputPort.getID() + OUTPUT_SUFFIX;
// GpelVariable ifVar = new GpelVariable(this.process.xml().getNamespace(), variable);
// XmlNamespace xsdNS = process.xml().lookupNamespaceByName(WSConstants.XSD_NS_URI);
// if (null != xsdNS && xsdNS.getPrefix() != null) {
// ifVar.xml().setAttributeValue("element",
// xsdNS.getPrefix() + ":" + WSConstants.XSD_ANY_TYPE.getLocalPart());
// } else {
// this.process.xml().declareNamespace(WSConstants.XSD_NS);
// ifVar.xml().setAttributeValue("element",
// WSConstants.XSD_NS.getPrefix() + ":" + WSConstants.XSD_ANY_TYPE.getLocalPart());
// }
// this.process.getVariables().addVariable(ifVar);
// }
//
// sequence.addActivity(gpelIf);
// }
//
// private GpelSequence createIfSequence(IfNode ifNode, EndifNode endifNode, boolean ifBlock,
// Collection<Node> parentBlock) throws GraphException {
// Set<Node> block = getIfBlock(ifNode, ifBlock);
// parentBlock.removeAll(block);
// GpelSequence sequence = new GpelSequence(this.bpelNS);
// addBlock(block, sequence);
//
// // Create a copy to global variable.
// List<DataPort> outputPorts = endifNode.getOutputPorts();
// ArrayList<GpelAssignCopy> copies = new ArrayList<GpelAssignCopy>();
// for (int i = 0; i < outputPorts.size(); i++) {
// DataPort outputPort = outputPorts.get(i);
// String variable = outputPort.getID() + OUTPUT_SUFFIX;
// int index = ifBlock ? i : i + outputPorts.size();
// DataPort inputPort = endifNode.getInputPort(index);
// Port fromPort = inputPort.getFromPort();
// GpelAssignCopyFrom from = createAssignCopyFrom(fromPort);
// GpelAssignCopyTo to = new GpelAssignCopyTo(this.bpelNS);
// to.setVariable(variable);
// GpelAssignCopy copy = new GpelAssignCopy(this.bpelNS, from, to);
// copies.add(copy);
// }
// GpelAssign assign = new GpelAssign(this.bpelNS, copies);
// sequence.addActivity(assign);
//
// return sequence;
// }
private Set<Node> getIfBlock(Node node, boolean ifBlock) throws GraphException {
Set<Node> block = new HashSet<Node>();
int index = ifBlock ? 0 : 1;
Port controlOutPort = node.getControlOutPorts().get(index);
for (Node nextNode : controlOutPort.getToNodes()) {
block.add(nextNode);
getSpecialBlock(nextNode, 0, block, IfNode.class, EndifNode.class);
}
return block;
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class GraphCanvas method mousePressed.
private void mousePressed(MouseEvent event) {
Point point = event.getPoint();
// Get focus to handle key board events
this.panel.requestFocusInWindow();
// Get select item
GraphPiece selected = NodeController.getGUI(this.graph).getGraphPieceAt(point);
/*
* Doing Nothing if pressed is on the selected node
*/
if (this.multipleSelectedNodes != null) {
maybeShowPopup(event);
if (this.crtlPressed && this.multipleSelectedNodes.contains(selected)) {
deselectNode((Node) selected);
return;
} else if (this.multipleSelectedNodes.contains(selected)) {
this.mousePoint = point;
this.panel.setCursor(SwingUtil.MOVE_CURSOR);
return;
} else if ((selected instanceof Node) && this.crtlPressed) {
this.mousePoint = point;
this.multipleSelectedNodes.add((Node) selected);
this.panel.setCursor(SwingUtil.MOVE_CURSOR);
selectNodes(this.multipleSelectedNodes);
return;
}
}
// control selection
if ((selected instanceof Node) && this.crtlPressed) {
this.multipleSelectedNodes = new ArrayList<Node>();
if (this.selectedNode != null) {
this.multipleSelectedNodes.add(this.selectedNode);
}
this.multipleSelectedNodes.add((Node) selected);
this.panel.setCursor(SwingUtil.MOVE_CURSOR);
selectNodes(this.multipleSelectedNodes);
return;
}
deselectNode();
deselectEdge();
if (selected instanceof Node) {
Node node = (Node) selected;
selectNode(node);
if (!NodeController.getGUI(node).isInConfig(point)) {
this.draggedNode = node;
NodeController.getGUI(node).setDraggedFlag(true);
this.panel.setCursor(SwingUtil.MOVE_CURSOR);
}
} else if (selected instanceof Port) {
Port port = (Port) selected;
NodeController.getGUI(port).setSelectedFlag(true);
switch(port.getKind()) {
case DATA_IN:
case CONTROL_IN:
selectInputPort(port);
break;
case CONTROL_OUT:
case DATA_OUT:
case EPR:
selectOutputPort(port);
break;
}
this.draggedPort = port;
} else if (selected instanceof Edge) {
Edge edge = (Edge) selected;
selectEdge(edge);
} else {
/*
* If nothing is selected
*/
this.mousePointForSelection = event.getPoint();
}
maybeShowPopup(event);
this.mousePoint = point;
this.panel.repaint();
event.consume();
}
use of org.apache.airavata.workflow.model.graph.Port in project airavata by apache.
the class GraphCanvas method mouseDragged.
private void mouseDragged(MouseEvent event) {
Point point = event.getPoint();
if (editable) {
/*
* Move nodes
*/
if (this.multipleSelectedNodes != null) {
if (point.x < 0) {
point.x = 0;
}
if (point.y < 0) {
point.y = 0;
}
int diffX = point.x - this.mousePoint.x;
int diffY = point.y - this.mousePoint.y;
for (Node node : this.multipleSelectedNodes) {
Point newPoint = new Point();
Point currentPoint = node.getPosition();
newPoint.x = currentPoint.x + diffX;
if (newPoint.x < 0) {
newPoint.x = 0;
}
newPoint.y = currentPoint.y + diffY;
if (newPoint.y < 0) {
newPoint.y = 0;
}
node.setPosition(newPoint);
}
this.panel.repaint();
event.consume();
}
if (this.draggedNode != null) {
if (point.x < 0) {
point.x = 0;
}
if (point.y < 0) {
point.y = 0;
}
int diffX = point.x - this.mousePoint.x;
int diffY = point.y - this.mousePoint.y;
Point newPoint = new Point();
Point currentPoint = this.draggedNode.getPosition();
newPoint.x = currentPoint.x + diffX;
if (newPoint.x < 0) {
newPoint.x = 0;
}
newPoint.y = currentPoint.y + diffY;
if (newPoint.y < 0) {
newPoint.y = 0;
}
this.draggedNode.setPosition(newPoint);
this.panel.repaint();
event.consume();
}
if (this.draggedPort != null) {
GraphPiece piece = NodeController.getGUI(this.graph).getGraphPieceAt(point);
if (piece instanceof Port) {
Port port = (Port) piece;
// pointer.
if (this.draggedPort.getKind() == Kind.DATA_IN && port.getKind() == Kind.DATA_OUT) {
this.panel.setCursor(SwingUtil.CROSSHAIR_CURSOR);
selectOutputPort(port);
} else if (this.draggedPort.getKind() == Kind.DATA_OUT && port.getKind() == Kind.DATA_IN) {
this.panel.setCursor(SwingUtil.CROSSHAIR_CURSOR);
selectInputPort(port);
} else if (this.draggedPort.getKind() == Kind.DATA_IN && port.getKind() == Kind.EPR) {
this.panel.setCursor(SwingUtil.CROSSHAIR_CURSOR);
selectOutputPort(port);
} else if (this.draggedPort.getKind() == Kind.EPR && port.getKind() == Kind.DATA_IN) {
this.panel.setCursor(SwingUtil.CROSSHAIR_CURSOR);
selectInputPort(port);
} else {
this.panel.setCursor(SwingUtil.DEFAULT_CURSOR);
}
} else if (piece instanceof PortAddable) {
PortAddable dynamicNode = (PortAddable) piece;
dynamicNode.getFreeInPort();
this.dynamicNodeWithFreePort = dynamicNode;
} else {
this.panel.setCursor(SwingUtil.DEFAULT_CURSOR);
}
this.panel.repaint();
event.consume();
}
this.mousePoint = point;
// draw rectangle
if (this.mousePointForSelection != null) {
this.panel.repaint();
}
}
}
Aggregations