You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 21:46:00 UTC

[29/51] [partial] incubator-taverna-workbench git commit: temporarily empty repository

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java
deleted file mode 100644
index d434e48..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DefaultGraphEventManager.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import static javax.swing.SwingUtilities.convertPointFromScreen;
-import static javax.swing.SwingUtilities.invokeLater;
-import static net.sf.taverna.t2.workbench.models.graph.GraphController.PortStyle.ALL;
-import static net.sf.taverna.t2.workbench.models.graph.GraphController.PortStyle.NONE;
-
-import java.awt.Component;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.net.URI;
-import java.util.List;
-
-import javax.swing.AbstractAction;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
-
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import uk.org.taverna.scufl2.api.activity.Activity;
-import uk.org.taverna.scufl2.api.common.Scufl2Tools;
-import uk.org.taverna.scufl2.api.core.Processor;
-import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
-
-/**
- * Manager for handling UI events on GraphElements.
- *
- * @author David Withers
- */
-public class DefaultGraphEventManager implements GraphEventManager {
-	private static final URI NESTED_WORKFLOW_URI = URI
-			.create("http://ns.taverna.org.uk/2010/activity/nested-workflow");
-
-	private GraphController graphController;
-	private Component component;
-	private JPopupMenu menu;
-	private MenuManager menuManager;
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	/**
-	 * Constructs a new instance of GraphEventManager.
-	 *
-	 * @param graphController
-	 * @param component
-	 *            component to use when displaying popup menus
-	 */
-	public DefaultGraphEventManager(GraphController graphController, Component component,
-			MenuManager menuManager) {
-		this.graphController = graphController;
-		this.component = component;
-		this.menuManager = menuManager;
-	}
-
-	@Override
-	public void mouseClicked(final GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, final int x, final int y, int screenX, int screenY) {
-		Object dataflowObject = graphElement.getWorkflowBean();
-
-		// For both left and right click - add to selection model
-		if (graphController.getDataflowSelectionModel() != null)
-			graphController.getDataflowSelectionModel().addSelection(dataflowObject);
-
-		if ((button != 2) && !ctrlKey)return;
-
-		// If this was a right click - show a pop-up as well
-		if (dataflowObject == null)
-			menu = menuManager.createContextMenu(graphController.getWorkflow(),
-					graphController.getWorkflow(), component);
-		else {
-			menu = menuManager.createContextMenu(graphController.getWorkflow(),
-					dataflowObject, component);
-			if (dataflowObject instanceof Processor) {
-				final Processor processor = (Processor) dataflowObject;
-				ProcessorBinding processorBinding = scufl2Tools
-						.processorBindingForProcessor(processor,
-								graphController.getProfile());
-				final Activity activity = processorBinding.getBoundActivity();
-				if (menu == null)
-					menu = new JPopupMenu();
-				if (graphElement instanceof GraphNode) {
-					defineMenuForGraphElement(graphElement, x, y, processor,
-							activity);
-				} else if (graphElement instanceof Graph) {
-					defineMenuForGraphBackground(activity);
-				}
-			}
-		}
-
-		if (menu != null) {
-			final Point p = new Point(screenX, screenY);
-			convertPointFromScreen(p, component);
-			invokeLater(new Runnable() {
-				@Override
-				public void run() {
-					menu.show(component, p.x, p.y);
-				}
-			});
-		}
-	}
-
-	@SuppressWarnings("serial")
-	private void defineMenuForGraphBackground(final Activity activity) {
-		if (activity.getType().equals(NESTED_WORKFLOW_URI)) {
-			menu.addSeparator();
-			menu.add(new JMenuItem(new AbstractAction("Hide nested workflow") {
-				@Override
-				public void actionPerformed(ActionEvent ev) {
-					graphController.setExpandNestedDataflow(activity, false);
-					graphController.redraw();
-				}
-			}));
-		}
-	}
-
-	@SuppressWarnings("serial")
-	private void defineMenuForGraphElement(final GraphElement graphElement,
-			final int x, final int y, final Processor processor,
-			final Activity activity) {
-		if (graphController.getPortStyle(processor).equals(NONE)) {
-			menu.addSeparator();
-			menu.add(new JMenuItem(new AbstractAction("Show ports") {
-				@Override
-				public void actionPerformed(ActionEvent ev) {
-					graphController.setPortStyle(processor, ALL);
-					graphController.redraw();
-				}
-			}));
-		} else if (graphController.getPortStyle(processor).equals(ALL)) {
-			menu.addSeparator();
-			menu.add(new JMenuItem(new AbstractAction("Hide ports") {
-				@Override
-				public void actionPerformed(ActionEvent arg0) {
-					graphController.setPortStyle(processor, NONE);
-					graphController.redraw();
-				}
-			}));
-		}
-
-		if (activity.getType().equals(NESTED_WORKFLOW_URI)) {
-			menu.addSeparator();
-			menu.add(new JMenuItem(new AbstractAction("Show nested workflow") {
-				@Override
-				public void actionPerformed(ActionEvent arg0) {
-					graphController.setExpandNestedDataflow(activity, true);
-					graphController.redraw();
-				}
-			}));
-		}
-
-		menu.addSeparator();
-
-		GraphNode graphNode = (GraphNode) graphElement;
-
-		List<GraphNode> sourceNodes = graphNode.getSourceNodes();
-		if (sourceNodes.size() == 1) {
-			final GraphNode sourceNode = sourceNodes.get(0);
-			if (sourceNode.getLabel() != null) {
-				menu.add(new JMenuItem(new AbstractAction("Link from output '"
-						+ sourceNode.getLabel() + "'") {
-					@Override
-					public void actionPerformed(ActionEvent arg0) {
-						graphController.startEdgeCreation(sourceNode,
-								new Point(x, y));
-					}
-				}));
-			}
-		} else if (sourceNodes.size() > 0) {
-			JMenu linkMenu = new JMenu("Link from output...");
-			menu.add(linkMenu);
-			for (final GraphNode sourceNode : sourceNodes) {
-				linkMenu.add(new JMenuItem(new AbstractAction(sourceNode
-						.getLabel()) {
-					@Override
-					public void actionPerformed(ActionEvent arg0) {
-						graphController.startEdgeCreation(sourceNode,
-								new Point(x, y));
-					}
-				}));
-			}
-		}
-
-		List<GraphNode> sinkNodes = graphNode.getSinkNodes();
-		if (sinkNodes.size() == 1) {
-			final GraphNode sinkNode = sinkNodes.get(0);
-			if (sinkNode.getLabel() != null) {
-				menu.add(new JMenuItem(new AbstractAction("Link to input '"
-						+ sinkNode.getLabel() + "'") {
-					@Override
-					public void actionPerformed(ActionEvent arg0) {
-						graphController.startEdgeCreation(sinkNode, new Point(
-								x, y));
-					}
-				}));
-			}
-		} else if (sinkNodes.size() > 0) {
-			JMenu linkMenu = new JMenu("Link to input...");
-			menu.add(linkMenu);
-			for (final GraphNode sinkNode : sinkNodes) {
-				linkMenu.add(new JMenuItem(new AbstractAction(sinkNode
-						.getLabel()) {
-					@Override
-					public void actionPerformed(ActionEvent arg0) {
-						graphController.startEdgeCreation(sinkNode, new Point(
-								x, y));
-					}
-				}));
-			}
-		}
-	}
-
-	@Override
-	public void mouseDown(GraphElement graphElement, short button,
-			boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y,
-			int screenX, int screenY) {
-		if (button == 0)
-			graphController.startEdgeCreation(graphElement, new Point(x, y));
-	}
-
-	@Override
-	public void mouseUp(GraphElement graphElement, short button,
-			boolean altKey, boolean ctrlKey, boolean metaKey, final int x,
-			final int y, int screenX, int screenY) {
-		if (button == 0)
-			graphController.stopEdgeCreation(graphElement, new Point(screenX,
-					screenY));
-	}
-
-	@Override
-	public void mouseMoved(GraphElement graphElement, short button,
-			boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y,
-			int screenX, int screenY) {
-		graphController.moveEdgeCreationTarget(graphElement, new Point(x, y));
-	}
-
-	@Override
-	public void mouseOver(GraphElement graphElement, short button,
-			boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y,
-			int screenX, int screenY) {
-		if (graphElement.getWorkflowBean() != null)
-			graphElement.setActive(true);
-	}
-
-	@Override
-	public void mouseOut(GraphElement graphElement, short button,
-			boolean altKey, boolean ctrlKey, boolean metaKey, int x, int y,
-			int screenX, int screenY) {
-		if (graphElement.getWorkflowBean() != null)
-			graphElement.setActive(false);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java
deleted file mode 100644
index 07cdbad..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/DotWriter.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import static java.lang.String.format;
-import static net.sf.taverna.t2.workbench.models.graph.Graph.Alignment.HORIZONTAL;
-import static net.sf.taverna.t2.workbench.models.graph.Graph.Alignment.VERTICAL;
-import static net.sf.taverna.t2.workbench.models.graph.GraphElement.LineStyle.NONE;
-import static net.sf.taverna.t2.workbench.models.graph.GraphShapeElement.Shape.RECORD;
-
-import java.awt.Color;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-
-import net.sf.taverna.t2.workbench.models.graph.Graph.Alignment;
-
-/**
- * Writer for creating a graphical representation of a Graph in the DOT language.
- * 
- * @author David Withers
- */
-public class DotWriter {
-	private static final String EOL = System.getProperty("line.separator");
-
-	private Writer writer;
-
-	/**
-	 * Constructs a new instance of DotWriter.
-	 *
-	 * @param writer
-	 */
-	public DotWriter(Writer writer) {
-		this.writer = writer;
-	}
-
-	/**
-	 * Writes a graphical representation of a Graph in the DOT language to a Writer.
-	 * 
-	 * @param graph
-	 * @throws IOException
-	 */
-	public void writeGraph(Graph graph) throws IOException {
-		writeLine("digraph \"" + graph.getId() + "\" {");
-
-		// Overall graph style
-		writeLine(" graph [");
-		writeLine("  bgcolor=\"" + getHexValue(graph.getFillColor()) + "\"");
-		writeLine("  color=\"black\"");
-		writeLine("  fontsize=\"10\"");
-		writeLine("  labeljust=\"left\"");
-		writeLine("  clusterrank=\"local\"");
-		writeLine("  ranksep=\"0.22\"");
-		writeLine("  nodesep=\"0.05\"");
-		// Set left to right view if alignment is horizontal
-		if (graph.getAlignment().equals(HORIZONTAL))
-			writeLine("  rankdir=\"LR\"");
-		writeLine(" ]");
-
-		// Overall node style
-		writeLine(" node [");
-		writeLine("  fontname=\"Helvetica\"");
-		writeLine("  fontsize=\"10\"");
-		writeLine("  fontcolor=\"black\"");
-		writeLine("  shape=\"record\"");
-		writeLine("  height=\"0\"");
-		writeLine("  width=\"0\"");
-		writeLine("  color=\"black\"");
-		writeLine("  fillcolor=\"lightgoldenrodyellow\"");
-		writeLine("  style=\"filled\"");
-		writeLine(" ];");
-
-		// Overall edge style
-		writeLine(" edge [");
-		writeLine("  fontname=\"Helvetica\"");
-		writeLine("  fontsize=\"8\"");
-		writeLine("  fontcolor=\"black\"");
-		writeLine("  color=\"black\"");
-		writeLine(" ];");
-
-		for (GraphNode node : graph.getNodes()) {
-			if (node.isExpanded())
-				writeSubGraph(node.getGraph(), " ");
-			else
-				writeNode(node, graph.getAlignment(), " ");
-		}
-
-		for (Graph subGraph : graph.getSubgraphs())
-			writeSubGraph(subGraph, " ");
-
-		for (GraphEdge edge : graph.getEdges())
-			writeEdges(edge, graph.getAlignment(), " ");
-
-		writeLine("}");
-	}
-
-	private void writeSubGraph(Graph graph, String indent) throws IOException {
-		writeLine(format("%ssubgraph \"cluster_%s\" {", indent, graph.getId()));
-		writeLine(format("%s rank=\"same\"", indent));
-
-		StringBuilder style = new StringBuilder();
-		if (graph.getFillColor() != null) {
-			writeLine(format("%s fillcolor=\"%s\"", indent,
-					getHexValue(graph.getFillColor())));
-			style.append("filled");
-		}
-		if (graph.getLineStyle() != null) {
-			style.append(style.length() == 0 ? "" : ",");
-			if (graph.getLineStyle().equals(NONE))
-				style.append("invis");
-			else
-				style.append(graph.getLineStyle().toString().toLowerCase());
-		}
-		writeLine(format("%s style=\"%s\"", indent, style));
-
-		if (graph.getLabel() != null)
-			writeLine(format("%s label=\"%s\"", indent, graph.getLabel()));
-
-		for(GraphNode node : graph.getNodes()) {
-			if (node.isExpanded())
-				writeSubGraph(node.getGraph(), indent + " ");
-			else
-				writeNode(node, graph.getAlignment(), indent + " ");
-		}
-
-		for (Graph subGraph : graph.getSubgraphs())
-			writeSubGraph(subGraph, indent + " ");
-
-		for (GraphEdge edge : graph.getEdges())
-			writeEdges(edge, graph.getAlignment(), indent + " ");
-
-		writeLine(indent + "}");
-	}
-
-	private void writeEdges(GraphEdge edge, Alignment alignment, String indent) throws IOException {
-		GraphNode source = edge.getSource();
-		GraphNode sink = edge.getSink();
-		String sourceId = "\"" + source.getId() + "\"";
-		String sinkId = "\"" + sink.getId() + "\"";
-		
-		if (source.getParent() instanceof GraphNode) {
-			GraphNode parent = (GraphNode) source.getParent();
-			sourceId = "\"" + parent.getId() + "\":" + sourceId;
-		}
-		if (sink.getParent() instanceof GraphNode) {
-			GraphNode parent = (GraphNode) sink.getParent();
-			sinkId = "\"" + parent.getId() + "\":" + sinkId;
-		}
-		/*
-		 * the compass point is required with newer versions of dot (e.g.
-		 * 2.26.3) but is not compatible with older versions (e.g. 1.3)
-		 */
-		if (alignment.equals(HORIZONTAL)) {
-			sourceId = sourceId + ":e";
-			sinkId = sinkId + ":w";
-		} else {
-			sourceId = sourceId + ":s";
-			sinkId = sinkId + ":n";			
-		}
-		writeLine(format("%s%s -> %s [", indent, sourceId, sinkId));
-		writeLine(format("%s arrowhead=\"%s\"", indent, edge
-				.getArrowHeadStyle().toString().toLowerCase()));
-		writeLine(format("%s, arrowtail=\"%s\"", indent, edge
-				.getArrowTailStyle().toString().toLowerCase()));
-		if (edge.getColor() != null)
-			writeLine(format("%s color=\"%s\"", indent,
-					getHexValue(edge.getColor())));
-		writeLine(format("%s]", indent));
-	}
-
-	private void writeNode(GraphNode node, Alignment alignment, String indent) throws IOException {
-		writeLine(format("%s\"%s\" [", indent, node.getId()));
-
-		StringBuilder style = new StringBuilder();
-		if (node.getFillColor() != null) {
-			writeLine(format("%s fillcolor=\"%s\"", indent,
-					getHexValue(node.getFillColor())));
-			style.append("filled");
-		}
-		if (node.getLineStyle() != null) {
-			style.append(style.length() == 0 ? "" : ",");
-			style.append(node.getLineStyle().toString().toLowerCase());
-		}
-		writeLine(format("%s style=\"%s\"", indent, style));
-
-		writeLine(format("%s shape=\"%s\"", indent, node.getShape().toString().toLowerCase()));
-		writeLine(format("%s width=\"%s\"", indent, node.getWidth() / 72f));
-		writeLine(format("%s height=\"%s\"", indent, node.getHeight() / 72f));
-
-		if (node.getShape().equals(RECORD)) {
-			StringBuilder labelString = new StringBuilder();
-			if (alignment.equals(VERTICAL)) {
-				labelString.append("{{");
-				addNodeLabels(node.getSinkNodes(), labelString);
-				labelString.append("}|").append(node.getLabel()).append("|{");
-				addNodeLabels(node.getSourceNodes(), labelString);
-				labelString.append("}}");
-			} else {
-				labelString.append(node.getLabel()).append("|{{");
-				addNodeLabels(node.getSinkNodes(), labelString);
-				labelString.append("}|{");
-				addNodeLabels(node.getSourceNodes(), labelString);
-				labelString.append("}}");
-			}
-			writeLine(format("%s label=\"%s\"", indent, labelString));
-		} else {
-			writeLine(format("%s label=\"%s\"", indent, node.getLabel()));
-		}
-
-		writeLine(format("%s];", indent));
-	}
-
-	private void addNodeLabels(List<GraphNode> nodes, StringBuilder labelString) {
-		String sep = "";
-		for (GraphNode node : nodes)
-			if (node.getLabel() != null) {
-				labelString.append(sep);
-				labelString.append("<");
-				labelString.append(node.getId());
-				labelString.append(">");
-				labelString.append(node.getLabel());
-				sep = "|";
-			}
-	}
-
-	private String getHexValue(Color color) {
-		return format("#%02x%02x%02x", color.getRed(), color.getGreen(),
-				color.getBlue());
-	}
-
-	private void writeLine(String line) throws IOException {
-		writer.write(line);
-		writer.write(EOL);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java
deleted file mode 100644
index 0ff3852..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/Graph.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * A graph model of a dataflow.
- * 
- * @author David Withers
- */
-public class Graph extends GraphShapeElement {
-	public enum Alignment {
-		HORIZONTAL, VERTICAL
-	}
-
-	private List<GraphNode> nodes = new ArrayList<>();
-	private Set<GraphEdge> edges = new HashSet<>();
-	private Set<Graph> subgraphs = new HashSet<>();
-	private Alignment alignment = Alignment.VERTICAL;
-
-	/**
-	 * Constructs a Graph that uses the specified GraphEventManager to handle
-	 * any user generated events on GraphElements.
-	 * 
-	 * @param eventManager
-	 */
-	public Graph(GraphController graphController) {
-		super(graphController);
-	}
-
-	/**
-	 * Adds an edge to the Graph and sets its parent to be this Graph.
-	 * 
-	 * @param edge
-	 *            the edge to add
-	 */
-	public void addEdge(GraphEdge edge) {
-		edge.setParent(this);
-		edges.add(edge);
-	}
-
-	/**
-	 * Adds a node to the Graph and sets its parent to be this Graph.
-	 * 
-	 * @param node
-	 *            the node to add
-	 */
-	public void addNode(GraphNode node) {
-		node.setParent(this);
-		nodes.add(node);
-	}
-
-	/**
-	 * Adds a subgraph to the Graph and sets its parent to be this Graph.
-	 * 
-	 * @param subgraph
-	 *            the subgraph to add
-	 */
-	public void addSubgraph(Graph subgraph) {
-		subgraph.setParent(this);
-		subgraphs.add(subgraph);
-	}
-
-	/**
-	 * Returns the alignment of the Graph.
-	 * 
-	 * @return the alignment of the Graph
-	 */
-	public Alignment getAlignment() {
-		return alignment;
-	}
-
-	/**
-	 * Returns the edges contained in the Graph.
-	 * 
-	 * @return the edges contained in the Graph
-	 */
-	public Set<GraphEdge> getEdges() {
-		return Collections.unmodifiableSet(edges);
-	}
-
-	/**
-	 * Returns the nodes contained in the Graph.
-	 * 
-	 * @return the nodes contained in the Graph
-	 */
-	public List<GraphNode> getNodes() {
-		return Collections.unmodifiableList(nodes);
-	}
-
-	/**
-	 * Returns the subgraphs contained in the Graph.
-	 * 
-	 * @return the subgraphs contained in the Graph
-	 */
-	public Set<Graph> getSubgraphs() {
-		return Collections.unmodifiableSet(subgraphs);
-	}
-
-	/**
-	 * Removes an edge from the Graph.
-	 * 
-	 * @param edge
-	 *            the edge to remove
-	 * @return true if the edge is removed from the Graph
-	 */
-	public boolean removeEdge(GraphEdge edge) {
-		return edges.remove(edge);
-	}
-
-	/**
-	 * Removes a node from the Graph.
-	 * 
-	 * @param node
-	 *            the node to remove
-	 * @return true if the node is removed from the Graph
-	 */
-	public boolean removeNode(GraphNode node) {
-		return nodes.remove(node);
-	}
-
-	/**
-	 * Removes a subgraph from the Graph.
-	 * 
-	 * @param subgraph
-	 *            the subgraph to remove
-	 * @return true if the subgraph is removed from the Graph
-	 */
-	public boolean removeSubgraph(Graph subgraph) {
-		return subgraphs.remove(subgraph);
-	}
-
-	/**
-	 * Sets the alignment of the Graph.
-	 * 
-	 * @param alignment
-	 *            the new alignment
-	 */
-	public void setAlignment(Alignment alignment) {
-		this.alignment = alignment;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java
deleted file mode 100644
index 1f44076..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphColorManager.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import java.awt.Color;
-import java.lang.reflect.InvocationTargetException;
-
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-
-import org.apache.commons.beanutils.PropertyUtils;
-
-import uk.org.taverna.scufl2.api.activity.Activity;
-
-/**
- * Manages the colour of elements in a graph.
- *
- * @author David Withers
- * @author Start Owen
- */
-public class GraphColorManager {
-	private static final String BEANSHELL = "http://ns.taverna.org.uk/2010/activity/beanshell";
-	private static final String LOCALWORKER = "http://ns.taverna.org.uk/2010/activity/localworker";
-
-	private static Color[] subGraphFillColors = new Color[] {
-			Color.decode("#ffffff"), Color.decode("#f0f8ff"),
-			Color.decode("#faebd7"), Color.decode("#f5f5dc") };
-
-	/**
-	 * Returns the colour associated with the Activity.
-	 *
-	 * For unknown activities Color.WHITE is returned.
-	 *
-	 * For {@link LocalworkerActivity} which have been user configured use the
-	 * BeanshellActivity colour
-	 *
-	 * @return the colour associated with the Activity
-	 */
-	public static Color getFillColor(Activity activity, ColourManager colourManager) {
-		try {
-			if (activity.getType().equals(LOCALWORKER)) {
-				// To avoid compile time dependency - read isAltered property as bean
-				if (Boolean.TRUE.equals(PropertyUtils.getProperty(activity, "altered"))) {
-					Color colour = colourManager.getPreferredColour(BEANSHELL);
-					return colour;
-				}
-			}
-		} catch (IllegalAccessException | InvocationTargetException
-				| NoSuchMethodException e) {
-		}
-		Color colour = colourManager.getPreferredColour(activity.getType().toASCIIString());
-		return colour;
-	}
-
-	public static Color getSubGraphFillColor(int depth) {
-		return subGraphFillColors[depth % subGraphFillColors.length];
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java
deleted file mode 100644
index 0fb87a4..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphController.java
+++ /dev/null
@@ -1,1276 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import static javax.swing.JOptionPane.PLAIN_MESSAGE;
-import static javax.swing.JOptionPane.showInputDialog;
-import static javax.swing.JOptionPane.showMessageDialog;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Point;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import net.sf.taverna.t2.lang.observer.Observable;
-import net.sf.taverna.t2.lang.observer.Observer;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.edits.CompoundEdit;
-import net.sf.taverna.t2.workbench.edits.Edit;
-import net.sf.taverna.t2.workbench.edits.EditException;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.models.graph.Graph.Alignment;
-import net.sf.taverna.t2.workbench.models.graph.GraphEdge.ArrowStyle;
-import net.sf.taverna.t2.workbench.models.graph.GraphElement.LineStyle;
-import net.sf.taverna.t2.workbench.models.graph.GraphShapeElement.Shape;
-import net.sf.taverna.t2.workbench.selection.DataflowSelectionModel;
-import net.sf.taverna.t2.workbench.selection.events.DataflowSelectionMessage;
-import net.sf.taverna.t2.workflow.edits.AddDataLinkEdit;
-import net.sf.taverna.t2.workflow.edits.RemoveDataLinkEdit;
-
-import org.apache.log4j.Logger;
-
-import uk.org.taverna.scufl2.api.activity.Activity;
-import uk.org.taverna.scufl2.api.common.NamedSet;
-import uk.org.taverna.scufl2.api.common.Scufl2Tools;
-import uk.org.taverna.scufl2.api.common.WorkflowBean;
-import uk.org.taverna.scufl2.api.core.BlockingControlLink;
-import uk.org.taverna.scufl2.api.core.ControlLink;
-import uk.org.taverna.scufl2.api.core.DataLink;
-import uk.org.taverna.scufl2.api.core.Processor;
-import uk.org.taverna.scufl2.api.core.Workflow;
-import uk.org.taverna.scufl2.api.port.InputActivityPort;
-import uk.org.taverna.scufl2.api.port.InputPort;
-import uk.org.taverna.scufl2.api.port.InputProcessorPort;
-import uk.org.taverna.scufl2.api.port.InputWorkflowPort;
-import uk.org.taverna.scufl2.api.port.OutputActivityPort;
-import uk.org.taverna.scufl2.api.port.OutputPort;
-import uk.org.taverna.scufl2.api.port.OutputProcessorPort;
-import uk.org.taverna.scufl2.api.port.OutputWorkflowPort;
-import uk.org.taverna.scufl2.api.port.Port;
-import uk.org.taverna.scufl2.api.port.ProcessorPort;
-import uk.org.taverna.scufl2.api.port.ReceiverPort;
-import uk.org.taverna.scufl2.api.port.SenderPort;
-import uk.org.taverna.scufl2.api.port.WorkflowPort;
-import uk.org.taverna.scufl2.api.profiles.ProcessorBinding;
-import uk.org.taverna.scufl2.api.profiles.Profile;
-
-/**
- * @author David Withers
- */
-public abstract class GraphController implements
-		Observer<DataflowSelectionMessage> {
-	public enum PortStyle {
-		ALL {
-			@Override
-			Shape inputShape() {
-				return Shape.INVHOUSE;
-			}
-
-			@Override
-			Shape outputShape() {
-				return Shape.HOUSE;
-			}
-
-			@Override
-			Shape processorShape() {
-				return Shape.RECORD;
-			}
-		},
-		BOUND {
-			@Override
-			Shape inputShape() {
-				return Shape.INVHOUSE;
-			}
-
-			@Override
-			Shape outputShape() {
-				return Shape.HOUSE;
-			}
-
-			@Override
-			Shape processorShape() {
-				return Shape.RECORD;
-			}
-		},
-		NONE {
-			@Override
-			Shape inputShape() {
-				return Shape.BOX;
-			}
-
-			@Override
-			Shape outputShape() {
-				return Shape.BOX;
-			}
-
-			@Override
-			Shape processorShape() {
-				return Shape.BOX;
-			}
-		},
-		BLOB {
-			@Override
-			Shape inputShape() {
-				return Shape.CIRCLE;
-			}
-
-			@Override
-			Shape outputShape() {
-				return Shape.CIRCLE;
-			}
-
-			@Override
-			Shape processorShape() {
-				return Shape.CIRCLE;
-			}
-		};
-
-		abstract Shape inputShape();
-
-		abstract Shape outputShape();
-
-		abstract Shape processorShape();
-
-		Shape mergeShape() {
-			return Shape.CIRCLE;
-		}
-	}
-
-	private static Logger logger = Logger.getLogger(GraphController.class);
-
-	private Map<String, GraphElement> idToElement = new HashMap<>();
-	private Map<WorkflowBean, GraphElement> workflowToGraph = new HashMap<>();
-	private Map<Port, GraphNode> ports = new HashMap<>();
-	private Map<Graph, GraphNode> inputControls = new HashMap<>();
-	private Map<Graph, GraphNode> outputControls = new HashMap<>();
-	private Map<Port, Port> nestedWorkflowPorts = new HashMap<>();
-	private Map<WorkflowPort, ProcessorPort> workflowPortToProcessorPort = new HashMap<>();
-	private Map<Port, Processor> portToProcessor = new HashMap<>();
-
-	private EditManager editManager;
-	private final Workflow workflow;
-	private final Profile profile;
-	private DataflowSelectionModel dataflowSelectionModel;
-	private GraphEventManager graphEventManager;
-	private Component componentForPopups;
-
-	// graph settings
-	private PortStyle portStyle = PortStyle.NONE;
-	private Map<Processor, PortStyle> processorPortStyle = new HashMap<>();
-	private Alignment alignment = Alignment.VERTICAL;
-	private boolean expandNestedDataflows = true;
-	private Map<Activity, Boolean> dataflowExpansion = new HashMap<>();
-	protected Map<String, GraphElement> graphElementMap = new HashMap<>();
-	protected GraphElement edgeCreationSource, edgeCreationSink;
-	protected GraphEdge edgeMoveElement;
-	protected boolean edgeCreationFromSource = false;
-	protected boolean edgeCreationFromSink = false;
-	private Graph graph;
-	private boolean interactive;
-	private final ColourManager colourManager;
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	public GraphController(Workflow workflow, Profile profile,
-			boolean interactive, Component componentForPopups,
-			EditManager editManager, MenuManager menuManager,
-			ColourManager colourManager) {
-		this(workflow, profile, interactive, componentForPopups,
-				Alignment.VERTICAL, PortStyle.NONE, editManager, menuManager,
-				colourManager);
-	}
-
-	public GraphController(Workflow workflow, Profile profile,
-			boolean interactive, Component componentForPopups,
-			Alignment alignment, PortStyle portStyle, EditManager editManager,
-			MenuManager menuManager, ColourManager colourManager) {
-		this.workflow = workflow;
-		this.profile = profile;
-		this.interactive = interactive;
-		this.componentForPopups = componentForPopups;
-		this.alignment = alignment;
-		this.portStyle = portStyle;
-		this.editManager = editManager;
-		this.colourManager = colourManager;
-		this.graphEventManager = new DefaultGraphEventManager(this,
-				componentForPopups, menuManager);
-		graph = generateGraph();
-	}
-
-	public abstract Graph createGraph();
-
-	public abstract GraphNode createGraphNode();
-
-	public abstract GraphEdge createGraphEdge();
-
-	public void mapElement(String id, GraphElement element) {
-		idToElement.put(id, element);
-	}
-
-	public GraphElement getElement(String id) {
-		return idToElement.get(id);
-	}
-
-	public Graph getGraph() {
-		return graph;
-	}
-
-	public abstract void redraw();
-
-	/**
-	 * Generates a graph model of a dataflow.
-	 * 
-	 * @return
-	 */
-	public Graph generateGraph() {
-		workflowToGraph.clear();
-		ports.clear();
-		inputControls.clear();
-		outputControls.clear();
-		nestedWorkflowPorts.clear();
-		workflowPortToProcessorPort.clear();
-		graphElementMap.clear();
-		portToProcessor.clear();
-		return generateGraph(workflow, "", workflow.getName(), 0);
-	}
-
-	private Graph generateGraph(Workflow dataflow, String prefix, String name,
-			int depth) {
-		Graph graph = createGraph();
-		graph.setId(prefix + name);
-		graph.setAlignment(getAlignment());
-		if (getPortStyle().equals(PortStyle.BLOB) || depth == 0)
-			graph.setLabel("");
-		else
-			graph.setLabel(name);
-		graph.setFillColor(GraphColorManager.getSubGraphFillColor(depth));
-		if (depth == 0)
-			graph.setLineStyle(LineStyle.NONE);
-		else
-			graph.setLineStyle(LineStyle.SOLID);
-		graph.setColor(Color.BLACK);
-		graph.setShape(Shape.BOX);
-
-		if (depth == 0)
-			graph.setWorkflowBean(dataflow);
-		if (interactive)
-			graph.setWorkflowBean(dataflow);
-
-		// processors
-		for (Processor processor : dataflow.getProcessors())
-			graph.addNode(generateProcessorNode(processor, graph.getId(), depth));
-
-		// dataflow outputs
-		NamedSet<OutputWorkflowPort> outputPorts = dataflow.getOutputPorts();
-		if (outputPorts.size() > 0 || depth > 0)
-			graph.addSubgraph(generateOutputsGraph(outputPorts, graph.getId(),
-					graph, depth));
-
-		// dataflow inputs
-		NamedSet<InputWorkflowPort> inputPorts = dataflow.getInputPorts();
-		if (inputPorts.size() > 0 || depth > 0)
-			graph.addSubgraph(generateInputsGraph(inputPorts, graph.getId(),
-					graph, depth));
-
-		// datalinks
-		for (DataLink datalink : dataflow.getDataLinks()) {
-			GraphEdge edge = generateDataLinkEdge(datalink, depth);
-			if (edge != null)
-				graph.addEdge(edge);
-		}
-
-		// controlLinks
-		for (ControlLink controlLink : dataflow.getControlLinks())
-			if (controlLink instanceof BlockingControlLink) {
-				GraphEdge edge = generateControlLinkEdge(
-						(BlockingControlLink) controlLink, depth);
-				if (edge != null)
-					graph.addEdge(edge);
-			}
-
-		graphElementMap.put(graph.getId(), graph);
-		return graph;
-	}
-
-	public void transformGraph(Graph oldGraph, Graph newGraph) {
-		oldGraph.setAlignment(newGraph.getAlignment());
-		transformGraphElement(oldGraph, newGraph);
-		List<GraphEdge> oldEdges = new ArrayList<>(oldGraph.getEdges());
-		List<GraphEdge> newEdges = new ArrayList<>(newGraph.getEdges());
-		for (GraphEdge oldEdge : oldEdges) {
-			int index = newEdges.indexOf(oldEdge);
-			if (index >= 0) {
-				GraphEdge newEdge = newEdges.remove(index);
-				oldEdge.setPath(newEdge.getPath());
-				workflowToGraph.put(oldEdge.getWorkflowBean(), oldEdge);
-			} else
-				oldGraph.removeEdge(oldEdge);
-		}
-		List<GraphNode> newNodes = new ArrayList<>(newGraph.getNodes());
-		List<GraphNode> oldNodes = new ArrayList<>(oldGraph.getNodes());
-		for (GraphNode oldNode : oldNodes) {
-			int index = newNodes.indexOf(oldNode);
-			if (index >= 0) {
-				GraphNode newNode = newNodes.remove(index);
-				oldNode.setExpanded(newNode.isExpanded());
-				List<GraphNode> newSourceNodes = new ArrayList<>(
-						newNode.getSourceNodes());
-				List<GraphNode> oldSourceNodes = new ArrayList<>(
-						oldNode.getSourceNodes());
-				for (GraphNode oldSourceNode : oldSourceNodes) {
-					int sourceNodeIndex = newSourceNodes.indexOf(oldSourceNode);
-					if (sourceNodeIndex >= 0) {
-						GraphNode newSourceNode = newSourceNodes
-								.remove(sourceNodeIndex);
-						transformGraphElement(oldSourceNode, newSourceNode);
-					} else
-						oldNode.removeSourceNode(oldSourceNode);
-				}
-				for (GraphNode sourceNode : newSourceNodes)
-					oldNode.addSourceNode(sourceNode);
-				List<GraphNode> newSinkNodes = new ArrayList<>(
-						newNode.getSinkNodes());
-				List<GraphNode> oldSinkNodes = new ArrayList<>(
-						oldNode.getSinkNodes());
-				for (GraphNode oldSinkNode : oldSinkNodes) {
-					int sinkNodeIndex = newSinkNodes.indexOf(oldSinkNode);
-					if (sinkNodeIndex >= 0) {
-						GraphNode newSinkNode = newSinkNodes
-								.remove(sinkNodeIndex);
-						transformGraphElement(oldSinkNode, newSinkNode);
-					} else
-						oldNode.removeSinkNode(oldSinkNode);
-				}
-				for (GraphNode sinkNode : newSinkNodes)
-					oldNode.addSinkNode(sinkNode);
-				Graph oldSubGraph = oldNode.getGraph();
-				Graph newSubGraph = newNode.getGraph();
-				if (oldSubGraph != null && newSubGraph != null)
-					transformGraph(oldSubGraph, newSubGraph);
-				transformGraphElement(oldNode, newNode);
-			} else
-				oldGraph.removeNode(oldNode);
-		}
-		List<Graph> newSubGraphs = new ArrayList<>(newGraph.getSubgraphs());
-		List<Graph> oldSubGraphs = new ArrayList<>(oldGraph.getSubgraphs());
-		for (Graph oldSubGraph : oldSubGraphs) {
-			int index = newSubGraphs.indexOf(oldSubGraph);
-			if (index >= 0) {
-				Graph newSubGraph = newSubGraphs.remove(index);
-				transformGraph(oldSubGraph, newSubGraph);
-			} else
-				oldGraph.removeSubgraph(oldSubGraph);
-		}
-		for (GraphNode node : newNodes)
-			oldGraph.addNode(node);
-		for (Graph graph : newSubGraphs)
-			oldGraph.addSubgraph(graph);
-		for (GraphEdge newEdge : newEdges)
-			oldGraph.addEdge(newEdge);
-	}
-
-	public void transformGraphElement(GraphShapeElement oldGraphElement,
-			GraphShapeElement newGraphElement) {
-		oldGraphElement.setWorkflowBean(newGraphElement.getWorkflowBean());
-		oldGraphElement.setShape(newGraphElement.getShape());
-		oldGraphElement.setSize(newGraphElement.getSize());
-		oldGraphElement.setPosition(newGraphElement.getPosition());
-		oldGraphElement.setLabel(newGraphElement.getLabel());
-		oldGraphElement.setLabelPosition(newGraphElement.getLabelPosition());
-		oldGraphElement.setLineStyle(newGraphElement.getLineStyle());
-		oldGraphElement.setOpacity(newGraphElement.getOpacity());
-		oldGraphElement.setVisible(newGraphElement.isVisible());
-		oldGraphElement.setColor(newGraphElement.getColor());
-		oldGraphElement.setFillColor(newGraphElement.getFillColor());
-		workflowToGraph.put(oldGraphElement.getWorkflowBean(), oldGraphElement);
-	}
-
-	public void filterGraph(Set<?> dataflowEntities) {
-		Set<GraphElement> graphElements = new HashSet<>();
-		for (Entry<WorkflowBean, GraphElement> entry : workflowToGraph
-				.entrySet())
-			if (!dataflowEntities.contains(entry.getKey()))
-				graphElements.add(entry.getValue());
-		filterGraph(getGraph(), graphElements);
-	}
-
-	private void filterGraph(Graph graph, Set<GraphElement> graphElements) {
-		for (GraphNode node : graph.getNodes()) {
-			node.setFiltered(graphElements.contains(node));
-			Graph subgraph = node.getGraph();
-			if (subgraph != null)
-				if (graphElements.contains(subgraph)) {
-					removeFilter(subgraph);
-					subgraph.setFiltered(true);
-				} else {
-					subgraph.setFiltered(false);
-					filterGraph(subgraph, graphElements);
-				}
-		}
-		for (GraphEdge edge : graph.getEdges())
-			edge.setFiltered(graphElements.contains(edge));
-		for (Graph subgraph : graph.getSubgraphs())
-			if (graphElements.contains(subgraph)) {
-				removeFilter(subgraph);
-				subgraph.setFiltered(true);
-			} else {
-				subgraph.setFiltered(false);
-				filterGraph(subgraph, graphElements);
-			}
-	}
-
-	public void removeFilter() {
-		for (Entry<WorkflowBean, GraphElement> entry : workflowToGraph
-				.entrySet())
-			entry.getValue().setFiltered(false);
-	}
-
-	private void removeFilter(Graph graph) {
-		for (GraphNode node : graph.getNodes()) {
-			node.setOpacity(1f);
-			Graph subgraph = node.getGraph();
-			if (subgraph != null) {
-				subgraph.setFiltered(false);
-				removeFilter(subgraph);
-			}
-		}
-		for (GraphEdge edge : graph.getEdges())
-			edge.setFiltered(false);
-		for (Graph subgraph : graph.getSubgraphs()) {
-			subgraph.setFiltered(false);
-			removeFilter(subgraph);
-		}
-	}
-
-	private GraphEdge generateControlLinkEdge(BlockingControlLink condition,
-			int depth) {
-		GraphEdge edge = null;
-		GraphElement source = workflowToGraph.get(condition.getUntilFinished());
-		GraphElement sink = workflowToGraph.get(condition.getBlock());
-		if (source != null && sink != null) {
-			edge = createGraphEdge();
-			if (source instanceof Graph)
-				edge.setSource(outputControls.get(source));
-			else if (source instanceof GraphNode)
-				edge.setSource((GraphNode) source);
-			if (sink instanceof Graph)
-				edge.setSink(inputControls.get(sink));
-			else if (sink instanceof GraphNode)
-				edge.setSink((GraphNode) sink);
-			String sourceId = edge.getSource().getId();
-			String sinkId = edge.getSink().getId();
-			edge.setId(sourceId + "->" + sinkId);
-			edge.setLineStyle(LineStyle.SOLID);
-			edge.setColor(Color.decode("#505050"));
-			edge.setFillColor(null);
-			edge.setArrowHeadStyle(ArrowStyle.DOT);
-			if (depth == 0)
-				edge.setWorkflowBean(condition);
-			if (interactive)
-				edge.setWorkflowBean(condition);
-			workflowToGraph.put(condition, edge);
-			graphElementMap.put(edge.getId(), edge);
-		}
-		return edge;
-	}
-
-	private GraphEdge generateDataLinkEdge(DataLink datalink, int depth) {
-		GraphEdge edge = null;
-		Port sourcePort = datalink.getReceivesFrom();
-		Port sinkPort = datalink.getSendsTo();
-		if (nestedWorkflowPorts.containsKey(sourcePort))
-			sourcePort = nestedWorkflowPorts.get(sourcePort);
-		if (nestedWorkflowPorts.containsKey(sinkPort))
-			sinkPort = nestedWorkflowPorts.get(sinkPort);
-		GraphNode sourceNode = ports.get(sourcePort);
-		GraphNode sinkNode = ports.get(sinkPort);
-		if (sourceNode != null && sinkNode != null) {
-			edge = createGraphEdge();
-			edge.setSource(sourceNode);
-			edge.setSink(sinkNode);
-
-			StringBuilder id = new StringBuilder();
-			if (sourceNode.getParent() instanceof GraphNode) {
-				id.append(sourceNode.getParent().getId());
-				id.append(":");
-				id.append(sourceNode.getId());
-			} else
-				id.append(sourceNode.getId());
-			id.append("->");
-			if (sinkNode.getParent() instanceof GraphNode) {
-				id.append(sinkNode.getParent().getId());
-				id.append(":");
-				id.append(sinkNode.getId());
-			} else
-				id.append(sinkNode.getId());
-			edge.setId(id.toString());
-			edge.setLineStyle(LineStyle.SOLID);
-			edge.setColor(Color.BLACK);
-			edge.setFillColor(Color.BLACK);
-			if (depth == 0)
-				edge.setWorkflowBean(datalink);
-			if (interactive)
-				edge.setWorkflowBean(datalink);
-			workflowToGraph.put(datalink, edge);
-			graphElementMap.put(edge.getId(), edge);
-		}
-		return edge;
-	}
-
-	private Graph generateInputsGraph(NamedSet<InputWorkflowPort> inputPorts,
-			String prefix, Graph graph, int depth) {
-		Graph inputs = createGraph();
-		inputs.setId(prefix + "sources");
-		inputs.setColor(Color.BLACK);
-		inputs.setFillColor(null);
-		inputs.setShape(Shape.BOX);
-		inputs.setLineStyle(LineStyle.DOTTED);
-		if (getPortStyle().equals(PortStyle.BLOB))
-			inputs.setLabel("");
-		else
-			inputs.setLabel("Workflow input ports");
-
-		GraphNode triangle = createGraphNode();
-		triangle.setId(prefix + "WORKFLOWINTERNALSOURCECONTROL");
-		triangle.setLabel("");
-		triangle.setShape(Shape.TRIANGLE);
-		triangle.setSize(new Dimension((int) (0.2f * 72), (int) ((Math.sin(Math
-				.toRadians(60)) * 0.2) * 72)));
-		triangle.setFillColor(Color.decode("#ff4040"));
-		triangle.setColor(Color.BLACK);
-		triangle.setLineStyle(LineStyle.SOLID);
-		inputs.addNode(triangle);
-		inputControls.put(graph, triangle);
-
-		for (InputWorkflowPort inputWorkflowPort : inputPorts) {
-			GraphNode inputNode = createGraphNode();
-			inputNode.setId(prefix + "WORKFLOWINTERNALSOURCE_"
-					+ inputWorkflowPort.getName());
-			if (getPortStyle().equals(PortStyle.BLOB)) {
-				inputNode.setLabel("");
-				inputNode.setSize(new Dimension((int) (0.3f * 72),
-						(int) (0.3f * 72)));
-			} else
-				inputNode.setLabel(inputWorkflowPort.getName());
-			inputNode.setShape(getPortStyle().inputShape());
-			inputNode.setColor(Color.BLACK);
-			inputNode.setLineStyle(LineStyle.SOLID);
-			inputNode.setFillColor(Color.decode("#8ed6f0"));
-			if (depth == 0)
-				inputNode.setInteractive(true);
-			if (interactive)
-				inputNode.setInteractive(true);
-			if (depth < 2) {
-				inputNode.setWorkflowBean(inputWorkflowPort);
-				if (workflowPortToProcessorPort.containsKey(inputWorkflowPort)) {
-					ProcessorPort port = workflowPortToProcessorPort
-							.get(inputWorkflowPort);
-					inputNode.setWorkflowBean(port);
-					workflowToGraph.put(port, inputNode);
-				} else {
-					inputNode.setWorkflowBean(inputWorkflowPort);
-					workflowToGraph.put(inputWorkflowPort, inputNode);
-				}
-			}
-			ports.put(inputWorkflowPort, inputNode);
-			inputs.addNode(inputNode);
-			graphElementMap.put(inputNode.getId(), inputNode);
-		}
-		return inputs;
-	}
-
-	private Graph generateOutputsGraph(
-			NamedSet<OutputWorkflowPort> outputPorts, String prefix,
-			Graph graph, int depth) {
-		Graph outputs = createGraph();
-		outputs.setId(prefix + "sinks");
-		outputs.setColor(Color.BLACK);
-		outputs.setFillColor(null);
-		outputs.setShape(Shape.BOX);
-		outputs.setLineStyle(LineStyle.DOTTED);
-		if (getPortStyle().equals(PortStyle.BLOB))
-			outputs.setLabel("");
-		else
-			outputs.setLabel("Workflow output ports");
-
-		GraphNode triangle = createGraphNode();
-		triangle.setId(prefix + "WORKFLOWINTERNALSINKCONTROL");
-		triangle.setLabel("");
-		triangle.setShape(Shape.INVTRIANGLE);
-		triangle.setSize(new Dimension((int) (0.2f * 72), (int) ((Math.sin(Math
-				.toRadians(60)) * 0.2) * 72)));
-		triangle.setFillColor(Color.decode("#66cd00"));
-		triangle.setColor(Color.BLACK);
-		triangle.setLineStyle(LineStyle.SOLID);
-		outputs.addNode(triangle);
-		outputControls.put(graph, triangle);
-
-		for (OutputWorkflowPort outputWorkflowPort : outputPorts) {
-			GraphNode outputNode = createGraphNode();
-			outputNode.setId(prefix + "WORKFLOWINTERNALSINK_"
-					+ outputWorkflowPort.getName());
-			if (getPortStyle().equals(PortStyle.BLOB)) {
-				outputNode.setLabel("");
-				outputNode.setSize(new Dimension((int) (0.3f * 72),
-						(int) (0.3f * 72)));
-			} else
-				outputNode.setLabel(outputWorkflowPort.getName());
-			outputNode.setShape(getPortStyle().outputShape());
-			outputNode.setColor(Color.BLACK);
-			outputNode.setLineStyle(LineStyle.SOLID);
-			outputNode.setFillColor(Color.decode("#8ed6f0"));
-			if (depth == 0)
-				outputNode.setInteractive(true);
-			if (interactive)
-				outputNode.setInteractive(true);
-			if (depth < 2) {
-				if (workflowPortToProcessorPort.containsKey(outputWorkflowPort)) {
-					ProcessorPort port = workflowPortToProcessorPort
-							.get(outputWorkflowPort);
-					outputNode.setWorkflowBean(port);
-					workflowToGraph.put(port, outputNode);
-				} else {
-					outputNode.setWorkflowBean(outputWorkflowPort);
-					workflowToGraph.put(outputWorkflowPort, outputNode);
-				}
-			}
-			ports.put(outputWorkflowPort, outputNode);
-			outputs.addNode(outputNode);
-			graphElementMap.put(outputNode.getId(), outputNode);
-		}
-		return outputs;
-	}
-
-	private GraphNode generateProcessorNode(Processor processor, String prefix,
-			int depth) {
-		// Blatantly ignoring any other activities for now
-		ProcessorBinding processorBinding = scufl2Tools
-				.processorBindingForProcessor(processor, profile);
-		Activity activity = processorBinding.getBoundActivity();
-		@SuppressWarnings("unused")
-		URI activityType = activity.getType();
-
-		GraphNode node = createGraphNode();
-		node.setId(prefix + processor.getName());
-		if (getPortStyle().equals(PortStyle.BLOB)) {
-			node.setLabel("");
-			node.setSize(new Dimension((int) (0.3f * 72), (int) (0.3f * 72)));
-		} else
-			node.setLabel(processor.getName());
-		node.setShape(getPortStyle(processor).processorShape());
-		node.setColor(Color.BLACK);
-		node.setLineStyle(LineStyle.SOLID);
-		// if (activityType.equals(URI.create(NonExecutableActivity.URI))) {
-		// if (activityType.equals(URI.create(DisabledActivity.URI))) {
-		// node.setFillColor(GraphColorManager
-		// .getFillColor(((DisabledActivity) activity)
-		// .getActivity(), colourManager));
-		// } else {
-		// node.setFillColor(GraphColorManager
-		// .getFillColor(activityType, colourManager));
-		// }
-		// node.setOpacity(0.3f);
-		// } else
-		node.setFillColor(GraphColorManager.getFillColor(activity,
-				colourManager));
-
-		// check whether the nested workflow processors should be clickable or
-		// not, if top level workflow then should be clickable regardless
-		if (depth == 0) {
-			node.setInteractive(true);
-			node.setWorkflowBean(processor);
-		}
-		if (interactive) {
-			node.setInteractive(true);
-			node.setWorkflowBean(processor);
-		}
-
-		if (scufl2Tools.containsNestedWorkflow(processor, profile)
-				&& expandNestedDataflow(activity)) {
-			Workflow subDataflow = scufl2Tools.nestedWorkflowForProcessor(
-					processor, profile);
-
-			NamedSet<InputWorkflowPort> inputWorkflowPorts = subDataflow
-					.getInputPorts();
-			for (InputActivityPort inputActivityPort : activity.getInputPorts()) {
-				InputWorkflowPort inputWorkflowPort = inputWorkflowPorts
-						.getByName(inputActivityPort.getName());
-				InputProcessorPort inputProcessorPort = scufl2Tools
-						.processorPortBindingForPort(inputActivityPort, profile)
-						.getBoundProcessorPort();
-				nestedWorkflowPorts.put(inputProcessorPort, inputWorkflowPort);
-				workflowPortToProcessorPort.put(inputWorkflowPort,
-						inputProcessorPort);
-				processorBinding.getInputPortBindings();
-			}
-
-			NamedSet<OutputWorkflowPort> outputWorkflowPorts = subDataflow
-					.getOutputPorts();
-			for (OutputActivityPort outputActivityPort : activity
-					.getOutputPorts()) {
-				OutputWorkflowPort outputWorkflowPort = outputWorkflowPorts
-						.getByName(outputActivityPort.getName());
-				OutputProcessorPort outputProcessorPort = scufl2Tools
-						.processorPortBindingForPort(outputActivityPort,
-								profile).getBoundProcessorPort();
-				nestedWorkflowPorts
-						.put(outputProcessorPort, outputWorkflowPort);
-				workflowPortToProcessorPort.put(outputWorkflowPort,
-						outputProcessorPort);
-			}
-
-			Graph subGraph = generateGraph(subDataflow, prefix,
-					processor.getName(), depth + 1);
-			// TODO why does this depth matter?
-			if (depth == 0)
-				subGraph.setWorkflowBean(processor);
-			if (interactive)
-				subGraph.setWorkflowBean(processor);
-			node.setGraph(subGraph);
-			node.setExpanded(true);
-
-			workflowToGraph.put(processor, subGraph);
-		} else {
-			graphElementMap.put(node.getId(), node);
-			workflowToGraph.put(processor, node);
-		}
-
-		NamedSet<InputProcessorPort> inputPorts = processor.getInputPorts();
-		if (inputPorts.size() == 0) {
-			GraphNode portNode = createGraphNode();
-			portNode.setShape(Shape.BOX);
-			portNode.setColor(Color.BLACK);
-			portNode.setFillColor(node.getFillColor());
-			portNode.setLineStyle(LineStyle.SOLID);
-			node.addSinkNode(portNode);
-		} else
-			for (InputPort inputPort : inputPorts) {
-				GraphNode portNode = createGraphNode();
-				portNode.setId("i" + inputPort.getName().replaceAll("\\.", ""));
-				portNode.setLabel(inputPort.getName());
-				portNode.setShape(Shape.BOX);
-				portNode.setColor(Color.BLACK);
-				portNode.setFillColor(node.getFillColor());
-				portNode.setLineStyle(LineStyle.SOLID);
-				if (depth == 0)
-					portNode.setWorkflowBean(inputPort);
-				if (interactive)
-					portNode.setWorkflowBean(inputPort);
-				if (!node.isExpanded())
-					workflowToGraph.put(inputPort, portNode);
-				ports.put(inputPort, portNode);
-				node.addSinkNode(portNode);
-				graphElementMap.put(portNode.getId(), portNode);
-				// portToActivity.put(inputPort, activity);
-				portToProcessor.put(inputPort, processor);
-			}
-
-		NamedSet<OutputProcessorPort> outputPorts = processor.getOutputPorts();
-		if (outputPorts.size() == 0) {
-			GraphNode portNode = createGraphNode();
-			portNode.setShape(Shape.BOX);
-			portNode.setColor(Color.BLACK);
-			portNode.setFillColor(node.getFillColor());
-			portNode.setLineStyle(LineStyle.SOLID);
-			node.addSourceNode(portNode);
-		} else
-			for (OutputPort outputPort : outputPorts) {
-				GraphNode portNode = createGraphNode();
-				portNode.setId("o" + outputPort.getName().replaceAll("\\.", ""));
-				portNode.setLabel(outputPort.getName());
-				portNode.setShape(Shape.BOX);
-				portNode.setColor(Color.BLACK);
-				portNode.setFillColor(node.getFillColor());
-				portNode.setLineStyle(LineStyle.SOLID);
-				if (depth == 0)
-					portNode.setWorkflowBean(outputPort);
-				if (interactive)
-					portNode.setWorkflowBean(outputPort);
-				if (!node.isExpanded())
-					workflowToGraph.put(outputPort, portNode);
-				ports.put(outputPort, portNode);
-				node.addSourceNode(portNode);
-				graphElementMap.put(portNode.getId(), portNode);
-				// portToActivity.put(outputPort, activity);
-				portToProcessor.put(outputPort, processor);
-			}
-
-		return node;
-	}
-
-	/**
-	 * Returns the dataflow.
-	 * 
-	 * @return the dataflow
-	 */
-	public Workflow getWorkflow() {
-		return workflow;
-	}
-
-	public Profile getProfile() {
-		return profile;
-	}
-
-	/**
-	 * Returns the dataflowSelectionModel.
-	 * 
-	 * @return the dataflowSelectionModel
-	 */
-	public DataflowSelectionModel getDataflowSelectionModel() {
-		return dataflowSelectionModel;
-	}
-
-	/**
-	 * Sets the dataflowSelectionModel.
-	 * 
-	 * @param dataflowSelectionModel
-	 *            the new dataflowSelectionModel
-	 */
-	public void setDataflowSelectionModel(
-			DataflowSelectionModel dataflowSelectionModel) {
-		if (this.dataflowSelectionModel != null)
-			this.dataflowSelectionModel.removeObserver(this);
-		this.dataflowSelectionModel = dataflowSelectionModel;
-		this.dataflowSelectionModel.addObserver(this);
-	}
-
-	/**
-	 * Sets the proportion of the node's jobs that have been completed.
-	 * 
-	 * @param nodeId
-	 *            the id of the node
-	 * @param complete
-	 *            the proportion of the nodes's jobs that have been completed, a
-	 *            value between 0.0 and 1.0
-	 */
-	public void setNodeCompleted(String nodeId, float complete) {
-		if (graphElementMap.containsKey(nodeId)) {
-			GraphElement graphElement = graphElementMap.get(nodeId);
-			graphElement.setCompleted(complete);
-		}
-	}
-
-	public void setEdgeActive(String edgeId, boolean active) {
-	}
-
-	/**
-	 * Returns the alignment.
-	 * 
-	 * @return the alignment
-	 */
-	public Alignment getAlignment() {
-		return alignment;
-	}
-
-	/**
-	 * Returns the portStyle.
-	 * 
-	 * @return the portStyle
-	 */
-	public PortStyle getPortStyle() {
-		return portStyle;
-	}
-
-	/**
-	 * Returns the portStyle for a processor.
-	 * 
-	 * @return the portStyle for a processor
-	 */
-	public PortStyle getPortStyle(Processor processor) {
-		if (processorPortStyle.containsKey(processor))
-			return processorPortStyle.get(processor);
-		return portStyle;
-	}
-
-	/**
-	 * Sets the alignment.
-	 * 
-	 * @param alignment
-	 *            the new alignment
-	 */
-	public void setAlignment(Alignment alignment) {
-		this.alignment = alignment;
-	}
-
-	/**
-	 * Sets the portStyle.
-	 * 
-	 * @param style
-	 *            the new portStyle
-	 */
-	public void setPortStyle(PortStyle portStyle) {
-		this.portStyle = portStyle;
-		processorPortStyle.clear();
-	}
-
-	/**
-	 * Sets the portStyle for a processor.
-	 * 
-	 * @param style
-	 *            the new portStyle for the processor
-	 */
-	public void setPortStyle(Processor processor, PortStyle portStyle) {
-		processorPortStyle.put(processor, portStyle);
-	}
-
-	/**
-	 * Shut down any processing and update threads related to this controller.
-	 * 
-	 */
-	public void shutdown() {
-	}
-
-	/**
-	 * Returns true if the default is to expand nested workflows.
-	 * 
-	 * @return true if the default is to expand nested workflows
-	 */
-	public boolean expandNestedDataflows() {
-		return expandNestedDataflows;
-	}
-
-	/**
-	 * Returns true if the nested dataflow should be expanded.
-	 * 
-	 * @param dataflow
-	 * @return true if the nested dataflow should be expanded
-	 */
-	public boolean expandNestedDataflow(Activity dataflow) {
-		if (dataflowExpansion.containsKey(dataflow))
-			return dataflowExpansion.get(dataflow);
-		return expandNestedDataflows;
-	}
-
-	/**
-	 * Sets the default for expanding nested workflows.
-	 * 
-	 * @param expand
-	 *            the default for expanding nested workflows
-	 */
-	public void setExpandNestedDataflows(boolean expand) {
-		dataflowExpansion.clear();
-		this.expandNestedDataflows = expand;
-	}
-
-	/**
-	 * Sets whether the nested dataflow should be expanded.
-	 * 
-	 * @param expand
-	 *            whether the nested dataflow should be expanded
-	 * @param dataflow
-	 *            the nested dataflow
-	 */
-	public void setExpandNestedDataflow(Activity dataflow, boolean expand) {
-		dataflowExpansion.put(dataflow, expand);
-	}
-
-	private boolean isSingleOutputProcessor(Object dataflowObject) {
-		boolean result = false;
-		if (dataflowObject instanceof Processor) {
-			Processor processor = (Processor) dataflowObject;
-			result = processor.getOutputPorts().size() == 1;
-		}
-		return result;
-	}
-
-	public boolean startEdgeCreation(GraphElement graphElement, Point point) {
-		if (!edgeCreationFromSource && !edgeCreationFromSink) {
-			Object dataflowObject = graphElement.getWorkflowBean();
-			if (dataflowObject instanceof ReceiverPort) {
-				edgeCreationSink = graphElement;
-				edgeCreationFromSink = true;
-			} else if (dataflowObject instanceof SenderPort
-					|| isSingleOutputProcessor(dataflowObject)) {
-				edgeCreationSource = graphElement;
-				edgeCreationFromSource = true;
-			} else if (graphElement instanceof GraphEdge) {
-				GraphEdge edge = (GraphEdge) graphElement;
-				edgeCreationSource = edge.getSource();
-				edgeCreationFromSource = true;
-				edgeMoveElement = edge;
-			}
-		}
-		return edgeCreationFromSource || edgeCreationFromSink;
-	}
-
-	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;
-	}
-
-	public boolean stopEdgeCreation(GraphElement graphElement, Point point) {
-		boolean edgeCreated = false;
-		if (edgeCreationSource != null && edgeCreationSink != null) {
-			SenderPort source = null;
-			ReceiverPort sink = null;
-			Object sourceDataflowObject = edgeCreationSource.getWorkflowBean();
-			Object sinkDataflowObject = edgeCreationSink.getWorkflowBean();
-			if (sourceDataflowObject instanceof SenderPort)
-				source = (SenderPort) sourceDataflowObject;
-			else if (sourceDataflowObject instanceof Processor) {
-				Processor processor = (Processor) sourceDataflowObject;
-				source = showPortOptions(processor.getOutputPorts(), "output",
-						componentForPopups, point);
-			}
-			if (sinkDataflowObject instanceof ReceiverPort)
-				sink = (ReceiverPort) sinkDataflowObject;
-			else if (sinkDataflowObject instanceof Processor) {
-				Processor processor = (Processor) sinkDataflowObject;
-				sink = showPortOptions(processor.getInputPorts(), "input",
-						componentForPopups, point);
-			}
-			if (source != null && sink != null) {
-				Edit<?> edit = null;
-				if (edgeMoveElement == null) {
-					DataLink dataLink = new DataLink();
-					dataLink.setReceivesFrom(source);
-					dataLink.setSendsTo(sink);
-					edit = new AddDataLinkEdit(workflow, dataLink);
-				} else {
-					Object existingSink = edgeMoveElement.getSink()
-							.getWorkflowBean();
-					if (existingSink != sink) {
-						List<Edit<?>> editList = new ArrayList<Edit<?>>();
-						DataLink existingDataLink = (DataLink) edgeMoveElement
-								.getWorkflowBean();
-						DataLink newDataLink = new DataLink();
-						newDataLink.setReceivesFrom(existingDataLink
-								.getReceivesFrom());
-						newDataLink.setSendsTo(sink);
-						editList.add(new RemoveDataLinkEdit(workflow,
-								existingDataLink));
-						editList.add(new AddDataLinkEdit(workflow, newDataLink));
-						edit = new CompoundEdit(editList);
-					}
-				}
-				try {
-					if (edit != null) {
-						editManager.doDataflowEdit(workflow.getParent(), edit);
-						edgeCreated = true;
-					}
-				} catch (EditException e) {
-					logger.debug("Failed to create datalink from '"
-							+ source.getName() + "' to '" + sink.getName()
-							+ "'");
-				}
-			}
-		}
-		edgeCreationSource = null;
-		edgeCreationSink = null;
-		edgeMoveElement = null;
-		edgeCreationFromSource = false;
-		edgeCreationFromSink = false;
-
-		return edgeCreated;
-	}
-
-	private <T extends Port> T showPortOptions(NamedSet<T> ports,
-			String portType, Component component, Point point) {
-		T result = null;
-		if (ports.size() == 0) {
-			showMessageDialog(component, "Service has no " + portType
-					+ " ports to connect to");
-		} else if (ports.size() == 1)
-			result = ports.first();
-		else {
-			Object[] portNames = ports.getNames().toArray();
-			String portName = (String) showInputDialog(component, "Select an "
-					+ portType + " port", "Port Chooser", PLAIN_MESSAGE, null,
-					portNames, portNames[0]);
-			if (portName != null)
-				result = ports.getByName(portName);
-		}
-		return result;
-
-	}
-
-	public void resetSelection() {
-		if (dataflowSelectionModel != null)
-			for (Object dataflowElement : dataflowSelectionModel.getSelection()) {
-				GraphElement graphElement = workflowToGraph
-						.get(dataflowElement);
-				if (graphElement != null)
-					graphElement.setSelected(true);
-			}
-	}
-
-	public void setIteration(String nodeId, int iteration) {
-		if (graphElementMap.containsKey(nodeId)) {
-			GraphElement graphElement = graphElementMap.get(nodeId);
-			graphElement.setIteration(iteration);
-		}
-	}
-
-	public void setErrors(String nodeId, int errors) {
-		if (graphElementMap.containsKey(nodeId)) {
-			GraphElement graphElement = graphElementMap.get(nodeId);
-			graphElement.setErrors(errors);
-		}
-	}
-
-	@Override
-	public void notify(Observable<DataflowSelectionMessage> sender,
-			DataflowSelectionMessage message) throws Exception {
-		GraphElement graphElement = workflowToGraph.get(message.getElement());
-		if (graphElement != null)
-			graphElement.setSelected(message.getType().equals(
-					DataflowSelectionMessage.Type.ADDED));
-	}
-
-	/**
-	 * Returns the GraphEventManager.
-	 * 
-	 * @return the GraphEventManager
-	 */
-	public GraphEventManager getGraphEventManager() {
-		return graphEventManager;
-	}
-
-	/**
-	 * Sets the GraphEventManager.
-	 * 
-	 * @param graphEventManager
-	 *            the new GraphEventManager
-	 */
-	public void setGraphEventManager(GraphEventManager graphEventManager) {
-		this.graphEventManager = graphEventManager;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java
deleted file mode 100644
index d1348d2..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEdge.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import java.awt.Point;
-import java.util.List;
-
-/**
- * An edge connecting two nodes in a graph.
- *
- * @author David Withers
- */
-public class GraphEdge extends GraphElement {
-	public enum ArrowStyle {NONE, NORMAL, DOT}
-
-	private GraphNode source;
-	private GraphNode sink;
-	private ArrowStyle arrowHeadStyle = ArrowStyle.NORMAL;
-	private ArrowStyle arrowTailStyle = ArrowStyle.NONE;
-	private List<Point> path;
-
-	/**
-	 * Constructs a new instance of Edge.
-	 *
-	 */
-	public GraphEdge(GraphController graphController) {
-		super(graphController);
-	}
-
-	/**
-	 * Returns the source.
-	 *
-	 * @return the source
-	 */
-	public GraphNode getSource() {
-		return source;
-	}
-
-	/**
-	 * Sets the source.
-	 *
-	 * @param source the new source
-	 */
-	public void setSource(GraphNode source) {
-		this.source = source;
-	}
-
-	/**
-	 * Returns the sink.
-	 *
-	 * @return the sink
-	 */
-	public GraphNode getSink() {
-		return sink;
-	}
-
-	/**
-	 * Sets the sink.
-	 *
-	 * @param sink the new sink
-	 */
-	public void setSink(GraphNode sink) {
-		this.sink = sink;
-	}
-
-	/**
-	 * Returns the arrowHeadStyle.
-	 *
-	 * @return the arrowHeadStyle
-	 */
-	public ArrowStyle getArrowHeadStyle() {
-		return arrowHeadStyle;
-	}
-
-	/**
-	 * Sets the arrowHeadStyle.
-	 *
-	 * @param arrowHeadStyle the new arrowHeadStyle
-	 */
-	public void setArrowHeadStyle(ArrowStyle arrowHeadStyle) {
-		this.arrowHeadStyle = arrowHeadStyle;
-	}
-
-	/**
-	 * Returns the arrowTailStyle.
-	 *
-	 * @return the arrowTailStyle
-	 */
-	public ArrowStyle getArrowTailStyle() {
-		return arrowTailStyle;
-	}
-
-	/**
-	 * Sets the arrowTailStyle.
-	 *
-	 * @param arrowTailStyle the new arrowTailStyle
-	 */
-	public void setArrowTailStyle(ArrowStyle arrowTailStyle) {
-		this.arrowTailStyle = arrowTailStyle;
-	}
-
-	/**
-	 * Returns the path.
-	 *
-	 * @return the path
-	 */
-	public List<Point> getPath() {
-		return path;
-	}
-
-	/**
-	 * Sets the path.
-	 *
-	 * @param path the new path
-	 */
-	public void setPath(List<Point> path) {
-		this.path = path;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java
deleted file mode 100644
index 8bb7bc8..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphElement.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-import java.awt.Color;
-import java.awt.Point;
-
-import uk.org.taverna.scufl2.api.common.WorkflowBean;
-
-/**
- * An element of a graph.
- * 
- * @author David Withers
- */
-public abstract class GraphElement {
-	public enum LineStyle {
-		NONE, SOLID, DOTTED
-	}
-
-	private String id;
-	private String label;
-	private Point labelPosition;
-	private LineStyle lineStyle = LineStyle.SOLID;
-	private Color color = Color.BLACK;
-	private Color fillColor;
-	private float opacity = 1f;
-	private GraphElement parent;
-	private boolean selected;
-	private boolean active;
-	private boolean interactive;
-	private boolean visible = true;
-	private boolean filtered;
-	private WorkflowBean workflowBean;
-	protected GraphController graphController;
-	protected float completed;
-	protected int iteration;
-	protected int errors;
-
-	protected GraphElement(GraphController graphController) {
-		this.graphController = graphController;
-	}
-
-	/**
-	 * Returns the eventManager.
-	 * 
-	 * @return the eventManager
-	 */
-	public GraphEventManager getEventManager() {
-		if (graphController != null) {
-			return graphController.getGraphEventManager();
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the workflowBean.
-	 * 
-	 * @return the workflowBean
-	 */
-	public WorkflowBean getWorkflowBean() {
-		return workflowBean;
-	}
-
-	/**
-	 * Sets the workflowBean.
-	 * 
-	 * @param workflowBean
-	 *            the new workflowBean
-	 */
-	public void setWorkflowBean(WorkflowBean workflowBean) {
-		this.workflowBean = workflowBean;
-	}
-
-	/**
-	 * Returns the parent.
-	 * 
-	 * @return the parent
-	 */
-	public GraphElement getParent() {
-		return parent;
-	}
-
-	/**
-	 * Sets the parent.
-	 * 
-	 * @param parent
-	 *            the new parent
-	 */
-	protected void setParent(GraphElement parent) {
-		this.parent = parent;
-	}
-
-	/**
-	 * Returns the label.
-	 * 
-	 * @return the label
-	 */
-	public String getLabel() {
-		return label;
-	}
-
-	/**
-	 * Sets the label.
-	 * 
-	 * @param label
-	 *            the new label
-	 */
-	public void setLabel(String label) {
-		this.label = label;
-	}
-
-	/**
-	 * Returns the labelPosition.
-	 * 
-	 * @return the labelPosition
-	 */
-	public Point getLabelPosition() {
-		return labelPosition;
-	}
-
-	/**
-	 * Sets the labelPosition.
-	 * 
-	 * @param labelPosition
-	 *            the new labelPosition
-	 */
-	public void setLabelPosition(Point labelPosition) {
-		this.labelPosition = labelPosition;
-	}
-
-	/**
-	 * Returns the id.
-	 * 
-	 * @return the id
-	 */
-	public String getId() {
-		return id;
-	}
-
-	/**
-	 * Sets the id.
-	 * 
-	 * @param id
-	 *            the new id
-	 */
-	public void setId(String id) {
-		if (graphController != null) {
-			graphController.mapElement(id, this);
-		}
-		this.id = id;
-	}
-
-	/**
-	 * Returns the colour.
-	 * 
-	 * @return the colour
-	 */
-	public Color getColor() {
-		return color;
-	}
-
-	/**
-	 * Sets the colour.
-	 * 
-	 * @param color
-	 *            the new colour
-	 */
-	public void setColor(Color color) {
-		this.color = color;
-	}
-
-	/**
-	 * Returns the fillColor.
-	 * 
-	 * @return the fillColor
-	 */
-	public Color getFillColor() {
-		return fillColor;
-	}
-
-	/**
-	 * Sets the fillColor.
-	 * 
-	 * @param fillColor
-	 *            the new fillColor
-	 */
-	public void setFillColor(Color fillColor) {
-		this.fillColor = fillColor;
-	}
-
-	/**
-	 * Returns the lineStyle.
-	 * 
-	 * @return the lineStyle
-	 */
-	public LineStyle getLineStyle() {
-		return lineStyle;
-	}
-
-	/**
-	 * Sets the lineStyle.
-	 * 
-	 * @param lineStyle
-	 *            the new lineStyle
-	 */
-	public void setLineStyle(LineStyle lineStyle) {
-		this.lineStyle = lineStyle;
-	}
-
-	@Override
-	public String toString() {
-		return id + "[" + label + "]";
-	}
-
-	/**
-	 * Returns the selected.
-	 * 
-	 * @return the selected
-	 */
-	public boolean isSelected() {
-		return selected;
-	}
-
-	/**
-	 * Sets the selected.
-	 * 
-	 * @param selected
-	 *            the new selected
-	 */
-	public void setSelected(boolean selected) {
-		this.selected = selected;
-	}
-
-	/**
-	 * Returns the iteration.
-	 * 
-	 * @return the value of iteration
-	 */
-	public int getIteration() {
-		return iteration;
-	}
-
-	/**
-	 * Sets the iteration.
-	 * 
-	 * @param iteration
-	 *            the new value for iteration
-	 */
-	public void setIteration(int iteration) {
-		this.iteration = iteration;
-	}
-
-	/**
-	 * Returns the errors.
-	 * 
-	 * @return the value of errors
-	 */
-	public int getErrors() {
-		return errors;
-	}
-
-	/**
-	 * Sets the errors.
-	 * 
-	 * @param errors
-	 *            the new value for errors
-	 */
-	public void setErrors(int errors) {
-		this.errors = errors;
-	}
-
-	/**
-	 * Returns the completed.
-	 * 
-	 * @return the value of completed
-	 */
-	public float getCompleted() {
-		return completed;
-	}
-
-	/**
-	 * Sets the completed value.
-	 * 
-	 * @param completed
-	 */
-	public void setCompleted(float completed) {
-		this.completed = completed;
-	}
-
-	/**
-	 * Returns <code>true</code> if the element is active. The default value is
-	 * <code>false</code>.
-	 * 
-	 * @return <code>true</code> if the element is active
-	 */
-	public boolean isActive() {
-		return active;
-	}
-
-	/**
-	 * Sets the value of active.
-	 * 
-	 * @param active
-	 *            the new active
-	 */
-	public void setActive(boolean active) {
-		this.active = active;
-	}
-
-	/**
-	 * Returns <code>true</code> if the element is interactive. The default
-	 * value is <code>false</code>.
-	 * 
-	 * @return <code>true</code> if the element is interactive
-	 */
-	public boolean isInteractive() {
-		return interactive;
-	}
-
-	/**
-	 * Sets the value of interactive.
-	 * 
-	 * @param interactive
-	 *            the new interactive
-	 */
-	public void setInteractive(boolean interactive) {
-		this.interactive = interactive;
-	}
-
-	/**
-	 * Returns <code>true</code> if the element is visible. The default value is
-	 * <code>true</code>.
-	 * 
-	 * @return <code>true</code> if the element is visible
-	 */
-	public boolean isVisible() {
-		return visible;
-	}
-
-	/**
-	 * Sets whether the element is visible.
-	 * 
-	 * @param visible
-	 *            the new value for visible
-	 */
-	public void setVisible(boolean visible) {
-		this.visible = visible;
-	}
-
-	/**
-	 * Returns the opacity value. The default value is 1.0
-	 * 
-	 * @return the opacity value
-	 */
-	public float getOpacity() {
-		return opacity;
-	}
-
-	/**
-	 * Sets the opacity of the element. Must be a value between 0.0 and 1.0.
-	 * 
-	 * @param opacity
-	 *            the new opacity value
-	 */
-	public void setOpacity(float opacity) {
-		this.opacity = opacity;
-	}
-
-	/**
-	 * Returns <code>true</code> if the element is filtered.
-	 * 
-	 * @return <code>true</code> if the element is filtered
-	 */
-	public boolean isFiltered() {
-		return filtered;
-	}
-
-	/**
-	 * Sets the value of filtered.
-	 * 
-	 * @param filtered
-	 *            the new value for filtered
-	 */
-	public void setFiltered(boolean filtered) {
-		this.filtered = filtered;
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + ((id == null) ? 0 : id.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-
-		// Equality by id
-		GraphElement other = (GraphElement) obj;
-		if (id == null)
-			return (other.id == null);
-		return id.equals(other.id);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java b/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java
deleted file mode 100644
index a6b9b0e..0000000
--- a/taverna-workbench-graph-model/src/main/java/net/sf/taverna/t2/workbench/models/graph/GraphEventManager.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.workbench.models.graph;
-
-public interface GraphEventManager {
-	void mouseClicked(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, int x, int y, int screenX,
-			int screenY);
-
-	void mouseDown(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, int x, int y, int screenX,
-			int screenY);
-
-	void mouseUp(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, final int x, final int y,
-			int screenX, int screenY);
-
-	void mouseMoved(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, int x, int y, int screenX,
-			int screenY);
-
-	void mouseOver(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, int x, int y, int screenX,
-			int screenY);
-
-	void mouseOut(GraphElement graphElement, short button, boolean altKey,
-			boolean ctrlKey, boolean metaKey, int x, int y, int screenX,
-			int screenY);
-}