use of org.apache.airavata.common.utils.Pair in project airavata by apache.
the class WorkflowHarvester method getCandidates.
/**
* @param workflow
* @param dataType
* @return pair of nodeid and portid
*/
private LinkedList<Pair<String, String>> getCandidates(Workflow workflow, QName dataType) {
LinkedList<Pair<String, String>> candidates = new LinkedList<Pair<String, String>>();
List<NodeImpl> nodes = workflow.getGraph().getNodes();
for (NodeImpl node : nodes) {
if (node instanceof WSNode) {
List<DataPort> inputPorts = ((WSNode) node).getInputPorts();
for (DataPort dataPort : inputPorts) {
if (dataType.equals(dataPort.getType())) {
candidates.add(new Pair<String, String>(node.getID(), dataPort.getID()));
}
}
}
}
return candidates;
}
use of org.apache.airavata.common.utils.Pair in project airavata by apache.
the class WorkflowHarvester method getCandidates.
/**
* @param workflow
* @param dataType
* @return pair of nodeid and portid
*/
private LinkedList<Pair<String, String>> getCandidates(Workflow workflow, QName dataType) {
LinkedList<Pair<String, String>> candidates = new LinkedList<Pair<String, String>>();
List<NodeImpl> nodes = workflow.getGraph().getNodes();
for (NodeImpl node : nodes) {
if (node instanceof WSNode) {
List<DataPort> inputPorts = ((WSNode) node).getInputPorts();
for (DataPort dataPort : inputPorts) {
if (dataType.equals(dataPort.getType())) {
candidates.add(new Pair<String, String>(node.getID(), dataPort.getID()));
}
}
}
}
return candidates;
}
use of org.apache.airavata.common.utils.Pair in project airavata by apache.
the class WorkflowHarvester method harvest.
public Workflow[] harvest(Workflow workflow, QName dataType) {
LinkedList<Workflow> harvest = new LinkedList<Workflow>();
LinkedList<Pair<String, String>> candidates = getCandidates(workflow, dataType);
for (Pair<String, String> pair : candidates) {
Workflow clone = workflow.clone();
NodeImpl node = clone.getGraph().getNode(pair.getLeft());
if (null == node) {
throw new WorkflowRuntimeException("Specified node not found:" + pair.getLeft());
}
Port candidatePort = null;
List<DataPort> inPorts = node.getInputPorts();
for (DataPort dataPort : inPorts) {
if (pair.getRight().equals(dataPort.getID())) {
candidatePort = dataPort;
break;
}
}
if (null == candidatePort) {
throw new WorkflowRuntimeException("Specifies Port was not found:" + pair.getRight());
}
if (!(candidatePort.getFromNode() instanceof InputNode)) {
removeUnnecessaryNodes(node, candidatePort, clone);
Node input = clone.addNode(new InputComponent());
input.setPosition(new Point(Math.max(0, node.getPosition().x - 150), node.getPosition().y));
// original
if (clone.getGraph().getNodes().size() < workflow.getGraph().getNodes().size() && // its not the same as one already harvested
!isWorkflowAlreadyHarvested(harvest, clone)) {
try {
clone.getGraph().addEdge(input.getOutputPort(0), candidatePort);
cleanLeftOverInputNodes(clone);
} catch (GraphException e) {
throw new RuntimeException(e);
}
harvest.add(clone);
}
}
}
return harvest.toArray(new Workflow[0]);
}
use of org.apache.airavata.common.utils.Pair in project airavata by apache.
the class WorkflowHarvester method harvest.
public Workflow[] harvest(Workflow workflow, QName dataType) {
LinkedList<Workflow> harvest = new LinkedList<Workflow>();
LinkedList<Pair<String, String>> candidates = getCandidates(workflow, dataType);
for (Pair<String, String> pair : candidates) {
Workflow clone = workflow.clone();
NodeImpl node = clone.getGraph().getNode(pair.getLeft());
if (null == node) {
throw new WorkflowRuntimeException("Specified node not found:" + pair.getLeft());
}
Port candidatePort = null;
List<DataPort> inPorts = node.getInputPorts();
for (DataPort dataPort : inPorts) {
if (pair.getRight().equals(dataPort.getID())) {
candidatePort = dataPort;
break;
}
}
if (null == candidatePort) {
throw new WorkflowRuntimeException("Specifies Port was not found:" + pair.getRight());
}
if (!(candidatePort.getFromNode() instanceof InputNode)) {
removeUnnecessaryNodes(node, candidatePort, clone);
Node input = clone.addNode(new InputComponent());
input.setPosition(new Point(Math.max(0, node.getPosition().x - 150), node.getPosition().y));
// original
if (clone.getGraph().getNodes().size() < workflow.getGraph().getNodes().size() && // its not the same as one already harvested
!isWorkflowAlreadyHarvested(harvest, clone)) {
try {
clone.getGraph().addEdge(input.getOutputPort(0), candidatePort);
cleanLeftOverInputNodes(clone);
} catch (GraphException e) {
throw new RuntimeException(e);
}
harvest.add(clone);
}
}
}
return harvest.toArray(new Workflow[0]);
}
Aggregations