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/27 17:22:30 UTC

[17/23] incubator-taverna-workbench-common-activities git commit:

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/InvocationPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/InvocationPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/InvocationPanel.java
new file mode 100644
index 0000000..217d2e3
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/InvocationPanel.java
@@ -0,0 +1,394 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Arrays;
+import java.util.Comparator;
+
+import javax.swing.AbstractAction;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivityConfigurationBean;
+import org.apache.taverna.activities.externaltool.ExternalToolActivityHealthChecker;
+import org.apache.taverna.activities.externaltool.configuration.ToolInvocationConfiguration;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroupAddedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroupRemovedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationManagerEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanismAddedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanismRemovedEvent;
+import org.apache.taverna.activities.externaltool.manager.ToolInvocationConfigurationPanel;
+import net.sf.taverna.t2.activities.externaltool.manager.impl.InvocationGroupManagerImpl;
+import org.apache.taverna.lang.observer.Observable;
+import org.apache.taverna.lang.observer.Observer;
+import org.apache.taverna.lang.ui.DeselectingButton;
+import net.sf.taverna.t2.workbench.ui.impl.configuration.ui.T2ConfigurationFrame;
+
+import org.apache.log4j.Logger;
+
+/**
+ * @author alanrw
+ *
+ */
+public class InvocationPanel extends JPanel implements Observer<InvocationManagerEvent> {
+	
+	private static final String LOCATION_DESCRIPTION = ToolInvocationConfigurationPanel.HEADER_TEXT;
+	private final JComboBox mechanismSelection;
+	private final JComboBox groupSelection;
+	
+	private DefaultComboBoxModel mechanismSelectionModel = new DefaultComboBoxModel();
+	private DefaultComboBoxModel groupSelectionModel = new DefaultComboBoxModel();
+
+	private static InvocationGroupManagerImpl manager = InvocationGroupManagerImpl.getInstance();
+	
+	private static Logger logger = Logger
+	.getLogger(InvocationPanel.class);
+	
+	private JRadioButton unmanagedLocation;
+	private JRadioButton groupSelected;
+	private JRadioButton mechanismSelected;
+	private JButton manageInvocation;
+	private ButtonGroup mechanismOrGroup;
+	private ExternalToolActivityConfigurationBean configuration;
+	
+	private ActionListener radioChangeListener;
+	
+	boolean unmanagedShown = false;
+
+	public InvocationPanel(ExternalToolActivityConfigurationBean configuration) {
+		super();
+		manager.addObserver(this);
+		
+		mechanismSelection = new JComboBox();
+		populateMechanismList();
+		mechanismSelection.setModel(mechanismSelectionModel);
+		
+		groupSelection = new JComboBox();
+		populateGroupList();
+		groupSelection.setModel(groupSelectionModel);
+		populateInvocationPanel(configuration);
+		
+		radioChangeListener = new AbstractAction() {
+
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				if (unmanagedShown && unmanagedLocation.isSelected()) {
+					setUnmanagedLocationSelectability(true);
+					setMechanismSelectability(false);
+					setGroupSelectability(false);
+					return;
+				}
+				if (mechanismSelected.isSelected()) {
+					if (unmanagedShown) {
+						setUnmanagedLocationSelectability(false);
+					}
+					setMechanismSelectability(true);
+					setGroupSelectability(false);
+					return;
+				}
+				if (unmanagedShown) {
+					setUnmanagedLocationSelectability(false);
+				}
+				setMechanismSelectability(false);
+				setGroupSelectability(true);
+				return;			}
+			
+		};
+		if (unmanagedShown) {
+			unmanagedLocation.addActionListener(radioChangeListener);
+		}
+		groupSelected.addActionListener(radioChangeListener);
+		mechanismSelected.addActionListener(radioChangeListener);
+	}
+	
+	private void populateMechanismList() {
+		InvocationMechanism currentSelection = (InvocationMechanism) mechanismSelection.getSelectedItem();
+		InvocationMechanism[] mechanisms = InvocationGroupManagerImpl.getInstance()
+				.getMechanisms().toArray(new InvocationMechanism[] {});
+		Arrays.sort(mechanisms, new Comparator<InvocationMechanism>() {
+
+			@Override
+			public int compare(InvocationMechanism arg0, InvocationMechanism arg1) {
+				return arg0.getName().compareTo(
+						arg1.getName());
+			}
+		});
+		mechanismSelectionModel.removeAllElements();
+		for (InvocationMechanism mechanism : mechanisms) {
+			mechanismSelectionModel.addElement(mechanism);
+			logger.info("Added mechanism " + mechanism.hashCode());
+		}
+		if (currentSelection != null) {
+			mechanismSelection.setSelectedItem(currentSelection);
+		}
+		
+	}
+
+	private void populateGroupList() {
+		InvocationGroup currentSelection = (InvocationGroup) groupSelection.getSelectedItem();
+		InvocationGroup[] groups = InvocationGroupManagerImpl.getInstance()
+				.getInvocationGroups().toArray(new InvocationGroup[] {});
+		Arrays.sort(groups, new Comparator<InvocationGroup>() {
+
+			@Override
+			public int compare(InvocationGroup arg0, InvocationGroup arg1) {
+				return arg0.getName().compareTo(
+						arg1.getName());
+			}
+		});
+		groupSelectionModel.removeAllElements();
+		for (InvocationGroup group : groups) {
+			groupSelectionModel.addElement(group);
+			logger.info("Added group " + group.hashCode());
+		}
+		if (currentSelection != null) {
+			groupSelection.setSelectedItem(currentSelection);
+		}
+		
+	}
+
+	
+	private void populateInvocationPanel(ExternalToolActivityConfigurationBean configuration) {
+		this.configuration = configuration;
+		this.removeAll();
+		this.setLayout(new BorderLayout());
+
+		JTextArea descriptionText = new JTextArea(
+				LOCATION_DESCRIPTION);
+		descriptionText.setEditable(false);
+		descriptionText.setFocusable(false);
+		descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+		descriptionText.setLineWrap(true);
+		descriptionText.setWrapStyleWord(true);
+		descriptionText.setRows(3);
+		this.add(descriptionText, BorderLayout.NORTH);
+		
+		JPanel innerPanel = new JPanel(new BorderLayout());
+		
+		mechanismOrGroup = new ButtonGroup();
+
+		JPanel subPanel = new JPanel(new GridLayout(4,1));
+		
+		if (isUnmanaged(configuration)) {
+			createUnmanagedLocation(subPanel);
+			unmanagedShown = true;
+		}
+		
+		subPanel.add(createMechanismPanel());
+		
+		subPanel.add(createGroupPanel());
+		
+		subPanel.add(createButtonPanel());
+		
+		innerPanel.add(subPanel, BorderLayout.NORTH);
+		innerPanel.add(new JPanel(), BorderLayout.CENTER);
+		
+		initializeSelectability();
+		this.add(innerPanel, BorderLayout.CENTER);
+		this.repaint();
+	}
+
+	private boolean isUnmanaged(
+			ExternalToolActivityConfigurationBean configuration2) {
+		return (!ExternalToolActivityHealthChecker.updateLocation(configuration2));
+	}
+
+	private void initializeSelectability() {
+		if (isUnmanaged(configuration)) {
+			unmanagedLocation.setSelected(true);
+			setUnmanagedLocationSelectability(true);
+			setMechanismSelectability(false);
+			setGroupSelectability(false);
+			return;
+		}
+		if (configuration.getInvocationGroup() == null) {
+			mechanismSelected.setSelected(true);
+			if (unmanagedShown) {
+				setUnmanagedLocationSelectability(false);
+			}
+			setMechanismSelectability(true);
+			setGroupSelectability(false);
+			return;
+		}
+		groupSelected.setSelected(true);
+		if (unmanagedShown) {
+			setUnmanagedLocationSelectability(false);
+		}
+		setMechanismSelectability(false);
+		setGroupSelectability(true);
+		return;
+	}
+
+	private void setGroupSelectability(boolean b) {
+		groupSelection.setEnabled(b);
+	}
+
+	private void setMechanismSelectability(boolean b) {
+		mechanismSelection.setEnabled(b);
+	}
+
+	private void setUnmanagedLocationSelectability(boolean b) {
+		// Nothing to do
+	}
+
+	private JPanel createGroupPanel() {
+		JPanel groupPanel = new JPanel(new BorderLayout());
+		
+		JPanel groupSelectionPanel = new JPanel(new GridLayout(1, 2));
+		groupSelected = new JRadioButton("Select a symbolic location");
+		mechanismOrGroup.add(groupSelected);
+		groupSelected.setBorder(new EmptyBorder(10, 10, 10, 10));
+		groupSelectionPanel.add(groupSelected);
+
+		groupSelection.setRenderer(new DefaultListCellRenderer() {
+
+			@Override
+			public Component getListCellRendererComponent(JList arg0,
+					Object arg1, int arg2, boolean arg3, boolean arg4) {
+				if (arg1 instanceof InvocationGroup) {
+					return super.getListCellRendererComponent(arg0,
+							((InvocationGroup) arg1).getName(),
+							arg2, arg3, arg4);
+				}
+				return super.getListCellRendererComponent(arg0, arg1, arg2,
+						arg3, arg4);
+			}
+		});
+
+		groupSelectionPanel.add(groupSelection); 
+
+		groupPanel.add(groupSelectionPanel, BorderLayout.CENTER);
+		
+		if (configuration.getInvocationGroup() != null) {
+			groupSelection.setSelectedItem(configuration.getInvocationGroup());
+		} else {
+			groupSelection.setSelectedItem(manager.getDefaultGroup());
+		}
+
+		return groupPanel;
+	}
+
+	private JPanel createMechanismPanel() {
+		JPanel mechanismPanel = new JPanel(new BorderLayout());
+		JPanel mechanismSelectionPanel = new JPanel(new GridLayout(1, 3));
+		mechanismSelected = new JRadioButton("Select an explicit location");
+		mechanismOrGroup.add(mechanismSelected);
+		mechanismSelected.setBorder(new EmptyBorder(10, 10, 10, 10));
+		mechanismSelectionPanel.add(mechanismSelected);
+
+		mechanismSelection.setRenderer(new DefaultListCellRenderer() {
+
+			@Override
+			public Component getListCellRendererComponent(JList arg0,
+					Object arg1, int arg2, boolean arg3, boolean arg4) {
+				if (arg1 instanceof InvocationMechanism) {
+					return super.getListCellRendererComponent(arg0,
+							((InvocationMechanism) arg1).getName(),
+							arg2, arg3, arg4);
+				}
+				return super.getListCellRendererComponent(arg0, arg1, arg2,
+						arg3, arg4);
+			}
+		});
+
+		mechanismSelectionPanel.add(mechanismSelection);
+
+		mechanismPanel.add(mechanismSelectionPanel, BorderLayout.CENTER);
+		if (configuration.getMechanism() != null) {
+			mechanismSelection.setSelectedItem(configuration.getMechanism());
+		} else {
+			mechanismSelection.setSelectedItem(manager.getDefaultMechanism());
+		}
+		return mechanismPanel;
+
+	}
+	
+	private JPanel createButtonPanel() {
+		JPanel buttonPanel = new JPanel(new FlowLayout());
+		manageInvocation = new DeselectingButton("Manage locations",
+				new AbstractAction() {
+
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				T2ConfigurationFrame.showConfiguration(ToolInvocationConfiguration.getInstance().getDisplayName());
+			}});
+		buttonPanel.add(manageInvocation); 
+		return buttonPanel;		
+	}
+
+	private void createUnmanagedLocation(JPanel subPanel) {
+		unmanagedLocation = new JRadioButton("Continue using unmanaged location");
+		subPanel.add(unmanagedLocation);
+		mechanismOrGroup.add(unmanagedLocation);
+	}
+
+	private void handleInvocationManagerMessage(InvocationManagerEvent message) {
+		if (message instanceof InvocationMechanismRemovedEvent) {
+			InvocationMechanism removedMechanism = ((InvocationMechanismRemovedEvent) message).getRemovedMechanism();
+			InvocationMechanism replacementMechanism = ((InvocationMechanismRemovedEvent) message).getReplacementMechanism();
+			if (mechanismSelection.getSelectedItem().equals(removedMechanism)) {
+				mechanismSelection.setSelectedItem(replacementMechanism);
+			}
+			mechanismSelectionModel.removeElement(removedMechanism);
+		} else if (message instanceof InvocationMechanismAddedEvent) {
+			populateMechanismList();
+		}
+		else if (message instanceof InvocationGroupRemovedEvent) {
+			InvocationGroup removedGroup = ((InvocationGroupRemovedEvent) message).getRemovedGroup();
+			InvocationGroup replacementGroup = ((InvocationGroupRemovedEvent) message).getReplacementGroup();
+			if (groupSelection.getSelectedItem().equals(removedGroup)) {
+				groupSelection.setSelectedItem(replacementGroup);
+			}
+			groupSelectionModel.removeElement(removedGroup);
+		} else if (message instanceof InvocationGroupAddedEvent) {
+			populateGroupList();
+		}	
+	}
+	
+	@Override
+	public void notify(Observable<InvocationManagerEvent> sender,
+			final InvocationManagerEvent message) throws Exception {
+		if (SwingUtilities.isEventDispatchThread()) {
+			handleInvocationManagerMessage(message);
+		} else {
+			SwingUtilities.invokeLater(new Runnable() {
+				public void run() {
+					handleInvocationManagerMessage(message);
+				}
+			});
+		}	}
+
+	public void fillInConfiguration(
+			ExternalToolActivityConfigurationBean newConfiguration) {
+		if (unmanagedShown && unmanagedLocation.isSelected()) {
+			return;
+		}
+		if (mechanismSelected.isSelected()) {
+			newConfiguration.setMechanism((InvocationMechanism) mechanismSelection.getSelectedItem());
+			return;
+		}
+		newConfiguration.setInvocationGroup((InvocationGroup) groupSelection.getSelectedItem());	
+	}
+
+	public void stopObserving() {
+		manager.removeObserver(this);
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
new file mode 100644
index 0000000..ca5efa8
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/LoadDescriptionAction.java
@@ -0,0 +1,89 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+import java.io.StringBufferInputStream;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JOptionPane;
+
+import org.apache.taverna.lang.ui.FileTools;
+
+import org.jdom.Document;
+import org.jdom.JDOMException;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseEnumeration;
+
+final class LoadDescriptionAction extends AbstractAction {
+	/**
+	 * 
+	 */
+	private final ScriptPanel scriptPanel;
+	private final ExternalToolConfigView view;
+
+	LoadDescriptionAction(ScriptPanel scriptPanel, ExternalToolConfigView view) {
+		this.scriptPanel = scriptPanel;
+		this.view = view;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		String descriptionsString = FileTools.readStringFromFile(
+				this.scriptPanel, "Load tool description",
+				".xml");
+		if (descriptionsString != null) {
+			String errorMessage = null;
+			try {
+				Document doc = ScriptPanel.builder
+						.build(new StringReader(descriptionsString));
+				List<UseCaseDescription> descriptions = UseCaseEnumeration.readDescriptionsFromStream(new StringBufferInputStream(descriptionsString));
+				if (descriptions.isEmpty()) {
+					JOptionPane.showMessageDialog(this.scriptPanel, "No tool descriptions found", "File content", JOptionPane.ERROR_MESSAGE);
+					return;
+				}
+				
+				if (descriptions.size() == 1) {
+					view.getConfiguration().setUseCaseDescription(descriptions.get(0));
+					view.refreshConfiguration(view.getConfiguration());
+					return;
+				}
+				
+				List<String> descriptionNames = new ArrayList();
+				for (UseCaseDescription ud : descriptions) {
+					descriptionNames.add(ud.getUsecaseid());
+				}
+				Collections.sort(descriptionNames);
+				String chosenName = (String) JOptionPane.showInputDialog(this.scriptPanel, "Please select a tool description",
+						"Select tool description", JOptionPane.PLAIN_MESSAGE, null, descriptionNames.toArray(), descriptionNames.get(0));
+				if (chosenName != null) {
+					for (UseCaseDescription ud : descriptions) {
+						if (ud.getUsecaseid().equals(chosenName)) {
+							view.getConfiguration().setUseCaseDescription(ud);
+							view.refreshConfiguration(view.getConfiguration());
+							return;
+							
+						}
+					}
+				}
+			} catch (JDOMException e1) {
+				errorMessage = e1.getMessage();
+			} catch (IOException e1) {
+				errorMessage = e1.getMessage();
+			} catch (Exception e1) {
+				errorMessage = e1.getMessage();
+			}
+			if (errorMessage != null) {
+				JOptionPane.showMessageDialog(null, errorMessage,
+						"Tool description load error",
+						JOptionPane.ERROR_MESSAGE);
+			}
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
new file mode 100644
index 0000000..977b228
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/SaveDescriptionAction.java
@@ -0,0 +1,124 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.prefs.Preferences;
+
+import javax.swing.AbstractAction;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import org.apache.taverna.lang.ui.ExtensionFileFilter;
+import org.apache.taverna.lang.ui.FileTools;
+
+import org.apache.log4j.Logger;
+import org.jdom.Element;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseEnumeration;
+
+final class SaveDescriptionAction extends AbstractAction {
+	/**
+	 * 
+	 */
+	private final ScriptPanel scriptPanel;
+	private final ExternalToolConfigView view;
+	
+	private static Logger logger = Logger.getLogger(SaveDescriptionAction.class);
+
+	private static XMLOutputter outputter = new XMLOutputter(Format
+			.getPrettyFormat());
+
+	SaveDescriptionAction(ScriptPanel scriptPanel, ExternalToolConfigView view) {
+		this.scriptPanel = scriptPanel;
+		this.view = view;
+	}
+
+	public void actionPerformed(ActionEvent e) {
+		UseCaseDescription currentDescription = view.makeConfiguration().getUseCaseDescription();
+		String usecaseid = currentDescription.getUsecaseid();
+		String description = currentDescription.getDescription();
+		String group = currentDescription.getGroup();
+		if ((usecaseid == null) || usecaseid.isEmpty() || (description == null) || description.isEmpty() || (group == null) || group.isEmpty()) {
+			JOptionPane.showMessageDialog(view, "Please fill in the tool annotation and\nthen re-export the description", "Missing annotation", JOptionPane.PLAIN_MESSAGE, null);
+			view.showAnnotationPanel();
+		} else {
+		saveStringToFile(this.scriptPanel,
+				"Save tool description", ".xml", currentDescription);
+		}
+	}
+	
+	public static boolean saveStringToFile(Component parent, String dialogTitle, String extension, UseCaseDescription description) {
+		JFileChooser fileChooser = new JFileChooser();
+		fileChooser.setDialogTitle(dialogTitle);
+
+		fileChooser.resetChoosableFileFilters();
+		fileChooser.setAcceptAllFileFilterUsed(true);
+		
+		fileChooser.setFileFilter(new ExtensionFileFilter(new String[] { extension }));
+
+		Preferences prefs = Preferences.userNodeForPackage(FileTools.class);
+		String curDir = prefs
+				.get("currentDir", System.getProperty("user.home"));
+		fileChooser.setCurrentDirectory(new File(curDir));
+
+		boolean tryAgain = true;
+		while (tryAgain) {
+			tryAgain = false;
+			int returnVal = fileChooser.showSaveDialog(parent);
+			if (returnVal == JFileChooser.APPROVE_OPTION) {
+				prefs.put("currentDir", fileChooser.getCurrentDirectory()
+						.toString());
+				File file = fileChooser.getSelectedFile();
+				if (!file.getName().contains(".")) {
+					String newName = file.getName() + extension;
+					file = new File(file.getParentFile(), newName);
+				}
+
+				// TODO: Open in separate thread to avoid hanging UI
+				try {
+					List<UseCaseDescription> currentDescriptions;
+					if (file.exists()) {
+						currentDescriptions = UseCaseEnumeration.readDescriptionsFromStream(new FileInputStream(file));
+					} else {
+						currentDescriptions = new ArrayList<UseCaseDescription>();
+					}
+					Element overallElement = new Element("usecases");
+					for (UseCaseDescription ud : currentDescriptions) {
+						if (!ud.getUsecaseid().equals(description.getUsecaseid())) {
+							overallElement.addContent(ud.writeToXMLElement());
+						}
+					}
+
+					overallElement.addContent(description.writeToXMLElement());
+					BufferedWriter out = new BufferedWriter(new FileWriter(file));
+			        out.write(outputter.outputString(overallElement));
+			        out.close();
+					logger.info("Saved content by overwriting " + file);
+					return true;
+				} catch (IOException ex) {
+					logger.warn("Could not save content to " + file, ex);
+					JOptionPane.showMessageDialog(parent,
+							"Could not save to " + file + ": \n\n"
+									+ ex.getMessage(), "Warning",
+							JOptionPane.WARNING_MESSAGE);
+					return false;
+				}
+			}
+		}
+		return false;
+	}
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
new file mode 100644
index 0000000..c36ac8c
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ScriptPanel.java
@@ -0,0 +1,148 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.FlowLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.io.IOException;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.JTextField;
+import javax.swing.border.EmptyBorder;
+import javax.swing.text.JTextComponent;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivityConfigurationBean;
+import org.apache.taverna.lang.ui.DeselectingButton;
+import org.apache.taverna.lang.ui.LineEnabledTextPanel;
+
+import org.jdom.input.SAXBuilder;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseEnumeration;
+
+
+/**
+ * @author alanrw
+ *
+ */
+public class ScriptPanel extends JPanel {
+	
+	private static final String SCRIPT_DESCRIPTION = "Specify the commands that you want to run. You can use data arriving at an input port to replace parts of the command or to write to a file. You can also take data written to a file and send it to an output port.";
+	static SAXBuilder builder = new SAXBuilder();
+	private final JTextComponent scriptTextArea;
+	
+	public ScriptPanel(final ExternalToolConfigView view, JTextComponent scriptTextArea, JCheckBox stdInCheckBox, JCheckBox stdOutCheckBox, JCheckBox stdErrCheckBox, JTextField returnCodesField) {
+		super();
+		this.setLayout(new BorderLayout());
+	
+		JTextArea descriptionText = new JTextArea(
+				SCRIPT_DESCRIPTION);
+		descriptionText.setEditable(false);
+		descriptionText.setFocusable(false);
+		descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+		descriptionText.setLineWrap(true);
+		descriptionText.setWrapStyleWord(true);
+		this.add(descriptionText, BorderLayout.NORTH);
+
+		this.scriptTextArea = scriptTextArea;
+		
+		this.add(new LineEnabledTextPanel(scriptTextArea),
+				BorderLayout.CENTER);
+		
+
+		UseCaseDescription useCaseDescription = view.getConfiguration().getUseCaseDescription();
+		stdInCheckBox.setSelected(useCaseDescription.isIncludeStdIn());
+		stdOutCheckBox.setSelected(useCaseDescription.isIncludeStdOut());
+		stdErrCheckBox.setSelected(useCaseDescription.isIncludeStdErr());
+		returnCodesField.setText(useCaseDescription.getReturnCodesAsText());
+		
+		JPanel codesPanel = new JPanel(new FlowLayout());
+		codesPanel.add(new JLabel("Valid return codes:"));
+		codesPanel.add(returnCodesField);
+
+		JPanel streamPanel = new JPanel(new FlowLayout());
+		streamPanel.add(stdInCheckBox);
+		streamPanel.add(stdOutCheckBox);
+		streamPanel.add(stdErrCheckBox);
+
+		JPanel buttonPanel = new JPanel(new FlowLayout());
+		if (view.isOriginallyFromRepository()) {
+			JButton revertButton = new DeselectingButton("Revert to original description",
+					new AbstractAction(){
+
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					ExternalToolActivityConfigurationBean bean = view.makeConfiguration();
+					String repositoryUrl = bean.getRepositoryUrl();
+					String id = bean.getExternaltoolid();
+					UseCaseDescription usecase = null;
+					try {
+						usecase = UseCaseEnumeration.readDescriptionFromUrl(
+							repositoryUrl, id);
+					}
+					catch (IOException ex) {
+						// Already logged
+					}
+					if (usecase != null) {
+						bean.setUseCaseDescription(usecase);
+						view.setEditable(false, bean);
+					} else {
+						JOptionPane.showMessageDialog(view, "Unable to find tool description " + id, "Missing tool description", JOptionPane.ERROR_MESSAGE);
+					}
+				}});
+			revertButton.setToolTipText("Revert to the tool description from the repository");
+			buttonPanel.add(revertButton);
+		}
+		JButton loadScriptButton = new DeselectingButton("Load description",
+				new LoadDescriptionAction(this, view));
+		loadScriptButton.setToolTipText("Load tool description from a file");
+
+		JButton saveScriptButton = new DeselectingButton("Export description",
+				new SaveDescriptionAction(this, view));
+		saveScriptButton.setToolTipText("Export the tool description to a file");
+
+		JButton clearScriptButton = new DeselectingButton("Clear script",
+				new AbstractAction() {
+
+			public void actionPerformed(ActionEvent e) {
+				clearScript();
+			}
+
+		});
+		clearScriptButton.setToolTipText("Clear the script from the edit area");
+
+		buttonPanel.add(loadScriptButton);
+		buttonPanel.add(saveScriptButton);
+		buttonPanel.add(clearScriptButton);
+
+		JPanel subPanel = new JPanel(new GridLayout(3,1));
+		subPanel.add(codesPanel);
+		subPanel.add(streamPanel);
+		subPanel.add(buttonPanel);
+
+		this.add(subPanel, BorderLayout.SOUTH);
+	}
+
+	/**
+	 * Method for clearing the script
+	 * 
+	 */
+	private void clearScript() {
+		if (JOptionPane.showConfirmDialog(this,
+				"Do you really want to clear the tool description?",
+				"Clearing the tool description", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
+			scriptTextArea.setText("");
+		}
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticStringPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticStringPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticStringPanel.java
new file mode 100644
index 0000000..3a1dc64
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticStringPanel.java
@@ -0,0 +1,104 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.taverna.activities.externaltool.utils.Tools;
+import org.apache.taverna.lang.ui.DeselectingButton;
+import org.apache.taverna.lang.ui.ReadOnlyTextArea;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StaticStringPanel extends JPanel {
+	
+	private static final String STATIC_STRING_DESCRIPTION = "A fixed string can be written to the specified file.";
+	private final List<ExternalToolStaticStringViewer> staticStringViewList;
+	
+	int staticGridy = 1;
+	
+	private static String[] elementLabels = new String[] {"String to copy", "To file"};
+	
+	public StaticStringPanel(final List<ExternalToolStaticStringViewer> staticStringViewList) {
+		super(new BorderLayout());
+		this.staticStringViewList = staticStringViewList;
+		final JPanel staticEditPanel = new JPanel(new GridBagLayout());
+
+		final GridBagConstraints staticConstraint = new GridBagConstraints();
+		staticConstraint.insets = new Insets(5, 5, 5, 5);
+		staticConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+		staticConstraint.gridx = 0;
+		staticConstraint.gridy = 0;
+		staticConstraint.weightx = 0.1;
+		staticConstraint.fill = GridBagConstraints.BOTH;
+
+		staticConstraint.gridx = 0;
+		synchronized (staticStringViewList) {
+			for (ExternalToolStaticStringViewer staticView : staticStringViewList) {
+				addStaticStringViewer(StaticStringPanel.this, staticEditPanel,
+						staticView);
+			}
+		}
+
+		JTextArea descriptionText = new ReadOnlyTextArea(
+				STATIC_STRING_DESCRIPTION);
+		descriptionText.setEditable(false);
+		descriptionText.setFocusable(false);
+		descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+		this.add(descriptionText, BorderLayout.NORTH);
+
+		this.add(new JScrollPane(staticEditPanel),
+				BorderLayout.CENTER);
+		JButton addStaticStringButton = new DeselectingButton("Add string",
+				new AbstractAction() {
+			// FIXME refactor this into a method
+			public void actionPerformed(ActionEvent e) {
+
+				ExternalToolStaticStringViewer newViewer = new ExternalToolStaticStringViewer();
+				synchronized (staticStringViewList) {
+					staticStringViewList.add(newViewer);
+					addStaticStringViewer(StaticStringPanel.this, staticEditPanel,
+							newViewer);
+					staticEditPanel.revalidate();
+					staticEditPanel.repaint();
+				}
+			}
+
+		});
+
+		JPanel buttonPanel = new JPanel(new BorderLayout());
+
+		buttonPanel.add(addStaticStringButton, BorderLayout.EAST);
+
+		this.add(buttonPanel, BorderLayout.SOUTH);
+	
+	}
+	
+	private void addStaticStringViewer(final JPanel outerPanel,
+			final JPanel panel, ExternalToolStaticStringViewer viewer) {
+		Tools.addViewer(panel,
+				elementLabels,
+				new JComponent[] {new JScrollPane(viewer.getContentField()), viewer.getValueField()},
+				staticStringViewList,
+				viewer,
+				outerPanel);
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticUrlPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticUrlPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticUrlPanel.java
new file mode 100644
index 0000000..4f1dbd6
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StaticUrlPanel.java
@@ -0,0 +1,106 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.taverna.activities.externaltool.utils.Tools;
+import org.apache.taverna.lang.ui.DeselectingButton;
+import org.apache.taverna.lang.ui.ReadOnlyTextArea;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StaticUrlPanel extends JPanel {
+	
+	private static final String STATIC_URL_DESCRIPTION = "The data at a URL can be downloaded and stored in the specified file.";
+	private final List<ExternalToolStaticUrlViewer> staticUrlViewList;
+	private int staticGridy = 1;
+
+	private static String[] elementLabels = new String[] {"Copy from URL", "To file"};
+	
+
+	public StaticUrlPanel(final List<ExternalToolStaticUrlViewer> staticUrlViewList) {
+	
+	super(new BorderLayout());
+	this.staticUrlViewList = staticUrlViewList;
+	final JPanel staticEditPanel = new JPanel(new GridBagLayout());
+
+	final GridBagConstraints staticConstraint = new GridBagConstraints();
+	staticConstraint.insets = new Insets(5, 5, 5, 5);
+	staticConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+	staticConstraint.gridx = 0;
+	staticConstraint.gridy = 0;
+	staticConstraint.weightx = 0.1;
+	staticConstraint.fill = GridBagConstraints.BOTH;
+
+	staticConstraint.gridx = 0;
+	synchronized (staticUrlViewList) {
+		for (ExternalToolStaticUrlViewer staticView : staticUrlViewList) {
+			addStaticUrlViewer(this, staticEditPanel,
+					staticView);
+		}
+	}
+
+	this.add(new JScrollPane(staticEditPanel),
+			BorderLayout.CENTER);
+
+	JTextArea descriptionText = new ReadOnlyTextArea(
+			STATIC_URL_DESCRIPTION);
+	descriptionText.setEditable(false);
+	descriptionText.setFocusable(false);
+	descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+
+	this.add(descriptionText, BorderLayout.NORTH);
+
+	JButton addstaticPortButton = new DeselectingButton("Add URL",
+			new AbstractAction() {
+		// FIXME refactor this into a method
+		public void actionPerformed(ActionEvent e) {
+
+			ExternalToolStaticUrlViewer newViewer = new ExternalToolStaticUrlViewer();
+			synchronized (staticUrlViewList) {
+				staticUrlViewList.add(newViewer);
+				addStaticUrlViewer(StaticUrlPanel.this, staticEditPanel,
+						newViewer);
+				staticEditPanel.revalidate();
+				staticEditPanel.repaint();
+			}
+		}
+
+	});
+	JPanel buttonPanel = new JPanel(new BorderLayout());
+
+	buttonPanel.add(addstaticPortButton, BorderLayout.EAST);
+
+	this.add(buttonPanel, BorderLayout.SOUTH);
+
+	}
+	
+	private void addStaticUrlViewer(final JPanel outerPanel,
+			final JPanel panel, ExternalToolStaticUrlViewer viewer) {
+		Tools.addViewer(panel,
+				elementLabels,
+				new JComponent[] {viewer.getContentField(), viewer.getValueField()},
+				staticUrlViewList,
+				viewer,
+				outerPanel);
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StringReplacementPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StringReplacementPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StringReplacementPanel.java
new file mode 100644
index 0000000..45b1d7f
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/StringReplacementPanel.java
@@ -0,0 +1,130 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.border.CompoundBorder;
+import javax.swing.border.EmptyBorder;
+
+import org.apache.taverna.activities.externaltool.utils.Tools;
+import org.apache.taverna.lang.ui.DeselectingButton;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StringReplacementPanel extends JPanel {
+	
+	private static final String STRING_REPLACEMENT_DESCRIPTION = "You can use a string replacement to " +
+	"feed data into the service via an input port and have that data replace part of the " +
+	"command.";
+	private final List<ExternalToolStringReplacementViewer> stringReplacementViewList;
+	private int stringReplacementGridy = 1;
+	private final ExternalToolConfigView view;
+	
+	private static Insets insets = new Insets(1,5,1,5);
+	
+	private static String[] elementLabels = new String[] {"Taverna port name", "Replace port name", "String to replace"};
+	
+	private static CompoundBorder border = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createLineBorder(Color.BLACK, 1));
+
+	
+	public StringReplacementPanel(final ExternalToolConfigView view, final List<ExternalToolStringReplacementViewer> stringReplacementViewList) {
+		super(new BorderLayout());
+		this.view = view;
+		this.stringReplacementViewList = stringReplacementViewList;
+
+		final JPanel inputEditPanel = new JPanel(new GridBagLayout());
+
+		final GridBagConstraints inputConstraint = new GridBagConstraints();
+
+		inputConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+		inputConstraint.gridx = 0;
+		inputConstraint.gridy = 0;
+		inputConstraint.weightx = 0.1;
+		inputConstraint.fill = GridBagConstraints.BOTH;
+
+		inputConstraint.gridx = 0;
+		synchronized (stringReplacementViewList) {
+			for (ExternalToolStringReplacementViewer inputView : stringReplacementViewList) {
+				addStringReplacementViewer(this, inputEditPanel,
+						inputView, elementLabels);
+
+			}
+		}
+
+		JTextArea descriptionText = new JTextArea(
+				STRING_REPLACEMENT_DESCRIPTION);
+		descriptionText.setEditable(false);
+		descriptionText.setFocusable(false);
+		descriptionText.setBorder(new EmptyBorder(5, 5, 10, 5));
+		descriptionText.setLineWrap(true);
+		descriptionText.setWrapStyleWord(true);
+
+		this.add(descriptionText, BorderLayout.NORTH);
+		this.add(new JScrollPane(inputEditPanel),
+				BorderLayout.CENTER);
+		JButton addInputPortButton = new DeselectingButton("Add string replacement",
+				new AbstractAction() {
+
+			public void actionPerformed(ActionEvent e) {
+
+				int portNumber = 1;
+				String name2 = "in" + portNumber++;
+				boolean nameExists = true;
+				while (nameExists == true) {
+					nameExists = view.portNameExists(name2);
+					if (nameExists) {
+						name2 = "in" + portNumber++;
+					}
+				}
+
+				ExternalToolStringReplacementViewer newViewer = new ExternalToolStringReplacementViewer(
+						name2);
+				synchronized (stringReplacementViewList) {
+					stringReplacementViewList.add(newViewer);
+					addStringReplacementViewer(StringReplacementPanel.this, inputEditPanel,
+							newViewer, elementLabels);
+					inputEditPanel.revalidate();
+					inputEditPanel.repaint();
+				}
+
+			}
+
+		});
+
+		JPanel buttonPanel = new JPanel();
+		buttonPanel.setLayout(new BorderLayout());
+
+		buttonPanel.add(addInputPortButton, BorderLayout.EAST);
+
+		this.add(buttonPanel, BorderLayout.SOUTH);
+	}
+	
+	private void addStringReplacementViewer(final JPanel outerPanel,
+			final JPanel innerPanel, final ExternalToolStringReplacementViewer viewer, String[] elementLabels) {
+		Tools.addViewer(innerPanel,
+				elementLabels,
+				new JComponent[] {viewer.getNameField(), viewer.getValueFromField(), viewer.getValueField()},
+				stringReplacementViewList,
+				viewer,
+				outerPanel);
+	}
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
new file mode 100644
index 0000000..f3e8b9b
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/java/org/apache/taverna/activities/externaltool/views/ToolXMLPanel.java
@@ -0,0 +1,33 @@
+/**
+ * 
+ */
+package org.apache.taverna.activities.externaltool.views;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.apache.taverna.renderers.impl.XMLTree;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+
+/**
+ * @author alanrw
+ *
+ */
+public class ToolXMLPanel extends JPanel {
+
+	public ToolXMLPanel(UseCaseDescription useCaseDescription) {
+		super(new BorderLayout());
+		XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+		this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);
+	}
+
+	public void regenerateTree(UseCaseDescription useCaseDescription) {
+		this.removeAll();
+		XMLTree xmlTree = new XMLTree(useCaseDescription.writeToXMLElement());
+		this.add(new JScrollPane(xmlTree), BorderLayout.CENTER);		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
deleted file mode 100644
index 9307977..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor
+++ /dev/null
@@ -1,2 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.manager.local.LocalInvocationMechanismEditor
-net.sf.taverna.t2.activities.externaltool.manager.ssh.SshInvocationMechanismEditor

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
deleted file mode 100644
index e94cf6e..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider
+++ /dev/null
@@ -1,2 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolServiceProvider
-net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
deleted file mode 100644
index db316f2..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.ui.menu.MenuComponent
+++ /dev/null
@@ -1,4 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.menu.ConfigureExternalToolMenuAction
-# net.sf.taverna.t2.activities.externaltool.menu.FeedbackMenuAction
-net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolContextualMenuAction
-net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolMenuAction

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
deleted file mode 100644
index e6686a0..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ShutdownSPI
+++ /dev/null
@@ -1 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerShutdownHook
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
deleted file mode 100644
index 0dd97e4..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.StartupSPI
+++ /dev/null
@@ -1 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerStartupHook

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
deleted file mode 100644
index cdafd5d..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI
+++ /dev/null
@@ -1 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolActivityIcon

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
deleted file mode 100644
index b3d1525..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.configuration.ConfigurationUIFactory
+++ /dev/null
@@ -1 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.manager.ToolInvocationConfigurationUIFactory
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
deleted file mode 100644
index ca0d30f..0000000
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory
+++ /dev/null
@@ -1 +0,0 @@
-net.sf.taverna.t2.activities.externaltool.views.ExternalToolActivityViewFactory

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor
new file mode 100644
index 0000000..c7e77f2
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor
@@ -0,0 +1,2 @@
+org.apache.taverna.activities.externaltool.manager.local.LocalInvocationMechanismEditor
+org.apache.taverna.activities.externaltool.manager.ssh.SshInvocationMechanismEditor

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.servicedescriptions.ServiceDescriptionProvider
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.servicedescriptions.ServiceDescriptionProvider b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.servicedescriptions.ServiceDescriptionProvider
new file mode 100644
index 0000000..85b2281
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.servicedescriptions.ServiceDescriptionProvider
@@ -0,0 +1,2 @@
+org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolServiceProvider
+org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent
new file mode 100644
index 0000000..3ecf793
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.ui.menu.MenuComponent
@@ -0,0 +1,4 @@
+org.apache.taverna.activities.externaltool.menu.ConfigureExternalToolMenuAction
+# org.apache.taverna.activities.externaltool.menu.FeedbackMenuAction
+org.apache.taverna.activities.externaltool.menu.AddExternalToolContextualMenuAction
+org.apache.taverna.activities.externaltool.menu.AddExternalToolMenuAction

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ShutdownSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ShutdownSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ShutdownSPI
new file mode 100644
index 0000000..196d2af
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ShutdownSPI
@@ -0,0 +1 @@
+org.apache.taverna.activities.externaltool.manager.InvocationGroupManagerShutdownHook
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.StartupSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.StartupSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.StartupSPI
new file mode 100644
index 0000000..25ab1dd
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.StartupSPI
@@ -0,0 +1 @@
+org.apache.taverna.activities.externaltool.manager.InvocationGroupManagerStartupHook

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.activityicons.ActivityIconSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.activityicons.ActivityIconSPI b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.activityicons.ActivityIconSPI
new file mode 100644
index 0000000..95db995
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.activityicons.ActivityIconSPI
@@ -0,0 +1 @@
+org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolActivityIcon

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.configuration.ConfigurationUIFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.configuration.ConfigurationUIFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.configuration.ConfigurationUIFactory
new file mode 100644
index 0000000..b5cec7c
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.configuration.ConfigurationUIFactory
@@ -0,0 +1 @@
+org.apache.taverna.activities.externaltool.manager.ToolInvocationConfigurationUIFactory
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ui.views.contextualviews.activity.ContextualViewFactory
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ui.views.contextualviews.activity.ContextualViewFactory b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ui.views.contextualviews.activity.ContextualViewFactory
new file mode 100644
index 0000000..30770cc
--- /dev/null
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/services/org.apache.taverna.workbench.ui.views.contextualviews.activity.ContextualViewFactory
@@ -0,0 +1 @@
+org.apache.taverna.activities.externaltool.views.ExternalToolActivityViewFactory

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
index 3d7110c..996fbc9 100644
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context-osgi.xml
@@ -8,32 +8,32 @@
 
 	<service ref="ToolInvocationConfigurationUIFactory" interface="uk.org.taverna.configuration.ConfigurationUIFactory" />
 
-	<service ref="InvocationGroupManagerStartupHook" interface="net.sf.taverna.t2.workbench.StartupSPI" />
+	<service ref="InvocationGroupManagerStartupHook" interface="org.apache.taverna.workbench.StartupSPI" />
 
-	<service ref="ExternalToolActivityIcon" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI" />
+	<service ref="ExternalToolActivityIcon" interface="org.apache.taverna.workbench.activityicons.ActivityIconSPI" />
 
-	<service ref="LocalInvocationMechanismEditor" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" />
-	<service ref="SshInvocationMechanismEditor" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" />
+	<service ref="LocalInvocationMechanismEditor" interface="org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor" />
+	<service ref="SshInvocationMechanismEditor" interface="org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor" />
 
-	<service ref="ExternalToolServiceProvider" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider" />
-	<service ref="ExternalToolTemplateServiceDescription" interface="net.sf.taverna.t2.servicedescriptions.ServiceDescriptionProvider" />
+	<service ref="ExternalToolServiceProvider" interface="org.apache.taverna.servicedescriptions.ServiceDescriptionProvider" />
+	<service ref="ExternalToolTemplateServiceDescription" interface="org.apache.taverna.servicedescriptions.ServiceDescriptionProvider" />
 
 	<service ref="ConfigureExternalToolMenuAction" auto-export="interfaces" />
 	<service ref="AddExternalToolContextualMenuAction" auto-export="interfaces" />
 	<service ref="AddExternalToolMenuAction" auto-export="interfaces" />
 
-	<service ref="InvocationGroupManagerShutdownHook" interface="net.sf.taverna.t2.workbench.ShutdownSPI" />
+	<service ref="InvocationGroupManagerShutdownHook" interface="org.apache.taverna.workbench.ShutdownSPI" />
 
-	<service ref="ExternalToolActivityViewFactory" interface="net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
+	<service ref="ExternalToolActivityViewFactory" interface="org.apache.taverna.workbench.ui.views.contextualviews.activity.ContextualViewFactory" />
 
-	<list id="mechanismCreators" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" cardinality="0..N" />
-	<list id="invocationMechanismEditors" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanismEditor" cardinality="0..N" />
+	<list id="mechanismCreators" interface="org.apache.taverna.activities.externaltool.manager.MechanismCreator" cardinality="0..N" />
+	<list id="invocationMechanismEditors" interface="org.apache.taverna.activities.externaltool.manager.InvocationMechanismEditor" cardinality="0..N" />
 
-	<reference id="editManager" interface="net.sf.taverna.t2.workbench.edits.EditManager" />
-	<reference id="fileManager" interface="net.sf.taverna.t2.workbench.file.FileManager" />
-	<reference id="menuManager" interface="net.sf.taverna.t2.ui.menu.MenuManager" />
-	<reference id="selectionManager" interface="net.sf.taverna.t2.workbench.selection.SelectionManager" />
-	<reference id="activityIconManager" interface="net.sf.taverna.t2.workbench.activityicons.ActivityIconManager" />
-	<reference id="colourManager" interface="net.sf.taverna.t2.workbench.configuration.colour.ColourManager" />
+	<reference id="editManager" interface="org.apache.taverna.workbench.edits.EditManager" />
+	<reference id="fileManager" interface="org.apache.taverna.workbench.file.FileManager" />
+	<reference id="menuManager" interface="org.apache.taverna.ui.menu.MenuManager" />
+	<reference id="selectionManager" interface="org.apache.taverna.workbench.selection.SelectionManager" />
+	<reference id="activityIconManager" interface="org.apache.taverna.workbench.activityicons.ActivityIconManager" />
+	<reference id="colourManager" interface="org.apache.taverna.workbench.configuration.colour.ColourManager" />
 
 </beans:beans>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
index 7cf7f63..54f9cd7 100644
--- a/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
+++ b/taverna-external-tool-activity-ui/src/main/resources/META-INF/spring/external-tool-activity-ui-context.xml
@@ -3,44 +3,44 @@
 	xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd">
 
-	<bean id="ToolInvocationConfigurationUIFactory" class="net.sf.taverna.t2.activities.externaltool.manager.ToolInvocationConfigurationUIFactory">
+	<bean id="ToolInvocationConfigurationUIFactory" class="org.apache.taverna.activities.externaltool.manager.ToolInvocationConfigurationUIFactory">
 		<property name="mechanismCreators" ref="mechanismCreators" />
 		<property name="invocationMechanismEditors" ref="invocationMechanismEditors" />
 	</bean>
 
-	<bean id="InvocationGroupManagerStartupHook" class="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerStartupHook" />
+	<bean id="InvocationGroupManagerStartupHook" class="org.apache.taverna.activities.externaltool.manager.InvocationGroupManagerStartupHook" />
 
-	<bean id="ExternalToolActivityIcon" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolActivityIcon">
+	<bean id="ExternalToolActivityIcon" class="org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolActivityIcon">
 			<property name="colourManager" ref="colourManager" />
 	</bean>
 
-	<bean id="LocalInvocationMechanismEditor" class="net.sf.taverna.t2.activities.externaltool.manager.local.LocalInvocationMechanismEditor" />
-	<bean id="SshInvocationMechanismEditor" class="net.sf.taverna.t2.activities.externaltool.manager.ssh.SshInvocationMechanismEditor" />
+	<bean id="LocalInvocationMechanismEditor" class="org.apache.taverna.activities.externaltool.manager.local.LocalInvocationMechanismEditor" />
+	<bean id="SshInvocationMechanismEditor" class="org.apache.taverna.activities.externaltool.manager.ssh.SshInvocationMechanismEditor" />
 
-	<bean id="ExternalToolServiceProvider" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolServiceProvider" />
-	<bean id="ExternalToolTemplateServiceDescription" class="net.sf.taverna.t2.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription" />
+	<bean id="ExternalToolServiceProvider" class="org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolServiceProvider" />
+	<bean id="ExternalToolTemplateServiceDescription" class="org.apache.taverna.activities.externaltool.servicedescriptions.ExternalToolTemplateServiceDescription" />
 
-	<bean id="ConfigureExternalToolMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.ConfigureExternalToolMenuAction">
+	<bean id="ConfigureExternalToolMenuAction" class="org.apache.taverna.activities.externaltool.menu.ConfigureExternalToolMenuAction">
 			<property name="editManager" ref="editManager" />
 			<property name="fileManager" ref="fileManager" />
 			<property name="activityIconManager" ref="activityIconManager" />
 	</bean>
-	<bean id="AddExternalToolContextualMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolContextualMenuAction">
+	<bean id="AddExternalToolContextualMenuAction" class="org.apache.taverna.activities.externaltool.menu.AddExternalToolContextualMenuAction">
 			<property name="editManager" ref="editManager" />
 			<property name="menuManager" ref="menuManager" />
 			<property name="selectionManager" ref="selectionManager" />
 			<property name="activityIconManager" ref="activityIconManager" />
 	</bean>
-	<bean id="AddExternalToolMenuAction" class="net.sf.taverna.t2.activities.externaltool.menu.AddExternalToolMenuAction">
+	<bean id="AddExternalToolMenuAction" class="org.apache.taverna.activities.externaltool.menu.AddExternalToolMenuAction">
 			<property name="editManager" ref="editManager" />
 			<property name="menuManager" ref="menuManager" />
 			<property name="selectionManager" ref="selectionManager" />
 			<property name="activityIconManager" ref="activityIconManager" />
 	</bean>
 
-	<bean id="InvocationGroupManagerShutdownHook" class="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManagerShutdownHook" />
+	<bean id="InvocationGroupManagerShutdownHook" class="org.apache.taverna.activities.externaltool.manager.InvocationGroupManagerShutdownHook" />
 
-	<bean id="ExternalToolActivityViewFactory" class="net.sf.taverna.t2.activities.externaltool.views.ExternalToolActivityViewFactory">
+	<bean id="ExternalToolActivityViewFactory" class="org.apache.taverna.activities.externaltool.views.ExternalToolActivityViewFactory">
 			<property name="editManager" ref="editManager" />
 			<property name="fileManager" ref="fileManager" />
 			<property name="activityIconManager" ref="activityIconManager" />

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/actions/LocalworkerActivityConfigurationAction.java
----------------------------------------------------------------------
diff --git a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/actions/LocalworkerActivityConfigurationAction.java b/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/actions/LocalworkerActivityConfigurationAction.java
deleted file mode 100644
index 056e868..0000000
--- a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/actions/LocalworkerActivityConfigurationAction.java
+++ /dev/null
@@ -1,117 +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.activities.localworker.actions;
-
-import java.awt.Frame;
-import java.awt.event.ActionEvent;
-
-import javax.swing.Action;
-import javax.swing.JOptionPane;
-
-import net.sf.taverna.t2.activities.localworker.views.LocalworkerActivityConfigView;
-import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
-import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-import net.sf.taverna.t2.workbench.ui.actions.activity.ActivityConfigurationAction;
-import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationDialog;
-import uk.org.taverna.configuration.app.ApplicationConfiguration;
-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 com.fasterxml.jackson.databind.JsonNode;
-
-/**
- * The {@link LocalworkerActivity}s have pre-defined scripts, ports etc in a serialised form on
- * disk. So if the user wants to change them they have to do so at own risk.
- *
- * @author Ian Dunlop
- */
-@SuppressWarnings("serial")
-public class LocalworkerActivityConfigurationAction extends ActivityConfigurationAction {
-
-	public static final String EDIT_LOCALWORKER_SCRIPT = "Edit beanshell script";
-
-	private final EditManager editManager;
-
-	private final FileManager fileManager;
-
-	private final ApplicationConfiguration applicationConfiguration;
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	public LocalworkerActivityConfigurationAction(Activity activity, Frame owner,
-			EditManager editManager, FileManager fileManager,
-			ActivityIconManager activityIconManager,
-			ServiceDescriptionRegistry serviceDescriptionRegistry,
-			ApplicationConfiguration applicationConfiguration) {
-		super(activity, activityIconManager, serviceDescriptionRegistry);
-		this.editManager = editManager;
-		this.fileManager = fileManager;
-		this.applicationConfiguration = applicationConfiguration;
-		putValue(Action.NAME, EDIT_LOCALWORKER_SCRIPT);
-	}
-
-	/**
-	 * If the localworker has not been changed it pops up a {@link JOptionPane} warning the user
-	 * that they change things at their own risk. Otherwise just show the config view
-	 */
-	public void actionPerformed(ActionEvent e) {
-		Object[] options = { "Continue", "Cancel" };
-		Configuration configuration = scufl2Tools.configurationFor(activity, activity.getParent());
-		JsonNode json = configuration.getJson();
-		if (!json.get("isAltered").booleanValue()) {
-			int n = JOptionPane
-					.showOptionDialog(
-							null,
-							"Changing the properties of a Local Worker may affect its behaviour. Do you want to continue?",
-							"WARNING", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
-							null, // do not use a
-							// custom Icon
-							options, options[0]);
-
-			if (n == 0) {
-				// continue was clicked so prepare for config
-				openDialog();
-			} else {
-				// do nothing
-			}
-		} else {
-			openDialog();
-		}
-	}
-
-	private void openDialog() {
-		ActivityConfigurationDialog currentDialog = ActivityConfigurationAction
-				.getDialog(getActivity());
-		if (currentDialog != null) {
-			currentDialog.toFront();
-			return;
-		}
-		final LocalworkerActivityConfigView localworkerConfigView = new LocalworkerActivityConfigView(
-				getActivity(), applicationConfiguration);
-		final ActivityConfigurationDialog dialog = new ActivityConfigurationDialog(getActivity(),
-				localworkerConfigView, editManager);
-		ActivityConfigurationAction.setDialog(getActivity(), dialog, fileManager);
-
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/menu/ConfigureLocalworkerMenuAction.java
----------------------------------------------------------------------
diff --git a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/menu/ConfigureLocalworkerMenuAction.java b/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/menu/ConfigureLocalworkerMenuAction.java
deleted file mode 100644
index 3afed8d..0000000
--- a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/menu/ConfigureLocalworkerMenuAction.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package net.sf.taverna.t2.activities.localworker.menu;
-
-import javax.swing.Action;
-
-import uk.org.taverna.configuration.app.ApplicationConfiguration;
-
-import net.sf.taverna.t2.activities.beanshell.actions.BeanshellActivityConfigurationAction;
-import net.sf.taverna.t2.activities.localworker.actions.LocalworkerActivityConfigurationAction;
-import net.sf.taverna.t2.activities.localworker.servicedescriptions.LocalworkerServiceDescription;
-import net.sf.taverna.t2.servicedescriptions.ServiceDescriptionRegistry;
-import net.sf.taverna.t2.ui.menu.ContextualMenuComponent;
-import net.sf.taverna.t2.ui.menu.MenuComponent;
-import net.sf.taverna.t2.workbench.activityicons.ActivityIconManager;
-import net.sf.taverna.t2.workbench.activitytools.AbstractConfigureActivityMenuAction;
-import net.sf.taverna.t2.workbench.edits.EditManager;
-import net.sf.taverna.t2.workbench.file.FileManager;
-
-public class ConfigureLocalworkerMenuAction extends AbstractConfigureActivityMenuAction implements
-		MenuComponent, ContextualMenuComponent {
-
-	private EditManager editManager;
-	private FileManager fileManager;
-	private ActivityIconManager activityIconManager;
-	private ServiceDescriptionRegistry serviceDescriptionRegistry;
-	private ApplicationConfiguration applicationConfiguration;
-
-	public ConfigureLocalworkerMenuAction() {
-		super(LocalworkerServiceDescription.ACTIVITY_TYPE);
-	}
-
-	@Override
-	protected Action createAction() {
-		Action result = null;
-		result = new LocalworkerActivityConfigurationAction(findActivity(), getParentFrame(),
-				editManager, fileManager, activityIconManager, serviceDescriptionRegistry,
-				applicationConfiguration);
-		result.putValue(Action.NAME, BeanshellActivityConfigurationAction.EDIT_BEANSHELL_SCRIPT);
-		addMenuDots(result);
-		return result;
-	}
-
-	public void setEditManager(EditManager editManager) {
-		this.editManager = editManager;
-	}
-
-	public void setFileManager(FileManager fileManager) {
-		this.fileManager = fileManager;
-	}
-
-	public void setActivityIconManager(ActivityIconManager activityIconManager) {
-		this.activityIconManager = activityIconManager;
-	}
-
-	public void setServiceDescriptionRegistry(ServiceDescriptionRegistry serviceDescriptionRegistry) {
-		this.serviceDescriptionRegistry = serviceDescriptionRegistry;
-	}
-
-	public void setApplicationConfiguration(ApplicationConfiguration applicationConfiguration) {
-		this.applicationConfiguration = applicationConfiguration;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerActivityIcon.java
----------------------------------------------------------------------
diff --git a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerActivityIcon.java b/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerActivityIcon.java
deleted file mode 100644
index 7d6bb5a..0000000
--- a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerActivityIcon.java
+++ /dev/null
@@ -1,58 +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.activities.localworker.servicedescriptions;
-
-import java.net.URI;
-
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-import net.sf.taverna.t2.workbench.activityicons.ActivityIconSPI;
-
-/**
- *
- * @author Alex Nenadic
- * @author David Withers
- */
-public class LocalworkerActivityIcon implements ActivityIconSPI {
-
-	private static Icon icon;
-
-	public int canProvideIconScore(URI activityType) {
-		if (LocalworkerServiceDescription.ACTIVITY_TYPE.equals(activityType))
-			return DEFAULT_ICON + 1;
-		else
-			return NO_ICON;
-	}
-
-	public Icon getIcon(URI activityType) {
-		return getLocalworkerIcon();
-	}
-
-	public static Icon getLocalworkerIcon() {
-		if (icon == null) {
-			icon = new ImageIcon(LocalworkerActivityIcon.class
-					.getResource("/localworker.png"));
-		}
-		return icon;
-	}
-}
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench-common-activities/blob/163747de/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerServiceDescription.java
----------------------------------------------------------------------
diff --git a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerServiceDescription.java b/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerServiceDescription.java
deleted file mode 100644
index 713de2c..0000000
--- a/taverna-localworker-activity-ui/src/main/java/net/sf/taverna/t2/activities/localworker/servicedescriptions/LocalworkerServiceDescription.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package net.sf.taverna.t2.activities.localworker.servicedescriptions;
-
-import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.swing.Icon;
-
-import net.sf.taverna.t2.servicedescriptions.ServiceDescription;
-import org.apache.taverna.scufl2.api.configurations.Configuration;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-public class LocalworkerServiceDescription extends ServiceDescription {
-
-	public static final URI ACTIVITY_TYPE = URI.create("http://ns.taverna.org.uk/2010/activity/localworker");
-
-	private static final String LOCALWORKER = ServiceDescription.LOCAL_SERVICES;
-
-	private JsonNode json;
-	private String operation;
-	private String category;
-	private String provider;
-	private String localworkerName;
-
-	public JsonNode getJson() {
-		return json;
-	}
-
-	public void setJson(JsonNode json) {
-		this.json = json;
-	}
-
-	public String getOperation() {
-		return operation;
-	}
-
-	public void setOperation(String operation) {
-		this.operation = operation;
-	}
-
-	public String getCategory() {
-		return category;
-	}
-
-	public void setCategory(String category) {
-		this.category = category;
-	}
-
-	public String getProvider() {
-		return provider;
-	}
-
-	public void setProvider(String provider) {
-		this.provider = provider;
-	}
-
-	public String getLocalworkerName() {
-		return localworkerName;
-	}
-
-	public void setLocalworkerName(String localworkerName) {
-		this.localworkerName = localworkerName;
-	}
-
-	public String getType() {
-		return "Localworker";
-	}
-
-	@Override
-	public URI getActivityType() {
-		return ACTIVITY_TYPE;
-	}
-
-	@Override
-	public Configuration getActivityConfiguration() {
-		Configuration configuration = new Configuration();
-		configuration.setType(ACTIVITY_TYPE.resolve("#Config"));
-		configuration.setJson(getJson());
-		return configuration;
-	}
-
-	@Override
-	public Icon getIcon() {
-		return LocalworkerActivityIcon.getLocalworkerIcon();
-	}
-
-	@Override
-	public String getName() {
-		return operation;
-	}
-
-	@Override
-	public List<? extends Comparable<?>> getPath() {
-		List<String> result =
-		Arrays.asList (LOCALWORKER, category);
-		return result;
-	}
-
-	@Override
-	protected List<Object> getIdentifyingData() {
-		return Arrays.<Object>asList(getJson());
-	}
-
-}