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

Reply via email to