You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by re...@apache.org on 2015/03/26 19:52:18 UTC

[29/51] [partial] incubator-taverna-workbench git commit: all packages are moved to org.apache.taverna.*

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/OpenSourceWorkflowAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/OpenSourceWorkflowAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/OpenSourceWorkflowAction.java
deleted file mode 100644
index f392405..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/OpenSourceWorkflowAction.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2013 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.file.importworkflow.actions;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-import java.util.prefs.Preferences;
-
-import javax.swing.AbstractAction;
-import javax.swing.JFileChooser;
-import javax.swing.JOptionPane;
-import javax.swing.filechooser.FileFilter;
-
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.icons.WorkbenchIcons;
-
-import org.apache.log4j.Logger;
-
-/**
- * @author David Withers
- */
-@SuppressWarnings("serial")
-public abstract class OpenSourceWorkflowAction extends AbstractAction {
-
-	private static Logger logger = Logger.getLogger(OpenSourceWorkflowAction.class);
-
-	private static final String OPEN_WORKFLOW = "Open workflow...";
-
-	protected FileManager fileManager;
-
-	public OpenSourceWorkflowAction(FileManager fileManager) {
-		super(OPEN_WORKFLOW, WorkbenchIcons.openIcon);
-		this.fileManager = fileManager;
-	}
-
-	public void actionPerformed(ActionEvent e) {
-		final Component parentComponent;
-		if (e.getSource() instanceof Component) {
-			parentComponent = (Component) e.getSource();
-		} else {
-			parentComponent = null;
-		}
-		openWorkflows(parentComponent);
-	}
-
-	public abstract void openWorkflows(Component parentComponent, File[] files);
-
-	/**
-	 * Pop up an Open-dialogue to select one or more workflow files to open.
-	 *
-	 * @param parentComponent
-	 *            The UI parent component to use for pop up dialogues
-	 * @param openCallback
-	 *            An {@link OpenCallback} to be called during the file opening.
-	 *            The callback will be invoked for each file that has been
-	 *            opened, as file opening happens in a separate thread that
-	 *            might execute after the return of this method.
-	 * @return <code>false</code> if no files were selected or the dialogue was
-	 *         cancelled, or <code>true</code> if the process of opening one or
-	 *         more files has been started.
-	 */
-	public boolean openWorkflows(final Component parentComponent) {
-		JFileChooser fileChooser = new JFileChooser();
-		Preferences prefs = Preferences.userNodeForPackage(getClass());
-		String curDir = prefs.get("currentDir", System.getProperty("user.home"));
-		fileChooser.setDialogTitle(OPEN_WORKFLOW);
-
-		fileChooser.resetChoosableFileFilters();
-		fileChooser.setAcceptAllFileFilterUsed(false);
-		List<FileFilter> fileFilters = fileManager.getOpenFileFilters();
-		if (fileFilters.isEmpty()) {
-			logger.warn("No file types found for opening workflow");
-			JOptionPane
-					.showMessageDialog(parentComponent,
-							"No file types found for opening workflow.", "Error",
-							JOptionPane.ERROR_MESSAGE);
-			return false;
-		}
-		for (FileFilter fileFilter : fileFilters) {
-			fileChooser.addChoosableFileFilter(fileFilter);
-		}
-
-		fileChooser.setFileFilter(fileFilters.get(0));
-
-		fileChooser.setCurrentDirectory(new File(curDir));
-		fileChooser.setMultiSelectionEnabled(true);
-
-		int returnVal = fileChooser.showOpenDialog(parentComponent);
-		if (returnVal == JFileChooser.APPROVE_OPTION) {
-			prefs.put("currentDir", fileChooser.getCurrentDirectory().toString());
-			final File[] selectedFiles = fileChooser.getSelectedFiles();
-			if (selectedFiles.length == 0) {
-				logger.warn("No files selected");
-				return false;
-			}
-			new FileOpenerThread(parentComponent, selectedFiles).start();
-			return true;
-		}
-		return false;
-	}
-
-	private final class FileOpenerThread extends Thread {
-		private final File[] files;
-		private final Component parentComponent;
-
-		private FileOpenerThread(Component parentComponent, File[] selectedFiles) {
-			super("Opening workflows(s) " + Arrays.asList(selectedFiles));
-			this.parentComponent = parentComponent;
-			this.files = selectedFiles;
-		}
-
-		@Override
-		public void run() {
-			openWorkflows(parentComponent, files);
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/ReplaceNestedWorkflowAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/ReplaceNestedWorkflowAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/ReplaceNestedWorkflowAction.java
deleted file mode 100644
index 5578a5f..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/actions/ReplaceNestedWorkflowAction.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package net.sf.taverna.t2.workbench.file.importworkflow.actions;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-
-import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-import net.sf.taverna.t2.workbench.edits.Edit;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.importworkflow.gui.ImportWorkflowWizard;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workbench.ui.Utils;
-import net.sf.taverna.t2.workbench.ui.actions.activity.ActivityConfigurationAction;
-import net.sf.taverna.t2.workflow.edits.ConfigureEdit;
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-public class ReplaceNestedWorkflowAction extends ActivityConfigurationAction {
-	private static final long serialVersionUID = 1L;
-
-	private final EditManager editManager;
-	private final FileManager fileManager;
-	private final MenuManager menuManager;
-
-	private final ColourManager colourManager;
-
-	private final WorkbenchConfiguration workbenchConfiguration;
-
-	private final SelectionManager selectionManager;
-
-	public ReplaceNestedWorkflowAction(Activity activity, EditManager editManager,
-			FileManager fileManager, MenuManager menuManager,
-			ActivityIconManager activityIconManager, ColourManager colourManager,
-			ServiceDescriptionRegistry serviceDescriptionRegistry,
-			WorkbenchConfiguration workbenchConfiguration, SelectionManager selectionManager) {
-		super(activity, activityIconManager, serviceDescriptionRegistry);
-		this.editManager = editManager;
-		this.fileManager = fileManager;
-		this.menuManager = menuManager;
-		this.colourManager = colourManager;
-		this.workbenchConfiguration = workbenchConfiguration;
-		this.selectionManager = selectionManager;
-		putValue(NAME, "Replace nested workflow");
-	}
-
-	public void actionPerformed(ActionEvent e) {
-		final Component parentComponent;
-		if (e.getSource() instanceof Component) {
-			parentComponent = (Component) e.getSource();
-		} else {
-			parentComponent = null;
-		}
-		ImportWorkflowWizard wizard = new ImportWorkflowWizard(
-				Utils.getParentFrame(parentComponent), editManager, fileManager, menuManager,
-				colourManager, workbenchConfiguration, selectionManager) {
-			private static final long serialVersionUID = 1L;
-
-//			@Override
-//			protected Edit<?> makeInsertNestedWorkflowEdit(Workflow nestedFlow, String name) {
-//				Configuration configuration = new Configuration();
-//				configuration.setType(null);
-//				// TODO use service registry
-//				return new ConfigureEdit<Activity>(getActivity(), null, configuration);
-//			}
-
-//			@Override
-//			protected Activity getInsertedActivity() {
-//				return getActivity();
-//			}
-		};
-
-		wizard.setMergeEnabled(false);
-//		wizard.setCustomDestinationDataflow(fileManager.getCurrentDataflow(),
-//				"Existing nested workflow");
-//		wizard.setDestinationEnabled(false);
-		wizard.setVisible(true);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/gui/ImportWorkflowWizard.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/gui/ImportWorkflowWizard.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/gui/ImportWorkflowWizard.java
deleted file mode 100644
index fbad41d..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/gui/ImportWorkflowWizard.java
+++ /dev/null
@@ -1,1272 +0,0 @@
-package net.sf.taverna.t2.workbench.file.importworkflow.gui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Container;
-import java.awt.Frame;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.ButtonModel;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-import javax.swing.ProgressMonitor;
-import javax.swing.SwingUtilities;
-
-import net.sf.taverna.t2.activities.dataflow.servicedescriptions.DataflowTemplateService;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.MainWindow;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-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.file.DataflowInfo;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.exceptions.OpenException;
-import net.sf.taverna.t2.workbench.file.importworkflow.DataflowMerger;
-import net.sf.taverna.t2.workbench.file.importworkflow.MergeException;
-import net.sf.taverna.t2.workbench.file.importworkflow.actions.OpenSourceWorkflowAction;
-import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
-import net.sf.taverna.t2.workbench.models.graph.svg.SVGGraphController;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workflow.edits.AddChildEdit;
-import net.sf.taverna.t2.workflow.edits.AddProcessorEdit;
-
-import org.apache.batik.swing.JSVGCanvas;
-import org.apache.log4j.Logger;
-
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.Processor;
-import org.apache.taverna.scufl2.api.core.Workflow;
-import org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct;
-import org.apache.taverna.scufl2.api.port.InputActivityPort;
-import org.apache.taverna.scufl2.api.port.InputProcessorPort;
-import org.apache.taverna.scufl2.api.port.InputWorkflowPort;
-import org.apache.taverna.scufl2.api.port.OutputActivityPort;
-import org.apache.taverna.scufl2.api.port.OutputProcessorPort;
-import org.apache.taverna.scufl2.api.port.OutputWorkflowPort;
-import org.apache.taverna.scufl2.api.profiles.ProcessorBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorInputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.ProcessorOutputPortBinding;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-@SuppressWarnings("serial")
-public class ImportWorkflowWizard extends HelpEnabledDialog {
-
-	private static Logger logger = Logger.getLogger(ImportWorkflowWizard.class);
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	protected BrowseFileOnClick browseFileOnClick = new BrowseFileOnClick();
-	protected JButton buttonBrowse;
-	protected JComboBox chooseDataflow;
-	protected DataflowOpenerThread dataflowOpenerThread;
-
-	private WorkflowBundle destinationWorkflowBundle;
-	private Workflow destinationWorkflow;
-	private Profile destinationProfile;
-	private Workflow sourceWorkflow;
-
-	protected JTextField fieldFile;
-
-	protected JTextField fieldUrl;
-	protected boolean mergeEnabled = true;
-	protected boolean nestedEnabled = true;
-	protected JSVGCanvas previewSource = new JSVGCanvas(null, false, false);
-	protected JSVGCanvas previewDestination = new JSVGCanvas(null, false, false);
-	protected JTextField prefixField;
-	protected JRadioButton radioFile;
-	protected JRadioButton radioNew;
-	protected JRadioButton radioOpened;
-	protected JRadioButton radioUrl;
-	protected ButtonGroup sourceSelection;
-	protected ActionListener updateChosenListener = new UpdateChosenListener();
-	protected Thread updatePreviewsThread;
-	protected Component sourceSelectionPanel;
-	protected JLabel prefixLabel;
-	protected JLabel prefixHelp;
-//	protected JPanel destinationSelectionPanel;
-//	protected ButtonGroup destinationSelection;
-//	protected JRadioButton radioNewDestination;
-//	protected JRadioButton radioOpenDestination;
-//	protected JComboBox destinationAlreadyOpen;
-	protected JPanel introductionPanel;
-	protected ButtonGroup actionSelection;
-	protected JRadioButton actionNested;
-	protected JRadioButton actionMerge;
-	protected JRadioButton radioCustomSource;
-	protected JRadioButton radioCustomDestination;
-
-	private final EditManager editManager;
-	private final FileManager fileManager;
-	private final MenuManager menuManager;
-	private final ColourManager colourManager;
-	private final WorkbenchConfiguration workbenchConfiguration;
-	private final SelectionManager selectionManager;
-
-	private WorkflowBundle customSourceDataFlow = null;
-//	private Workflow customDestinationDataflow = null;
-	private String customSourceName = "";
-//	private String customDestinationName = "";
-
-	private boolean sourceEnabled = true;
-//	private boolean destinationEnabled = true;
-	private Activity insertedActivity;
-
-	public ImportWorkflowWizard(Frame parentFrame, EditManager editManager,
-			FileManager fileManager, MenuManager menuManager, ColourManager colourManager,
-			WorkbenchConfiguration workbenchConfiguration, SelectionManager selectionManager) {
-		super(parentFrame, "Import workflow", true, null);
-		this.selectionManager = selectionManager;
-		destinationWorkflow = selectionManager.getSelectedWorkflow();
-		destinationProfile = selectionManager.getSelectedProfile();
-		destinationWorkflowBundle = selectionManager.getSelectedWorkflowBundle();
-
-		this.editManager = editManager;
-		this.fileManager = fileManager;
-		this.menuManager = menuManager;
-		this.colourManager = colourManager;
-		this.workbenchConfiguration = workbenchConfiguration;
-
-		setSize(600, 600);
-		add(makeContentPane(), BorderLayout.CENTER);
-		// Add some space
-		add(new JPanel(), BorderLayout.WEST);
-		add(new JPanel(), BorderLayout.NORTH);
-		add(new JPanel(), BorderLayout.SOUTH);
-		add(new JPanel(), BorderLayout.EAST);
-		findChosenDataflow(this, true);
-		updateAll();
-	}
-
-	public void setMergeEnabled(boolean importEnabled) {
-		this.mergeEnabled = importEnabled;
-		updateAll();
-	}
-
-	public void setNestedEnabled(boolean nestedEnabled) {
-		this.nestedEnabled = nestedEnabled;
-		updateAll();
-	}
-
-	/**
-	 * Silly workaround to avoid "Cannot call invokeAndWait from the event dispatcher thread"
-	 * exception.
-	 *
-	 * @param runnable
-	 */
-	public static void invokeAndWait(Runnable runnable) {
-		if (SwingUtilities.isEventDispatchThread()) {
-			runnable.run();
-			return;
-		}
-		try {
-			SwingUtilities.invokeAndWait(runnable);
-		} catch (InterruptedException ex) {
-			// logger.warn("Runnable " + runnable + " was interrupted " + runnable, ex);
-		} catch (InvocationTargetException e) {
-			logger.warn("Can't invoke " + runnable, e);
-		}
-	}
-
-	protected Component makeWorkflowImage() {
-		JPanel workflowImages = new JPanel(new GridBagLayout());
-		GridBagConstraints gbc = new GridBagConstraints();
-		gbc.gridy = 0;
-		gbc.fill = GridBagConstraints.BOTH;
-		gbc.weighty = 0.1;
-
-		gbc.weightx = 0.1;
-		workflowImages.add(new JPanel(), gbc);// filler
-
-		gbc.weightx = 0.0;
-		previewSource.setBackground(workflowImages.getBackground());
-		workflowImages.add(previewSource, gbc);
-
-		JLabel arrow = new JLabel("\u2192");
-		arrow.setFont(arrow.getFont().deriveFont(48f));
-		workflowImages.add(arrow, gbc);
-
-		previewDestination.setBackground(workflowImages.getBackground());
-		workflowImages.add(previewDestination, gbc);
-
-		gbc.weightx = 0.1;
-		workflowImages.add(new JPanel(), gbc);
-		gbc.weightx = 0.0;
-
-		return workflowImages;
-	}
-
-	protected void updateAll() {
-		updatePreviews(); // will go in separate thread anyway, do it first
-		updateHeader();
-		updateSourceSection();
-//		updateDestinationSection();
-		updateFooter();
-	}
-
-//	protected void updateDestinationSection() {
-//
-//		radioNewDestination.setVisible(false);
-//
-//		radioCustomDestination.setText(customDestinationName);
-//		radioCustomDestination.setVisible(customDestinationDataflow != null);
-//
-//		// radioNewDestination.setVisible(nestedEnabled);
-//		// radioNewDestination.setEnabled(actionNested.isSelected());
-//
-//		destinationSelectionPanel.setVisible(destinationEnabled);
-//
-//	}
-
-	protected synchronized void updatePreviews() {
-		if (updatePreviewsThread != null && updatePreviewsThread.isAlive()) {
-			updatePreviewsThread.interrupt();
-		}
-		updatePreviewsThread = new UpdatePreviewsThread();
-		updatePreviewsThread.start();
-	}
-
-	protected void updateDestinationPreview() {
-		updateWorkflowGraphic(previewDestination, destinationWorkflow, destinationProfile);
-	}
-
-	protected void updateSourcePreview() {
-		Profile sourceProfile = null;
-		if (sourceWorkflow != null) {
-			sourceProfile = sourceWorkflow.getParent().getMainProfile();
-		}
-		updateWorkflowGraphic(previewSource, sourceWorkflow, sourceProfile);
-	}
-
-	protected void updateFooter() {
-		prefixField.setVisible(mergeEnabled);
-		prefixLabel.setVisible(mergeEnabled);
-		prefixHelp.setVisible(mergeEnabled);
-
-		prefixField.setEnabled(actionMerge.isSelected());
-		prefixLabel.setEnabled(actionMerge.isSelected());
-		prefixHelp.setEnabled(actionMerge.isSelected());
-		if (actionMerge.isSelected()) {
-			prefixHelp.setForeground(prefixLabel.getForeground());
-		} else {
-			// Work around
-			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4303706
-			// and assume gray is the 'disabled' colour in our Look n Feel
-			prefixHelp.setForeground(Color.gray);
-		}
-
-	}
-
-	protected void updateHeader() {
-		makeIntroductionPanel();
-	}
-
-	protected void updateSourceSection() {
-		radioCustomSource.setText(customSourceName);
-		radioCustomSource.setVisible(customSourceDataFlow != null);
-
-		radioNew.setVisible(nestedEnabled);
-		radioNew.setEnabled(actionNested.isSelected());
-
-		if (actionNested.isSelected() && sourceSelection.getSelection() == null) {
-			// Preselect the new workflow
-			radioNew.setSelected(true);
-		}
-
-		sourceSelectionPanel.setVisible(sourceEnabled);
-	}
-
-	/**
-	 * Create a PNG image of the workflow and place inside an ImageIcon
-	 *
-	 * @param dataflow
-	 * @return
-	 * @throws InvocationTargetException
-	 * @throws InterruptedException
-	 */
-	protected void updateWorkflowGraphic(final JSVGCanvas svgCanvas, final Workflow workflow, final Profile profile) {
-		try {
-			SwingUtilities.invokeAndWait(new Runnable() {
-				public void run() {
-					// Set it to blank while reloading
-					svgCanvas.setSVGDocument(null);
-					if (workflow != null) {
-						SVGGraphController currentWfGraphController = new SVGGraphController(
-								workflow, profile, false, svgCanvas,
-								editManager, menuManager, colourManager, workbenchConfiguration);
-					}
-				}
-			});
-		} catch (InterruptedException e) {
-			// logger.error(e);
-		} catch (InvocationTargetException e) {
-			// logger.error(e);
-		}
-	}
-
-	/**
-	 * Open the selected source and destination workflows. If background is true, this method will
-	 * return immediately while a {@link DataflowOpenerThread} performs the updates. If a
-	 * DataflowOpenerThread is already running, it will be interrupted and stopped.
-	 *
-	 * @param parentComponent
-	 *            The parent component for showing dialogues
-	 * @param background
-	 *            If true, will run in separate thread.
-	 * @return <code>false</code> if running in the background, or if a dialogue was shown and the
-	 *         operation is aborted by the user, or <code>true</code> if not running in the
-	 *         background and the method completed without user interruption.
-	 */
-	protected synchronized boolean findChosenDataflow(Component parentComponent, boolean background) {
-		if (dataflowOpenerThread != null && dataflowOpenerThread.isAlive()) {
-			if (background) {
-				// We've changed our mind
-				dataflowOpenerThread.interrupt();
-			} else {
-				// We'll let it finish, we don't need to do it again
-				try {
-					dataflowOpenerThread.join();
-				} catch (InterruptedException e) {
-					Thread.currentThread().interrupt();
-				}
-				return !dataflowOpenerThread.shownWarning;
-			}
-		}
-		dataflowOpenerThread = new DataflowOpenerThread(parentComponent, background);
-
-		if (background) {
-			dataflowOpenerThread.start();
-			return false;
-		} else {
-			dataflowOpenerThread.run();
-			return !dataflowOpenerThread.shownWarning;
-		}
-
-	}
-
-	protected Container makeContentPane() {
-		JPanel panel = new JPanel(new GridBagLayout());
-		GridBagConstraints gbc = new GridBagConstraints();
-
-		gbc.ipadx = 5;
-		gbc.ipady = 5;
-
-		gbc.gridx = 0;
-		gbc.weightx = 0.1;
-		gbc.fill = GridBagConstraints.BOTH;
-
-		introductionPanel = makeIntroductionPanel();
-		panel.add(introductionPanel, gbc);
-
-		sourceSelectionPanel = makeSourceSelectionPanel();
-		panel.add(sourceSelectionPanel, gbc);
-
-//		destinationSelectionPanel = makeDestinationSelectionPanel();
-//		panel.add(destinationSelectionPanel, gbc);
-
-		gbc.weighty = 0.1;
-		panel.add(makeImportStylePanel(), gbc);
-
-		return panel;
-	}
-
-	protected JPanel makeIntroductionPanel() {
-		if (introductionPanel == null) {
-			introductionPanel = new JPanel(new GridBagLayout());
-		} else {
-			introductionPanel.removeAll();
-		}
-		boolean bothEnabled = mergeEnabled && nestedEnabled;
-		if (bothEnabled) {
-			introductionPanel.setBorder(BorderFactory.createTitledBorder("Import method"));
-		} else {
-			introductionPanel.setBorder(BorderFactory.createEmptyBorder());
-		}
-		GridBagConstraints gbc = new GridBagConstraints();
-		gbc.gridx = 0;
-		// gbc.gridy = 0;
-		gbc.weightx = 0.1;
-		gbc.fill = GridBagConstraints.BOTH;
-		gbc.anchor = GridBagConstraints.FIRST_LINE_START;
-
-		StringBuilder nestedHelp = new StringBuilder();
-		nestedHelp.append("<html><small>");
-		nestedHelp.append("Add a <strong>nested workflow</strong> ");
-		nestedHelp.append("into the ");
-		nestedHelp.append("destination workflow as a single service. ");
-		nestedHelp.append("The nested workflow ");
-		nestedHelp.append("can be <em>edited separately</em>, but is shown ");
-		nestedHelp.append("expanded in the diagram of the parent  ");
-		nestedHelp.append("workflow. In the parent workflow you can ");
-		nestedHelp.append("connect to the input and output ports of the nested ");
-		nestedHelp.append("workflow. ");
-		nestedHelp.append("</small></html>");
-
-		StringBuilder mergeHelp = new StringBuilder();
-		mergeHelp.append("<html><small>");
-		mergeHelp.append("<strong>Merge</strong> a workflow ");
-		mergeHelp.append("by copying all services, ports and links ");
-		mergeHelp.append("directly into the destination workflow. This can be  ");
-		mergeHelp.append("useful for merging smaller workflow fragments. For ");
-		mergeHelp.append("inclusion of larger workflows you might find using ");
-		mergeHelp.append("<em>nested workflows</em> more beneficial.");
-		mergeHelp.append("</small></html>");
-
-		actionSelection = new ButtonGroup();
-		actionNested = new JRadioButton(nestedHelp.toString());
-		ActionListener updateListener = new ActionListener() {
-			public void actionPerformed(ActionEvent e) {
-				updateSourceSection();
-//				updateDestinationSection();
-				updateFooter();
-			}
-		};
-		actionNested.addActionListener(updateListener);
-		actionSelection.add(actionNested);
-
-		actionMerge = new JRadioButton(mergeHelp.toString());
-		actionMerge.addActionListener(updateListener);
-		actionSelection.add(actionMerge);
-
-		if (bothEnabled) {
-			introductionPanel.add(actionNested, gbc);
-			introductionPanel.add(actionMerge, gbc);
-			actionNested.setSelected(true);
-		} else if (nestedEnabled) {
-			introductionPanel.add(new JLabel(nestedHelp.toString()), gbc);
-			actionNested.setSelected(true);
-		} else if (mergeEnabled) {
-			introductionPanel.add(new JLabel(mergeHelp.toString()), gbc);
-			actionMerge.setSelected(true);
-		}
-		return introductionPanel;
-	}
-
-//	protected JPanel makeDestinationSelectionPanel() {
-//		JPanel j = new JPanel(new GridBagLayout());
-//		j.setBorder(BorderFactory.createTitledBorder("Workflow destination"));
-//
-//		GridBagConstraints gbc = new GridBagConstraints();
-//		gbc.gridx = 0;
-//		gbc.gridy = 0;
-//		gbc.fill = GridBagConstraints.BOTH;
-//
-//		destinationSelection = new ButtonGroup();
-//		radioNewDestination = new JRadioButton("New workflow");
-//		gbc.gridy = 0;
-//		j.add(radioNewDestination, gbc);
-//		destinationSelection.add(radioNewDestination);
-//		radioNewDestination.addActionListener(updateChosenListener);
-//
-//		radioOpenDestination = new JRadioButton("Already opened workflow");
-//		gbc.gridy = 2;
-//		j.add(radioOpenDestination, gbc);
-//		destinationSelection.add(radioOpenDestination);
-//		radioOpenDestination.addActionListener(updateChosenListener);
-//		gbc.weightx = 0.1;
-//		gbc.gridx = 1;
-//		destinationAlreadyOpen = makeSelectOpenWorkflowComboBox(true);
-//		j.add(destinationAlreadyOpen, gbc);
-//
-//		radioCustomDestination = new JRadioButton(customDestinationName);
-//		radioCustomDestination.setVisible(customDestinationName != null);
-//		gbc.gridx = 0;
-//		gbc.gridy = 3;
-//		gbc.gridwidth = 2;
-//		j.add(radioCustomDestination, gbc);
-//		destinationSelection.add(radioCustomDestination);
-//		radioCustomDestination.addActionListener(updateChosenListener);
-//		gbc.gridwidth = 1;
-//
-//		radioOpenDestination.setSelected(true);
-//		return j;
-//	}
-
-	protected Component makeImportStylePanel() {
-		JPanel j = new JPanel(new GridBagLayout());
-		GridBagConstraints gbc = new GridBagConstraints();
-		gbc.gridx = 0;
-		gbc.gridy = 0;
-		gbc.fill = GridBagConstraints.BOTH;
-
-		j.setBorder(BorderFactory.createTitledBorder("Import"));
-
-		prefixLabel = new JLabel("Prefix");
-		j.add(prefixLabel, gbc);
-		gbc.weightx = 0.1;
-		gbc.gridx = 1;
-
-		prefixField = new JTextField(10);
-		prefixLabel.setLabelFor(prefixField);
-		j.add(prefixField, gbc);
-
-		gbc.gridx = 0;
-		gbc.gridy = 1;
-		gbc.gridwidth = 2;
-
-		prefixHelp = new JLabel(
-				"<html><small>Optional prefix to be prepended to the name of the "
-						+ "inserted services and workflow ports. Even if no prefix is given, duplicate names will be "
-						+ "resolved by adding numbers, for instance <code>my_service_2</code> if <code>my_service</code> already "
-						+ "existed." + "</small></html>");
-		prefixHelp.setLabelFor(prefixField);
-		j.add(prefixHelp, gbc);
-
-		gbc.gridy = 2;
-		gbc.weightx = 0.1;
-		gbc.weighty = 0.1;
-
-		j.add(makeWorkflowImage(), gbc);
-
-		gbc.gridy = 3;
-		gbc.weighty = 0.0;
-		j.add(new JPanel(), gbc);
-
-		gbc.gridy = 4;
-		gbc.fill = GridBagConstraints.NONE;
-		JButton comp = new JButton(new ImportWorkflowAction());
-		j.add(comp, gbc);
-		return j;
-
-	}
-
-	protected Component makeSelectFile() {
-		JPanel j = new JPanel(new GridBagLayout());
-		j.setBorder(BorderFactory.createEtchedBorder());
-
-		GridBagConstraints gbc = new GridBagConstraints();
-		gbc.gridx = 0;
-		gbc.gridy = 0;
-		gbc.fill = GridBagConstraints.BOTH;
-		gbc.weightx = 0.1;
-
-		fieldFile = new JTextField(20);
-		fieldFile.setEditable(false);
-		fieldFile.addFocusListener(new FocusAdapter() {
-			public void focusGained(FocusEvent e) {
-				radioFile.setSelected(true);
-			}
-
-			@Override
-			public void focusLost(FocusEvent e) {
-				findChosenDataflow(e.getComponent(), true);
-			}
-		});
-		j.add(fieldFile, gbc);
-		radioFile.addItemListener(new ItemListener() {
-
-			public void itemStateChanged(ItemEvent e) {
-				if (e.getStateChange() == ItemEvent.SELECTED) {
-					browseFileOnClick.checkEmptyFile();
-				}
-			}
-		});
-
-		gbc.gridx = 1;
-		gbc.weightx = 0.0;
-		gbc.fill = GridBagConstraints.NONE;
-		buttonBrowse = new JButton(new OpenSourceWorkflowAction(fileManager) {
-			@Override
-			public void openWorkflows(Component parentComponent, File[] files) {
-				if (files.length == 0) {
-					radioFile.setSelected(false);
-					fieldFile.setText("");
-					radioFile.requestFocus();
-					return;
-				}
-				fieldFile.setText(files[0].getPath());
-				if (!radioFile.isSelected()) {
-					radioFile.setSelected(true);
-				}
-				findChosenDataflow(parentComponent, true);
-			}
-		});
-		buttonBrowse.setText("Browse");
-		j.add(buttonBrowse, gbc);
-
-		// This just duplicates things - we already have actions on
-		// the radioFile and fieldFile that will handle the events
-		// radioFile.addActionListener(browseFileOnClick);
-		// fieldFile.addActionListener(browseFileOnClick);
-		return j;
-	}
-
-	protected JComboBox makeSelectOpenWorkflowComboBox(boolean selectCurrent) {
-		List<DataflowSelection> openDataflows = new ArrayList<DataflowSelection>();
-		DataflowSelection current = null;
-		for (WorkflowBundle df : fileManager.getOpenDataflows()) {
-			String name = df.getMainWorkflow().getName();
-			boolean isCurrent = df.equals(fileManager.getCurrentDataflow());
-			if (isCurrent) {
-				// Wrapping as HTML causes weird drop-down box under MAC, so
-				// we just use normal text
-				// name = "<html><body>" + name
-				// + " <i>(current)</i></body></html>";
-				name = name + " (current)";
-			}
-			DataflowSelection selection = new DataflowSelection(df, name);
-			openDataflows.add(selection);
-			if (isCurrent) {
-				current = selection;
-			}
-		}
-		JComboBox chooseDataflow = new JComboBox(openDataflows.toArray());
-		if (selectCurrent) {
-			chooseDataflow.setSelectedItem(current);
-		}
-		chooseDataflow.addActionListener(updateChosenListener);
-		return chooseDataflow;
-
-	}
-
-	protected Component makeSourceSelectionPanel() {
-		JPanel j = new JPanel(new GridBagLayout());
-		j.setBorder(BorderFactory.createTitledBorder("Workflow source"));
-
-		GridBagConstraints gbc = new GridBagConstraints();
-		gbc.gridx = 0;
-		gbc.gridy = 0;
-		gbc.fill = GridBagConstraints.BOTH;
-
-		sourceSelection = new ButtonGroup();
-		radioNew = new JRadioButton("New workflow");
-		gbc.gridy = 0;
-		j.add(radioNew, gbc);
-		sourceSelection.add(radioNew);
-
-		radioNew.addActionListener(updateChosenListener);
-
-		radioFile = new JRadioButton("Import from file");
-		gbc.gridy = 1;
-		j.add(radioFile, gbc);
-		sourceSelection.add(radioFile);
-		radioFile.addActionListener(updateChosenListener);
-
-		radioUrl = new JRadioButton("Import from URL");
-		gbc.gridy = 2;
-		j.add(radioUrl, gbc);
-		sourceSelection.add(radioUrl);
-		radioUrl.addActionListener(updateChosenListener);
-
-		radioOpened = new JRadioButton("Already opened workflow");
-		gbc.gridy = 3;
-		j.add(radioOpened, gbc);
-		sourceSelection.add(radioOpened);
-		radioOpened.addActionListener(updateChosenListener);
-
-		radioCustomSource = new JRadioButton(customSourceName);
-		radioCustomSource.setVisible(customSourceDataFlow != null);
-		gbc.gridy = 4;
-		gbc.gridwidth = 2;
-		j.add(radioCustomSource, gbc);
-		sourceSelection.add(radioCustomSource);
-		radioCustomSource.addActionListener(updateChosenListener);
-		gbc.gridwidth = 1;
-
-		gbc.gridx = 1;
-		gbc.gridy = 1;
-		gbc.weightx = 0.1;
-		j.add(makeSelectFile(), gbc);
-
-		gbc.gridy = 2;
-		fieldUrl = new JTextField(20);
-		j.add(fieldUrl, gbc);
-		fieldUrl.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusGained(FocusEvent e) {
-				radioUrl.setSelected(true);
-			}
-
-			@Override
-			public void focusLost(FocusEvent e) {
-				findChosenDataflow(e.getComponent(), true);
-			}
-		});
-
-		gbc.gridy = 3;
-		chooseDataflow = makeSelectOpenWorkflowComboBox(false);
-		chooseDataflow.addFocusListener(new FocusAdapter() {
-			@Override
-			public void focusGained(FocusEvent e) {
-				radioOpened.setSelected(true);
-			}
-		});
-		j.add(chooseDataflow, gbc);
-
-		return j;
-	}
-
-	protected Edit<?> makeInsertNestedWorkflowEdit(Workflow nestedFlow) {
-		Processor processor = new Processor();
-		processor.setName("nestedWorkflow");
-
-		CrossProduct crossProduct = new CrossProduct();
-		crossProduct.setParent(processor.getIterationStrategyStack());
-
-		Activity activity = new Activity();
-		activity.setType(DataflowTemplateService.ACTIVITY_TYPE);
-		Configuration configuration = new Configuration();
-		configuration.setType(DataflowTemplateService.ACTIVITY_TYPE.resolve("#Config"));
-		destinationWorkflowBundle.getWorkflows().addWithUniqueName(nestedFlow);
-		((ObjectNode) configuration.getJson()).put("nestedWorkflow", nestedFlow.getName());
-		destinationWorkflowBundle.getWorkflows().remove(nestedFlow);
-		configuration.setConfigures(activity);
-
-		ProcessorBinding processorBinding = new ProcessorBinding();
-		processorBinding.setBoundProcessor(processor);
-		processorBinding.setBoundActivity(activity);
-
-		for (InputWorkflowPort workflowPort : nestedFlow.getInputPorts()) {
-			InputActivityPort activityPort = new InputActivityPort(activity, workflowPort.getName());
-			activityPort.setDepth(workflowPort.getDepth());
-			// create processor port
-			InputProcessorPort processorPort = new InputProcessorPort(processor, activityPort.getName());
-			processorPort.setDepth(activityPort.getDepth());
-			// add a new port binding
-			new ProcessorInputPortBinding(processorBinding, processorPort, activityPort);
-		}
-		for (OutputWorkflowPort workflowPort : nestedFlow.getOutputPorts()) {
-			OutputActivityPort activityPort = new OutputActivityPort(activity, workflowPort.getName());
-			// TODO calculate output depth
-			activityPort.setDepth(0);
-			activityPort.setGranularDepth(0);
-			// create processor port
-			OutputProcessorPort processorPort = new OutputProcessorPort(processor, activityPort.getName());
-			processorPort.setDepth(activityPort.getDepth());
-			processorPort.setGranularDepth(activityPort.getGranularDepth());
-			// add a new port binding
-			new ProcessorOutputPortBinding(processorBinding, activityPort, processorPort);
-		}
-
-		List<Edit<?>> editList = new ArrayList<Edit<?>>();
-		editList.add(new AddChildEdit<Profile>(destinationProfile, activity));
-		editList.add(new AddChildEdit<Profile>(destinationProfile, configuration));
-		editList.add(new AddChildEdit<Profile>(destinationProfile, processorBinding));
-		editList.add(new AddProcessorEdit(destinationWorkflow, processor));
-
-		editList.add(makeInsertWorkflowEdit(nestedFlow, nestedFlow.getParent().getMainProfile()));
-
-		return new CompoundEdit(editList);
-	}
-
-	protected Edit<?> makeInsertWorkflowEdit(Workflow nestedFlow, Profile profile) {
-		return makeInsertWorkflowEdit(nestedFlow, profile, new HashSet<>());
-	}
-
-	protected Edit<?> makeInsertWorkflowEdit(Workflow nestedFlow, Profile profile, Set<Object> seen) {
-		List<Edit<?>> editList = new ArrayList<Edit<?>>();
-		// add the nested workflow to the workflow bundle
-		editList.add(new AddChildEdit<WorkflowBundle>(destinationWorkflowBundle, nestedFlow));
-		seen.add(nestedFlow);
-		for (Processor processor : nestedFlow.getProcessors()) {
-			// add processor bindings to the profile
-			List<ProcessorBinding> processorBindings = scufl2Tools.processorBindingsForProcessor(processor, profile);
-			for (ProcessorBinding processorBinding : processorBindings) {
-				editList.add(new AddChildEdit<Profile>(destinationProfile, processorBinding));
-				// add activity to the profile
-				Activity activity = processorBinding.getBoundActivity();
-				if (!seen.contains(activity)) {
-					editList.add(new AddChildEdit<Profile>(destinationProfile, activity));
-					// add activity configurations to the profile
-					for (Configuration configuration : scufl2Tools.configurationsFor(activity, profile)) {
-						editList.add(new AddChildEdit<Profile>(destinationProfile, configuration));
-					}
-					seen.add(activity);
-				}
-			}
-			// add processor configurations to the profile
-			List<Configuration> configurations = scufl2Tools.configurationsFor(processor, profile);
-			for (Configuration configuration : configurations) {
-				editList.add(new AddChildEdit<Profile>(destinationProfile, configuration));
-			}
-
-			for (Workflow workflow : scufl2Tools.nestedWorkflowsForProcessor(processor, profile)) {
-				if (!seen.contains(workflow)) {
-					// recursively add nested workflows
-					editList.add(makeInsertWorkflowEdit(workflow, profile, seen));
-				}
-			}
-		}
-		return new CompoundEdit(editList);
-	}
-
-//	protected Activity getInsertedActivity() {
-//		return insertedActivity;
-//	}
-
-	protected class ImportWorkflowAction extends AbstractAction implements Runnable {
-		private static final String VALID_NAME_REGEX = "[\\p{L}\\p{Digit}_.]+";
-		private Component parentComponent;
-		private ProgressMonitor progressMonitor;
-
-		protected ImportWorkflowAction() {
-			super("Import workflow");
-		}
-
-		public void actionPerformed(ActionEvent e) {
-			/*
-			 * if (e.getSource() instanceof Component) { parentComponent = (Component)
-			 * e.getSource(); } else { parentComponent = null; }
-			 */
-			parentComponent = MainWindow.getMainWindow();
-			Thread t = new Thread(this, "Import workflow");
-			progressMonitor = new ProgressMonitor(parentComponent, "Importing workflow", "", 0, 100);
-			progressMonitor.setMillisToDecideToPopup(200);
-			progressMonitor.setProgress(5);
-			t.start();
-			setVisible(false);
-		}
-
-		protected void nested() {
-			if (progressMonitor.isCanceled()) {
-				return;
-			}
-			progressMonitor.setProgress(15);
-			selectionManager.setSelectedWorkflowBundle(destinationWorkflowBundle);
-			if (progressMonitor.isCanceled()) {
-				return;
-			}
-
-			progressMonitor.setNote("Copying source workflow");
-			Workflow nestedFlow;
-			try {
-				nestedFlow = DataflowMerger.copyWorkflow(sourceWorkflow);
-			} catch (Exception ex) {
-				logger.warn("Could not copy nested workflow", ex);
-				progressMonitor.setProgress(100);
-				JOptionPane.showMessageDialog(parentComponent,
-						"An error occured while copying workflow:\n" + ex.getLocalizedMessage(),
-						"Could not copy nested workflow", JOptionPane.WARNING_MESSAGE);
-				return;
-			}
-			if (progressMonitor.isCanceled()) {
-				return;
-			}
-
-			progressMonitor.setNote("Creating nested workflow");
-			progressMonitor.setProgress(45);
-
-			Edit<?> edit = makeInsertNestedWorkflowEdit(nestedFlow);
-			if (progressMonitor.isCanceled()) {
-				return;
-			}
-
-			progressMonitor.setNote("Inserting nested workflow");
-			progressMonitor.setProgress(65);
-
-			try {
-				editManager.doDataflowEdit(destinationWorkflowBundle, edit);
-			} catch (EditException e) {
-				progressMonitor.setProgress(100);
-				logger.warn("Could not import nested workflow", e);
-				JOptionPane.showMessageDialog(parentComponent,
-						"An error occured while importing workflow:\n" + e.getLocalizedMessage(),
-						"Could not import workflows", JOptionPane.WARNING_MESSAGE);
-				return;
-			}
-
-			if (radioNew.isSelected()) {
-				progressMonitor.setNote("Opening new nested workflow for editing");
-				progressMonitor.setProgress(90);
-				selectionManager.setSelectedWorkflow(nestedFlow);
-			}
-			progressMonitor.setProgress(100);
-		}
-
-		protected void merge() {
-			progressMonitor.setProgress(10);
-			DataflowMerger merger = new DataflowMerger(destinationWorkflow);
-			progressMonitor.setProgress(25);
-			progressMonitor.setNote("Planning workflow merging");
-
-			String prefix = prefixField.getText();
-			if (!prefix.equals("")) {
-				if (!prefix.matches("[_.]$")) {
-					prefix = prefix + "_";
-				}
-				if (!prefix.matches(VALID_NAME_REGEX)) {
-					progressMonitor.setProgress(100);
-					final String wrongPrefix = prefix;
-					SwingUtilities.invokeLater(new Runnable() {
-						public void run() {
-							JOptionPane.showMessageDialog(parentComponent, "The merge prefix '"
-									+ wrongPrefix + "' is not valid. Try "
-									+ "using only letters, numbers, " + "underscore and dot.",
-									"Invalid merge prefix", JOptionPane.ERROR_MESSAGE);
-							prefixField.requestFocus();
-							ImportWorkflowWizard.this.setVisible(true);
-						}
-					});
-					return;
-				}
-			}
-
-			CompoundEdit mergeEdit;
-			try {
-				mergeEdit = merger.getMergeEdit(ImportWorkflowWizard.this.sourceWorkflow, prefix);
-			} catch (MergeException e1) {
-				progressMonitor.setProgress(100);
-				logger.warn("Could not merge workflow", e1);
-				JOptionPane.showMessageDialog(parentComponent,
-						"An error occured while merging workflows:\n" + e1.getLocalizedMessage(),
-						"Could not merge workflows", JOptionPane.WARNING_MESSAGE);
-				return;
-			}
-
-			progressMonitor.setProgress(55);
-			selectionManager.setSelectedWorkflowBundle(destinationWorkflowBundle);
-
-			progressMonitor.setNote("Merging workflows");
-			progressMonitor.setProgress(75);
-
-			if (progressMonitor.isCanceled()) {
-				return;
-			}
-
-			try {
-				editManager.doDataflowEdit(destinationWorkflowBundle, mergeEdit);
-			} catch (EditException e1) {
-				progressMonitor.setProgress(100);
-				JOptionPane.showMessageDialog(parentComponent,
-						"An error occured while merging workflows:\n" + e1.getLocalizedMessage(),
-						"Could not merge workflows", JOptionPane.WARNING_MESSAGE);
-				return;
-			}
-			progressMonitor.setProgress(100);
-
-		}
-
-		public void run() {
-			boolean completed = findChosenDataflow(parentComponent, false);
-			if (!completed) {
-				return;
-			}
-			if (actionMerge.isSelected()) {
-				merge();
-			} else if (actionNested.isSelected()) {
-				nested();
-			}
-		}
-	}
-
-	protected class UpdatePreviewsThread extends Thread {
-		protected UpdatePreviewsThread() {
-			super("Updating destination previews");
-		}
-
-		public void run() {
-			if (Thread.interrupted()) {
-				return;
-			}
-			updateSourcePreview();
-
-			if (Thread.interrupted()) {
-				return;
-			}
-			updateDestinationPreview();
-		}
-	}
-
-	protected class BrowseFileOnClick implements ActionListener {
-		public void actionPerformed(ActionEvent e) {
-			checkEmptyFile();
-		}
-
-		public void checkEmptyFile() {
-			if (radioFile.isSelected() && fieldFile.getText().equals("")) {
-				// On first label click pop up Browse dialogue.
-				buttonBrowse.doClick();
-			}
-		}
-	}
-
-	protected class DataflowOpenerThread extends Thread {
-		private final boolean background;
-		private final Component parentComponent;
-		private boolean shouldStop = false;
-		private boolean shownWarning = false;
-
-		protected DataflowOpenerThread(Component parentComponent, boolean background) {
-			super("Inspecting selected workflow");
-			this.parentComponent = parentComponent;
-			this.background = background;
-		}
-
-		@Override
-		public void interrupt() {
-			this.shouldStop = true;
-			super.interrupt();
-		}
-
-		public void run() {
-			updateSource();
-//			updateDestination();
-		}
-
-//		public void updateDestination() {
-//			ButtonModel selection = destinationSelection.getSelection();
-//			Workflow chosenDataflow = null;
-//			if (selection == null) {
-//				chosenDataflow = null;
-//			} else if (selection.equals(radioNewDestination.getModel())) {
-//				chosenDataflow = new Workflow();
-//			} else if (selection.equals(radioOpenDestination.getModel())) {
-//				DataflowSelection chosen = (DataflowSelection) destinationAlreadyOpen
-//						.getSelectedItem();
-//				chosenDataflow = chosen.getDataflow();
-//			} else if (selection.equals(radioCustomDestination.getModel())) {
-//				chosenDataflow = customDestinationDataflow;
-//			} else {
-//				logger.error("Unknown selection " + selection);
-//			}
-//
-//			if (chosenDataflow == null) {
-//				if (!background && !shownWarning) {
-//					shownWarning = true;
-//					SwingUtilities.invokeLater(new Runnable() {
-//						public void run() {
-//							JOptionPane.showMessageDialog(parentComponent,
-//									"You need to choose a destination workflow",
-//									"No destination workflow chosen", JOptionPane.ERROR_MESSAGE);
-//							setVisible(true);
-//						}
-//					});
-//					return;
-//				}
-//			}
-//			if (checkInterrupted()) {
-//				return;
-//			}
-//			if (chosenDataflow != ImportWorkflowWizard.this.destinationDataflow) {
-//				updateWorkflowGraphic(previewDestination, chosenDataflow);
-//				if (checkInterrupted()) {
-//					return;
-//				}
-//				ImportWorkflowWizard.this.destinationDataflow = chosenDataflow;
-//			}
-//
-//		}
-
-		public void updateSource() {
-			ButtonModel selection = sourceSelection.getSelection();
-			Workflow chosenDataflow = null;
-			if (selection == null) {
-				chosenDataflow = null;
-			} else if (selection.equals(radioNew.getModel())) {
-				WorkflowBundle workflowBundle = new WorkflowBundle();
-				workflowBundle.setMainWorkflow(new Workflow());
-				workflowBundle.getMainWorkflow().setName(fileManager.getDefaultWorkflowName());
-				workflowBundle.setMainProfile(new Profile());
-				scufl2Tools.setParents(workflowBundle);
-				chosenDataflow = workflowBundle.getMainWorkflow();
-			} else if (selection.equals(radioFile.getModel())) {
-				final String filePath = fieldFile.getText();
-				try {
-					DataflowInfo opened = fileManager
-							.openDataflowSilently(null, new File(filePath));
-					if (checkInterrupted()) {
-						return;
-					}
-					chosenDataflow = opened.getDataflow().getMainWorkflow();
-				} catch (final OpenException e1) {
-					if (!background && !shownWarning) {
-						shownWarning = true;
-						logger.warn("Could not open workflow for merging: " + filePath, e1);
-						SwingUtilities.invokeLater(new Runnable() {
-							public void run() {
-								radioFile.requestFocus();
-								JOptionPane.showMessageDialog(parentComponent,
-										"An error occured while trying to open " + filePath + "\n"
-												+ e1.getMessage(), "Could not open workflow",
-										JOptionPane.WARNING_MESSAGE);
-								setVisible(true);
-							}
-						});
-					}
-				}
-			} else if (selection.equals(radioUrl.getModel())) {
-				final String url = fieldUrl.getText();
-				try {
-					DataflowInfo opened = fileManager.openDataflowSilently(null, new URL(url));
-					if (checkInterrupted()) {
-						return;
-					}
-					chosenDataflow = opened.getDataflow().getMainWorkflow();
-				} catch (final OpenException e1) {
-					if (!background && !shownWarning) {
-						logger.warn("Could not open source workflow: " + url, e1);
-						shownWarning = true;
-						SwingUtilities.invokeLater(new Runnable() {
-							public void run() {
-								fieldUrl.requestFocus();
-								JOptionPane.showMessageDialog(
-										parentComponent,
-										"An error occured while trying to open " + url + "\n"
-												+ e1.getMessage(), "Could not open workflow",
-										JOptionPane.WARNING_MESSAGE);
-								setVisible(true);
-							}
-						});
-
-					}
-					if (checkInterrupted()) {
-						return;
-					}
-				} catch (final MalformedURLException e1) {
-					if (!background && !shownWarning) {
-						logger.warn("Invalid workflow URL: " + url, e1);
-						shownWarning = true;
-						SwingUtilities.invokeLater(new Runnable() {
-							public void run() {
-								fieldUrl.requestFocus();
-								JOptionPane.showMessageDialog(
-										parentComponent,
-										"The workflow location " + url + " is invalid\n"
-												+ e1.getLocalizedMessage(), "Invalid URL",
-										JOptionPane.ERROR_MESSAGE);
-								setVisible(true);
-							}
-						});
-					}
-					if (checkInterrupted()) {
-						return;
-					}
-				}
-			} else if (selection.equals(radioOpened.getModel())) {
-				DataflowSelection chosen = (DataflowSelection) chooseDataflow.getSelectedItem();
-				chosenDataflow = chosen.getDataflow().getMainWorkflow();
-			} else if (selection.equals(radioCustomSource.getModel())) {
-				chosenDataflow = customSourceDataFlow.getMainWorkflow();
-			} else {
-				logger.error("Unknown selection " + selection);
-			}
-			if (checkInterrupted()) {
-				return;
-			}
-			if (chosenDataflow != ImportWorkflowWizard.this.sourceWorkflow) {
-				Profile chosenProfile = null;
-				if (chosenDataflow != null) {
-					chosenProfile = chosenDataflow.getParent().getMainProfile();
-				}
-				updateWorkflowGraphic(previewSource, chosenDataflow, chosenProfile);
-				if (checkInterrupted()) {
-					return;
-				}
-				ImportWorkflowWizard.this.sourceWorkflow = chosenDataflow;
-			}
-			if (chosenDataflow == null) {
-				if (!background && !shownWarning) {
-					shownWarning = true;
-					SwingUtilities.invokeLater(new Runnable() {
-						public void run() {
-							JOptionPane.showMessageDialog(parentComponent,
-									"You need to choose a workflow for merging",
-									"No workflow chosen", JOptionPane.ERROR_MESSAGE);
-							setVisible(true);
-						}
-					});
-				}
-			}
-		}
-
-		private boolean checkInterrupted() {
-			if (Thread.interrupted() || this.shouldStop) {
-				// ImportWorkflowWizard.this.chosenDataflow = null;
-				return true;
-			}
-			return false;
-		}
-	}
-
-	public static class DataflowSelection {
-		private final WorkflowBundle dataflow;
-		private final String name;
-
-		public DataflowSelection(WorkflowBundle dataflow, String name) {
-			this.dataflow = dataflow;
-			this.name = name;
-		}
-
-		public WorkflowBundle getDataflow() {
-			return dataflow;
-		}
-
-		public String getName() {
-			return name;
-		}
-
-		@Override
-		public String toString() {
-			return name;
-		}
-
-	}
-
-	protected class UpdateChosenListener implements ActionListener {
-		public void actionPerformed(ActionEvent e) {
-			Component parentComponent;
-			if (e.getSource() instanceof Component) {
-				parentComponent = (Component) e.getSource();
-			} else {
-				parentComponent = null;
-			}
-			findChosenDataflow(parentComponent, true);
-
-		}
-	}
-
-	public void setCustomSourceDataflow(WorkflowBundle sourceDataflow, String label) {
-		this.customSourceDataFlow = sourceDataflow;
-		this.customSourceName = label;
-		updateSourceSection();
-		radioCustomSource.doClick();
-	}
-
-//	public void setCustomDestinationDataflow(Workflow destinationDataflow, String label) {
-//		this.customDestinationDataflow = destinationDataflow;
-//		this.customDestinationName = label;
-//		updateDestinationSection();
-//		radioCustomDestination.doClick();
-//	}
-
-//	public void setDestinationEnabled(boolean destinationEnabled) {
-//		this.destinationEnabled = destinationEnabled;
-//		updateDestinationSection();
-//	}
-
-	public void setSourceEnabled(boolean sourceEnabled) {
-		this.sourceEnabled = sourceEnabled;
-		updateSourceSection();
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/AddNestedWorkflowMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/AddNestedWorkflowMenuAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/AddNestedWorkflowMenuAction.java
deleted file mode 100644
index a37e308..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/AddNestedWorkflowMenuAction.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007-2009 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.file.importworkflow.menu;
-
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.net.URI;
-
-import javax.swing.Action;
-import javax.swing.KeyStroke;
-
-import net.sf.taverna.t2.ui.menu.AbstractMenuAction;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.importworkflow.actions.AddNestedWorkflowAction;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import net.sf.taverna.t2.workbench.views.graph.menu.InsertMenu;
-
-/**
- * An action to add a nested workflow activity + a wrapping processor to the
- * workflow.
- *
- * @author Alex Nenadic
- * @author Stian Soiland-Reyes
- *
- */
-public class AddNestedWorkflowMenuAction extends AbstractMenuAction {
-
-	private static final String ADD_NESTED_WORKFLOW = "Nested workflow";
-
-	private static final URI ADD_NESTED_WORKFLOW_URI = URI
-			.create("http://taverna.sf.net/2008/t2workbench/menu#graphMenuAddNestedWorkflow");
-
-	private EditManager editManager;
-	private FileManager fileManager;
-	private MenuManager menuManager;
-	private ColourManager colourManager;
-	private WorkbenchConfiguration workbenchConfiguration;
-	private SelectionManager selectionManager;
-
-	public AddNestedWorkflowMenuAction() {
-		super(InsertMenu.INSERT, 400, ADD_NESTED_WORKFLOW_URI);
-	}
-
-	@Override
-	protected Action createAction() {
-		AddNestedWorkflowAction a = new AddNestedWorkflowAction(editManager, fileManager,
-				menuManager, colourManager, workbenchConfiguration, selectionManager);
-		// Override name to avoid "Add "
-		a.putValue(Action.NAME, ADD_NESTED_WORKFLOW);
-		a.putValue(Action.SHORT_DESCRIPTION, ADD_NESTED_WORKFLOW);
-		a.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(
-				KeyEvent.VK_N, InputEvent.SHIFT_DOWN_MASK
-						| InputEvent.ALT_DOWN_MASK));
-		return a;
-
-	}
-
-	public void setEditManager(EditManager editManager) {
-		this.editManager = editManager;
-	}
-
-	public void setFileManager(FileManager fileManager) {
-		this.fileManager = fileManager;
-	}
-
-	public void setMenuManager(MenuManager menuManager) {
-		this.menuManager = menuManager;
-	}
-
-	public void setColourManager(ColourManager colourManager) {
-		this.colourManager = colourManager;
-	}
-
-	public void setWorkbenchConfiguration(WorkbenchConfiguration workbenchConfiguration) {
-		this.workbenchConfiguration = workbenchConfiguration;
-	}
-
-	public void setSelectionManager(SelectionManager selectionManager) {
-		this.selectionManager = selectionManager;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ImportWorkflowMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ImportWorkflowMenuAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ImportWorkflowMenuAction.java
deleted file mode 100644
index 9ce6e01..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ImportWorkflowMenuAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2007-2009 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.file.importworkflow.menu;
-
-import java.net.URI;
-
-import javax.swing.Action;
-
-import net.sf.taverna.t2.ui.menu.AbstractContextualMenuAction;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.importworkflow.actions.ImportWorkflowAction;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-import org.apache.taverna.scufl2.api.core.Workflow;
-
-/**
- * An action to import nested/merged workflows.
- *
- * @author Alex Nenadic
- * @author Stian Soiland-Reyes
- *
- */
-public class ImportWorkflowMenuAction extends AbstractContextualMenuAction {
-
-	private static final URI insertSection = URI
-			.create("http://taverna.sf.net/2009/contextMenu/insert");
-
-	private EditManager editManager;
-	private FileManager fileManager;
-	private MenuManager menuManager;
-	private ColourManager colourManager;
-	private WorkbenchConfiguration workbenchConfiguration;
-	private SelectionManager selectionManager;
-
-	public ImportWorkflowMenuAction() {
-		super(insertSection, 400);
-	}
-
-	@Override
-	public boolean isEnabled() {
-		return super.isEnabled() && getContextualSelection().getSelection() instanceof Workflow;
-	}
-
-	@Override
-	protected Action createAction() {
-		ImportWorkflowAction myAction = new ImportWorkflowAction(editManager, fileManager,
-				menuManager, colourManager, workbenchConfiguration, selectionManager);
-		// Just "Workflow" as we go under the "Insert" menu
-		myAction.putValue(Action.NAME, "Nested workflow");
-		return myAction;
-	}
-
-	public void setEditManager(EditManager editManager) {
-		this.editManager = editManager;
-	}
-
-	public void setFileManager(FileManager fileManager) {
-		this.fileManager = fileManager;
-	}
-
-	public void setMenuManager(MenuManager menuManager) {
-		this.menuManager = menuManager;
-	}
-
-	public void setColourManager(ColourManager colourManager) {
-		this.colourManager = colourManager;
-	}
-
-	public void setWorkbenchConfiguration(WorkbenchConfiguration workbenchConfiguration) {
-		this.workbenchConfiguration = workbenchConfiguration;
-	}
-
-	public void setSelectionManager(SelectionManager selectionManager) {
-		this.selectionManager = selectionManager;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/MergeWorkflowMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/MergeWorkflowMenuAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/MergeWorkflowMenuAction.java
deleted file mode 100644
index 7ce4891..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/MergeWorkflowMenuAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package net.sf.taverna.t2.workbench.file.importworkflow.menu;
-
-import java.net.URI;
-
-import javax.swing.Action;
-
-import net.sf.taverna.t2.ui.menu.AbstractMenuAction;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.importworkflow.actions.MergeWorkflowAction;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-
-public class MergeWorkflowMenuAction extends AbstractMenuAction {
-
-	public static final URI INSERT_URI = URI
-			.create("http://taverna.sf.net/2008/t2workbench/menu#insert");
-
-	public static final URI IMPORT_URI = URI
-			.create("http://taverna.sf.net/2008/t2workbench/menu#insert");
-
-	private EditManager editManager;
-	private FileManager fileManager;
-	private MenuManager menuManager;
-	private ColourManager colourManager;
-	private WorkbenchConfiguration workbenchConfiguration;
-	private SelectionManager selectionManager;
-
-	public MergeWorkflowMenuAction() {
-		super(INSERT_URI, 2000, IMPORT_URI);
-	}
-
-	@Override
-	protected Action createAction() {
-		return new MergeWorkflowAction(editManager, fileManager, menuManager, colourManager,
-				workbenchConfiguration, selectionManager);
-	}
-
-	public void setEditManager(EditManager editManager) {
-		this.editManager = editManager;
-	}
-
-	public void setFileManager(FileManager fileManager) {
-		this.fileManager = fileManager;
-	}
-
-	public void setMenuManager(MenuManager menuManager) {
-		this.menuManager = menuManager;
-	}
-
-	public void setColourManager(ColourManager colourManager) {
-		this.colourManager = colourManager;
-	}
-
-	public void setWorkbenchConfiguration(WorkbenchConfiguration workbenchConfiguration) {
-		this.workbenchConfiguration = workbenchConfiguration;
-	}
-
-	public void setSelectionManager(SelectionManager selectionManager) {
-		this.selectionManager = selectionManager;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ReplaceNestedWorkflowMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ReplaceNestedWorkflowMenuAction.java b/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ReplaceNestedWorkflowMenuAction.java
deleted file mode 100644
index 3d424df..0000000
--- a/taverna-dataflow-activity-ui/src/main/java/net/sf/taverna/t2/workbench/file/importworkflow/menu/ReplaceNestedWorkflowMenuAction.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package net.sf.taverna.t2.workbench.file.importworkflow.menu;
-
-import java.net.URI;
-
-import javax.swing.Action;
-
-import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
-import net.sf.taverna.t2.ui.menu.MenuManager;
-import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
-import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
-import net.sf.taverna.t2.workbench.configuration.colour.ColourManager;
-import net.sf.taverna.t2.workbench.configuration.workbench.WorkbenchConfiguration;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.file.importworkflow.actions.ReplaceNestedWorkflowAction;
-import net.sf.taverna.t2.workbench.selection.SelectionManager;
-
-public class ReplaceNestedWorkflowMenuAction extends AbstractConfigureActivityMenuAction {
-
-	private static final URI NESTED_ACTIVITY = URI.create("http://ns.taverna.org.uk/2010/activity/nested-workflow");
-
-	private EditManager editManager;
-	private FileManager fileManager;
-	private MenuManager menuManager;
-	private ActivityIconManager activityIconManager;
-	private ColourManager colourManager;
-	private WorkbenchConfiguration workbenchConfiguration;
-	private ServiceDescriptionRegistry serviceDescriptionRegistry;
-	private SelectionManager selectionManager;
-
-	public ReplaceNestedWorkflowMenuAction() {
-		super(NESTED_ACTIVITY);
-	}
-
-	@Override
-	protected Action createAction() {
-		ReplaceNestedWorkflowAction configAction = new ReplaceNestedWorkflowAction(findActivity(),
-				editManager, fileManager, menuManager, activityIconManager, colourManager,
-				serviceDescriptionRegistry, workbenchConfiguration, selectionManager);
-		addMenuDots(configAction);
-		return configAction;
-	}
-
-	public void setEditManager(EditManager editManager) {
-		this.editManager = editManager;
-	}
-
-	public void setFileManager(FileManager fileManager) {
-		this.fileManager = fileManager;
-	}
-
-	public void setMenuManager(MenuManager menuManager) {
-		this.menuManager = menuManager;
-	}
-
-	public void setActivityIconManager(ActivityIconManager activityIconManager) {
-		this.activityIconManager = activityIconManager;
-	}
-
-	public void setColourManager(ColourManager colourManager) {
-		this.colourManager = colourManager;
-	}
-
-	public void setServiceDescriptionRegistry(ServiceDescriptionRegistry serviceDescriptionRegistry) {
-		this.serviceDescriptionRegistry = serviceDescriptionRegistry;
-	}
-
-	public void setWorkbenchConfiguration(WorkbenchConfiguration workbenchConfiguration) {
-		this.workbenchConfiguration = workbenchConfiguration;
-	}
-
-	public void setSelectionManager(SelectionManager selectionManager) {
-		this.selectionManager = selectionManager;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/actions/EditNestedDataflowAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/actions/EditNestedDataflowAction.java b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/actions/EditNestedDataflowAction.java
new file mode 100644
index 0000000..3c71f8e
--- /dev/null
+++ b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/actions/EditNestedDataflowAction.java
@@ -0,0 +1,46 @@
+/**
+ *
+ */
+package org.apache.taverna.activities.dataflow.actions;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import org.apache.taverna.activities.dataflow.servicedescriptions.DataflowTemplateService;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.scufl2.api.activity.Activity;
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.configurations.Configuration;
+import org.apache.taverna.scufl2.api.core.Workflow;
+
+@SuppressWarnings("serial")
+public class EditNestedDataflowAction extends AbstractAction {
+
+	private final Activity activity;
+	private final SelectionManager selectionManager;
+
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	public EditNestedDataflowAction(Activity activity, SelectionManager selectionManager) {
+		super("Edit nested workflow");
+		this.activity = activity;
+		this.selectionManager = selectionManager;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		if (activity.getType().equals(DataflowTemplateService.ACTIVITY_TYPE)) {
+			for (Configuration configuration : scufl2Tools.configurationsFor(activity, selectionManager.getSelectedProfile())) {
+				JsonNode nested = configuration.getJson().get("nestedWorkflow");
+				Workflow nestedWorkflow = selectionManager.getSelectedWorkflowBundle().getWorkflows().getByName(nested.asText());
+				if (nestedWorkflow != null) {
+					selectionManager.setSelectedWorkflow(nestedWorkflow);
+					break;
+				}
+			}
+		}
+	}
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/menu/EditNestedDataflowMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/menu/EditNestedDataflowMenuAction.java b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/menu/EditNestedDataflowMenuAction.java
new file mode 100644
index 0000000..9fb9a0d
--- /dev/null
+++ b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/menu/EditNestedDataflowMenuAction.java
@@ -0,0 +1,28 @@
+package org.apache.taverna.activities.dataflow.menu;
+
+import javax.swing.Action;
+
+import org.apache.taverna.activities.dataflow.actions.EditNestedDataflowAction;
+import org.apache.taverna.activities.dataflow.servicedescriptions.DataflowTemplateService;
+import org.apache.taverna.workbench.activitytools.AbstractConfigureActivityMenuAction;
+import org.apache.taverna.workbench.selection.SelectionManager;
+
+public class EditNestedDataflowMenuAction extends AbstractConfigureActivityMenuAction {
+
+	private SelectionManager selectionManager;
+
+	public EditNestedDataflowMenuAction() {
+		super(DataflowTemplateService.ACTIVITY_TYPE);
+	}
+
+	@Override
+	protected Action createAction() {
+		EditNestedDataflowAction configAction = new EditNestedDataflowAction(findActivity(), selectionManager);
+		return configAction;
+	}
+
+	public void setSelectionManager(SelectionManager selectionManager) {
+		this.selectionManager = selectionManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowActivityIcon.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowActivityIcon.java b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowActivityIcon.java
new file mode 100644
index 0000000..2ce6ab9
--- /dev/null
+++ b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowActivityIcon.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * 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 org.apache.taverna.activities.dataflow.servicedescriptions;
+
+import java.net.URI;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+import org.apache.taverna.workbench.activityicons.ActivityIconSPI;
+
+/**
+ *
+ * @author Alex Nenadic
+ * @author alanrw
+ *
+ */
+public class DataflowActivityIcon implements ActivityIconSPI{
+
+	private static Icon icon;
+
+	public int canProvideIconScore(URI activityType) {
+		if (DataflowTemplateService.ACTIVITY_TYPE.equals(activityType))
+			return DEFAULT_ICON + 1;
+		else
+			return NO_ICON;
+	}
+
+	public Icon getIcon(URI activityType) {
+		return getDataflowIcon();
+	}
+
+	public static Icon getDataflowIcon() {
+		if (icon == null) {
+			icon = new ImageIcon(DataflowActivityIcon.class.getResource("/dataflow.png"));
+		}
+		return icon;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowTemplateService.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowTemplateService.java b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowTemplateService.java
new file mode 100644
index 0000000..bd16c05
--- /dev/null
+++ b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/servicedescriptions/DataflowTemplateService.java
@@ -0,0 +1,60 @@
+package org.apache.taverna.activities.dataflow.servicedescriptions;
+
+import java.net.URI;
+
+import javax.swing.Icon;
+
+import org.apache.taverna.servicedescriptions.AbstractTemplateService;
+import org.apache.taverna.servicedescriptions.ServiceDescription;
+import org.apache.taverna.servicedescriptions.ServiceDescriptionProvider;
+import org.apache.taverna.scufl2.api.configurations.Configuration;
+
+public class DataflowTemplateService extends AbstractTemplateService {
+
+	public static final URI ACTIVITY_TYPE = URI.create("http://ns.taverna.org.uk/2010/activity/nested-workflow");
+
+	private static final String A_CONFIGURABLE_NESTED_WORKFLOW = "A service that allows you to have one workflow nested within another";
+	private static final String DATAFLOW = "Nested workflow";
+
+	private static final URI providerId = URI.create("http://taverna.sf.net/2010/service-provider/dataflow");
+
+	@Override
+	public URI getActivityType() {
+		return ACTIVITY_TYPE;
+	}
+
+	@Override
+	public Configuration getActivityConfiguration() {
+		Configuration configuration = new Configuration();
+		configuration.setType(ACTIVITY_TYPE.resolve("#Config"));
+		return configuration;
+	}
+
+	@Override
+	public Icon getIcon() {
+		return DataflowActivityIcon.getDataflowIcon();
+	}
+
+	public String getName() {
+		return DATAFLOW;
+	}
+
+	public String getDescription() {
+		return A_CONFIGURABLE_NESTED_WORKFLOW;
+	}
+
+	public static ServiceDescription getServiceDescription() {
+		DataflowTemplateService dts = new DataflowTemplateService();
+		return dts.templateService;
+	}
+
+	public String getId() {
+		return providerId.toString();
+	}
+
+    @Override
+    public ServiceDescriptionProvider newInstance() {
+        return new DataflowTemplateService();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a9a52bd5/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/views/DataflowActivityContextualView.java
----------------------------------------------------------------------
diff --git a/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/views/DataflowActivityContextualView.java b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/views/DataflowActivityContextualView.java
new file mode 100644
index 0000000..a0517c5
--- /dev/null
+++ b/taverna-dataflow-activity-ui/src/main/java/org/apache/taverna/activities/dataflow/views/DataflowActivityContextualView.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * 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 org.apache.taverna.activities.dataflow.views;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.Frame;
+
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.apache.taverna.activities.dataflow.actions.EditNestedDataflowAction;
+import org.apache.taverna.servicedescriptions.ServiceDescriptionRegistry;
+import org.apache.taverna.ui.menu.MenuManager;
+import org.apache.taverna.workbench.activityicons.ActivityIconManager;
+import org.apache.taverna.workbench.configuration.colour.ColourManager;
+import org.apache.taverna.workbench.configuration.workbench.WorkbenchConfiguration;
+import org.apache.taverna.workbench.edits.EditManager;
+import org.apache.taverna.workbench.file.FileManager;
+import org.apache.taverna.workbench.file.importworkflow.actions.ReplaceNestedWorkflowAction;
+import org.apache.taverna.workbench.selection.SelectionManager;
+import org.apache.taverna.workbench.ui.actions.activity.HTMLBasedActivityContextualView;
+
+import org.apache.log4j.Logger;
+
+import org.apache.taverna.scufl2.api.activity.Activity;
+
+@SuppressWarnings("serial")
+public class DataflowActivityContextualView extends HTMLBasedActivityContextualView {
+
+	static Logger logger = Logger.getLogger(DataflowActivityContextualView.class);
+
+	private final EditManager editManager;
+	private final FileManager fileManager;
+	private final MenuManager menuManager;
+	private final ActivityIconManager activityIconManager;
+	private final ColourManager colourManager;
+	private final WorkbenchConfiguration workbenchConfiguration;
+	private final ServiceDescriptionRegistry serviceDescriptionRegistry;
+
+	private final SelectionManager selectionManager;
+
+	public DataflowActivityContextualView(Activity activity, EditManager editManager,
+			FileManager fileManager, MenuManager menuManager,
+			ActivityIconManager activityIconManager, ColourManager colourManager,
+			ServiceDescriptionRegistry serviceDescriptionRegistry,
+			WorkbenchConfiguration workbenchConfiguration, SelectionManager selectionManager) {
+		super(activity, colourManager);
+		this.editManager = editManager;
+		this.fileManager = fileManager;
+		this.menuManager = menuManager;
+		this.activityIconManager = activityIconManager;
+		this.colourManager = colourManager;
+		this.serviceDescriptionRegistry = serviceDescriptionRegistry;
+		this.workbenchConfiguration = workbenchConfiguration;
+		this.selectionManager = selectionManager;
+		addEditButtons();
+	}
+
+	@Override
+	public Activity getActivity() {
+		return super.getActivity();
+	}
+
+	public void addEditButtons() {
+		JComponent mainFrame = getMainFrame();
+		JButton viewWorkflowButton = new JButton("Edit workflow");
+		viewWorkflowButton.addActionListener(new EditNestedDataflowAction(getActivity(),
+				selectionManager));
+		JButton configureButton = new JButton(new ReplaceNestedWorkflowAction(getActivity(),
+				editManager, fileManager, menuManager, activityIconManager, colourManager,
+				serviceDescriptionRegistry, workbenchConfiguration, selectionManager));
+		configureButton.setIcon(null);
+		JPanel flowPanel = new JPanel(new FlowLayout());
+		flowPanel.add(viewWorkflowButton);
+		flowPanel.add(configureButton);
+		mainFrame.add(flowPanel, BorderLayout.SOUTH);
+		mainFrame.revalidate();
+	}
+
+//	@Override
+//	public JComponent getMainFrame() {
+//		JComponent mainFrame = super.getMainFrame();
+//		JButton viewWorkflowButton = new JButton("Edit workflow");
+//		viewWorkflowButton.addActionListener(new EditNestedDataflowAction(getActivity(),
+//				selectionManager));
+//		JButton configureButton = new JButton(new ReplaceNestedWorkflowAction(getActivity(),
+//				editManager, fileManager, menuManager, activityIconManager, colourManager,
+//				serviceDescriptionRegistry, workbenchConfiguration, selectionManager));
+//		configureButton.setIcon(null);
+//		JPanel flowPanel = new JPanel(new FlowLayout());
+//		flowPanel.add(viewWorkflowButton);
+//		flowPanel.add(configureButton);
+//		mainFrame.add(flowPanel, BorderLayout.SOUTH);
+//		return mainFrame;
+//	}
+
+	@Override
+	protected String getRawTableRowsHtml() {
+		return ("<tr><td colspan=2>" + getActivity().getName() + "</td></tr>");
+	}
+
+	@Override
+	public String getViewTitle() {
+		return "Nested workflow";
+	}
+
+	@Override
+	public Action getConfigureAction(Frame owner) {
+		return null;
+		// return new OpenNestedDataflowFromFileAction(
+		// (DataflowActivity) getActivity(), owner);
+	}
+
+	@Override
+	public int getPreferredPosition() {
+		return 100;
+	}
+
+}