public boolean moveEdgeCreationTarget()

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