in taverna-graph-model/src/main/java/org/apache/taverna/workbench/models/graph/GraphController.java [1019:1133]
public boolean moveEdgeCreationTarget(GraphElement graphElement, Point point) {
boolean edgeValid = false;
Object dataflowObject = graphElement.getWorkflowBean();
if (edgeCreationFromSink) {
if (graphElement instanceof GraphNode) {
Object sinkObject = edgeCreationSink.getWorkflowBean();
if (dataflowObject instanceof OutputPort) {
Processor sourceProcessor = portToProcessor
.get(dataflowObject);
if (sourceProcessor != null) {
Processor sinkProcessor = null;
if (sinkObject instanceof Processor)
sinkProcessor = (Processor) sinkObject;
else if (portToProcessor.containsKey(sinkObject))
sinkProcessor = portToProcessor.get(sinkObject);
if (sinkProcessor != null) {
Set<Processor> possibleSinkProcessors = scufl2Tools
.possibleDownStreamProcessors(workflow,
sourceProcessor);
if (possibleSinkProcessors.contains(sinkProcessor)) {
edgeCreationSource = graphElement;
edgeValid = true;
}
}
if (sinkObject instanceof OutputWorkflowPort) {
edgeCreationSource = graphElement;
edgeValid = true;
}
}
} else if (dataflowObject instanceof InputWorkflowPort) {
edgeCreationSource = graphElement;
edgeValid = true;
} else if (dataflowObject instanceof Processor) {
Processor sourceProcessor = (Processor) dataflowObject;
Processor sinkProcessor = null;
if (sinkObject instanceof Processor)
sinkProcessor = (Processor) sinkObject;
else if (portToProcessor.containsKey(sinkObject))
sinkProcessor = portToProcessor.get(sinkObject);
if (sinkProcessor != null) {
Set<Processor> possibleSinkProcessors = scufl2Tools
.possibleDownStreamProcessors(workflow,
sourceProcessor);
if (possibleSinkProcessors.contains(sinkProcessor)) {
edgeCreationSource = graphElement;
edgeValid = true;
}
}
if (sinkObject instanceof OutputWorkflowPort) {
edgeCreationSource = graphElement;
edgeValid = true;
}
}
}
if (!edgeValid)
edgeCreationSource = null;
} else if (edgeCreationFromSource) {
if (graphElement instanceof GraphNode) {
Object sourceObject = edgeCreationSource.getWorkflowBean();
if (dataflowObject instanceof InputPort) {
Processor sinkProcessor = portToProcessor
.get(dataflowObject);
if (sinkProcessor != null) {
Processor sourceProcessor = null;
if (sourceObject instanceof Processor)
sourceProcessor = (Processor) sourceObject;
else if (portToProcessor.containsKey(sourceObject))
sourceProcessor = portToProcessor.get(sourceObject);
if (sourceProcessor != null) {
Set<Processor> possibleSourceProcessors = scufl2Tools
.possibleUpStreamProcessors(workflow,
sinkProcessor);
if (possibleSourceProcessors
.contains(sourceProcessor)) {
edgeCreationSink = graphElement;
edgeValid = true;
}
}
if (sourceObject instanceof InputWorkflowPort) {
edgeCreationSink = graphElement;
edgeValid = true;
}
}
} else if (dataflowObject instanceof OutputWorkflowPort) {
if (sourceObject != null) {
edgeCreationSink = graphElement;
edgeValid = true;
}
} else if (dataflowObject instanceof Processor) {
Processor sinkProcessor = (Processor) dataflowObject;
Processor sourceProcessor = null;
if (sourceObject instanceof Processor)
sourceProcessor = (Processor) sourceObject;
else if (portToProcessor.containsKey(sourceObject))
sourceProcessor = portToProcessor.get(sourceObject);
if (sourceProcessor != null) {
Set<Processor> possibleSourceProcessors = scufl2Tools
.possibleUpStreamProcessors(workflow,
sinkProcessor);
if (possibleSourceProcessors.contains(sourceProcessor)) {
edgeCreationSink = graphElement;
edgeValid = true;
}
}
if (sourceObject instanceof InputWorkflowPort) {
edgeCreationSink = graphElement;
edgeValid = true;
}
}
}
if (!edgeValid)
edgeCreationSink = null;
}
return edgeValid;
}