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

[31/35] incubator-taverna-common-activities git commit: package names changed to org.apache.taverna.*

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/manager/impl/InvocationGroupManagerImpl.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/manager/impl/InvocationGroupManagerImpl.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/manager/impl/InvocationGroupManagerImpl.java
new file mode 100644
index 0000000..5bfd615
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/manager/impl/InvocationGroupManagerImpl.java
@@ -0,0 +1,462 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.manager.impl;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.taverna.activities.externaltool.local.ExternalToolLocalInvocationMechanism;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroupAddedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroupChangedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationGroupManager;
+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.InvocationMechanismChangedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanismRemovedEvent;
+import org.apache.taverna.activities.externaltool.manager.InvocationPersister;
+import org.apache.taverna.activities.externaltool.manager.MechanismCreator;
+import net.sf.taverna.t2.lang.observer.MultiCaster;
+import net.sf.taverna.t2.lang.observer.Observable;
+import net.sf.taverna.t2.lang.observer.Observer;
+
+import org.apache.log4j.Logger;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+
+import uk.org.taverna.configuration.app.ApplicationConfiguration;
+
+
+/**
+ * @author alanrw
+ *
+ */
+public class InvocationGroupManagerImpl implements Observable<InvocationManagerEvent>, InvocationGroupManager{
+
+	private static final String DEFAULT_MECHANISM_NAME = "default local";
+	private static final String DEFAULT_GROUP_NAME = "default";
+	private HashSet<InvocationGroup> groups = new HashSet<InvocationGroup>();
+	private InvocationGroup defaultGroup = null;
+
+	private HashSet<InvocationMechanism> mechanisms = new HashSet<InvocationMechanism>();
+
+	private static XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+	private static SAXBuilder builder = new SAXBuilder();
+
+	private static Logger logger = Logger.getLogger(InvocationGroupManagerImpl.class);
+	
+	private Map<InvocationGroup, InvocationGroup> groupReplacements = Collections.synchronizedMap(new HashMap<InvocationGroup, InvocationGroup>());
+    
+	private Map<String, InvocationMechanism> mechanismReplacements = Collections.synchronizedMap(new HashMap<String, InvocationMechanism>());
+
+	private Map<String, InvocationGroup> groupImports = Collections.synchronizedMap(new HashMap<String, InvocationGroup> ());
+
+	private Map<String, InvocationMechanism> mechanismImports = Collections.synchronizedMap(new HashMap<String, InvocationMechanism> ());
+
+	private final ApplicationConfiguration applicationConfiguration;
+
+	private final List<MechanismCreator> mechanismCreators;
+
+	private final List<InvocationPersister> invocationPersisters;
+	
+	protected MultiCaster<InvocationManagerEvent> observers = new MultiCaster<InvocationManagerEvent>(
+			this);
+
+	private InvocationMechanism defaultMechanism = null;
+
+	public InvocationGroupManagerImpl(ApplicationConfiguration applicationConfiguration, List<MechanismCreator> mechanismCreators, List<InvocationPersister> invocationPersisters) {
+		this.applicationConfiguration = applicationConfiguration;
+		this.mechanismCreators = mechanismCreators;
+		this.invocationPersisters = invocationPersisters;
+		readConfiguration();
+		defaultMechanism = getInvocationMechanism(DEFAULT_MECHANISM_NAME);
+		if (defaultMechanism == null) {
+			createDefaultMechanism();
+		}
+		defaultGroup = getInvocationGroup(DEFAULT_GROUP_NAME);
+		if (defaultGroup == null) {
+			createDefaultGroup();
+		}
+
+		saveConfiguration();
+	}
+
+	@Override
+	public void addInvocationGroup(InvocationGroup group) {
+		groups.add(group);
+		observers.notify(new InvocationGroupAddedEvent(group));
+	}
+
+	@Override
+	public void replaceInvocationGroup(InvocationGroup originalGroup, InvocationGroup replacementGroup) {
+		Set<String> toReplaceImports = new HashSet<String>();
+		for (Entry<String, InvocationGroup> entry : groupImports.entrySet()) {
+			if (entry.getValue() == originalGroup) {
+				toReplaceImports.add(entry.getKey());
+			}
+		}
+		for (String spec : toReplaceImports) {
+			if (replacementGroup == null) {
+				groupImports.remove(spec);
+			} else {
+				groupImports.put(spec, replacementGroup);
+			}
+		}
+		if (replacementGroup != null) {
+			groupReplacements.put(originalGroup, replacementGroup);
+		}
+		observers.notify(new InvocationGroupRemovedEvent(originalGroup, (replacementGroup == null? getDefaultGroup(): replacementGroup)));
+	}
+
+	@Override
+	public void removeInvocationGroup(InvocationGroup group) {
+		groups.remove(group);
+		replaceInvocationGroup(group, getDefaultGroup());
+	}
+
+	@Override
+	public void replaceInvocationMechanism(InvocationMechanism originalMechanism, InvocationMechanism replacementMechanism) {
+		for (InvocationGroup g : groups) {
+			if (g.getMechanism().equals(originalMechanism)) {
+				if (replacementMechanism == null) {
+					g.setMechanism(getDefaultMechanism());
+				} else {
+					g.setMechanism(replacementMechanism);
+				}
+			}
+		}
+		Set<String> toRemoveImports = new HashSet<String>();
+		for (Entry<String, InvocationMechanism> entry : mechanismImports.entrySet()) {
+			if (entry.getValue() == originalMechanism) {
+				toRemoveImports.add(entry.getKey());
+			}
+		}
+		for (String spec : toRemoveImports) {
+			if (replacementMechanism == null) {
+				mechanismImports.remove(spec);
+			} else {
+				mechanismImports.put(spec, replacementMechanism);
+			}
+		}
+		if (replacementMechanism != null) {
+			mechanismReplacements.put(originalMechanism.getName() + ":" + originalMechanism.getXML(), replacementMechanism);
+		}
+		observers.notify(new InvocationMechanismRemovedEvent(originalMechanism, (replacementMechanism == null? getDefaultMechanism(): replacementMechanism)));
+	}
+
+	@Override
+	public void removeMechanism(InvocationMechanism mechanism) {
+		mechanisms.remove(mechanism);
+		replaceInvocationMechanism(mechanism, getDefaultMechanism());
+	}
+
+	@Override
+	public HashSet<InvocationGroup> getInvocationGroups() {
+		return groups;
+	}
+
+	@Override
+	public InvocationGroup getDefaultGroup() {
+		if (defaultGroup == null) {
+			createDefaultGroup();
+		}
+		return defaultGroup;
+	}
+
+	@Override
+	public Set<InvocationMechanism> getMechanisms() {
+		return mechanisms;
+	}
+
+	@Override
+	public void addMechanism(InvocationMechanism mechanism) {
+		mechanisms.add(mechanism);
+		observers.notify(new InvocationMechanismAddedEvent(mechanism));
+	}
+
+	@Override
+	public InvocationMechanism getDefaultMechanism() {
+		if (defaultMechanism == null) {
+			createDefaultMechanism();
+		}
+		return defaultMechanism;
+	}
+
+	@Override
+	public boolean containsGroup(InvocationGroup group) {
+		return groups.contains(group);
+	}
+
+	@Override
+	public InvocationMechanism getInvocationMechanism(
+			String defaultMechanismName) {
+		for (InvocationMechanism m : mechanisms) {
+			if (m.getName().equals(defaultMechanismName)) {
+				return m;
+			}
+		}
+		return null;
+	}
+
+	InvocationGroup getInvocationGroup(String groupName) {
+		for (InvocationGroup g : groups) {
+			if (g.getName().equals(groupName)) {
+				return g;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public void mechanismChanged(InvocationMechanism im) {
+		observers.notify(new InvocationMechanismChangedEvent(im));
+	}
+
+
+	private void createDefaultMechanism() {
+		defaultMechanism = new ExternalToolLocalInvocationMechanism();
+		defaultMechanism.setName(DEFAULT_MECHANISM_NAME);
+		mechanisms.add(defaultMechanism);
+	}
+
+	private void createDefaultGroup() {
+		defaultGroup = new InvocationGroup(mechanismCreators);
+		defaultGroup.setName(DEFAULT_GROUP_NAME);
+		defaultGroup.setMechanism(defaultMechanism);
+		groups.add(defaultGroup);
+	}
+
+	private void readConfiguration() {
+		File f = new File(getInvocationManagerDirectory(), "invocationManager.xml");
+		if (!f.exists()) {
+			return;
+		}
+		try {
+			Document document = null;
+			synchronized (builder) {
+				document = builder.build(f);
+			}
+			Element topElement = document.getRootElement();
+			Element mechanismsElement = topElement.getChild("invocationMechanisms");
+			for (Object mechanismObject : mechanismsElement.getChildren("invocationMechanism")) {
+				Element mechanismElement = (Element) mechanismObject;
+				Element mechanismNameElement = mechanismElement.getChild("invocationMechanismName");
+				String mechanismName = mechanismNameElement.getText();
+				Element mechanismTypeElement = mechanismElement.getChild("invocationMechanismType");
+				String mechanismType = mechanismTypeElement.getText();
+				Element mechanismDetailsElement = mechanismElement.getChild("mechanismDetails");
+				Element detailsElement = (Element) mechanismDetailsElement.getChildren().get(0);
+				InvocationMechanism mechanism = null;
+				for (MechanismCreator mc : mechanismCreators) {
+					if (mc.canHandle(mechanismType)) {
+						mechanism = mc.convert(detailsElement, mechanismName);
+					}
+				}
+				if (mechanism != null) {
+					this.addMechanism(mechanism);
+				}
+			}
+
+			Element groupsElement = topElement.getChild("invocationGroups");
+			for (Object groupObject : groupsElement.getChildren("invocationGroup")) {
+				Element groupElement = (Element) groupObject;
+				Element groupNameElement = groupElement.getChild("invocationGroupName");
+				String groupName = groupNameElement.getText();
+				Element mechanismNameElement = groupElement.getChild("mechanismName");
+				String mechanismName = mechanismNameElement.getText();
+				InvocationMechanism mechanism = getInvocationMechanism(mechanismName);
+				if (mechanism == null) {
+					logger.warn("Could not find mechanism " + mechanismName);
+					mechanism = getDefaultMechanism();
+				}
+				InvocationGroup group = new InvocationGroup(mechanismCreators);
+				group.setName(groupName);
+				group.setMechanism(mechanism);
+				group.convertMechanismToDetails();
+				this.addInvocationGroup(group);
+			}
+		} catch (JDOMException e) {
+			logger.error("XML parsing problem", e);
+		} catch (IOException e) {
+			logger.error("Unable to read invocation manager", e);
+		}
+	}
+
+	/**
+	 * Get the directory where the invocation information will be/is saved to.
+	 */
+	@Override
+	public File getInvocationManagerDirectory() {
+
+		File home = applicationConfiguration.getApplicationHomeDir();
+
+		File invocationManagerDirectory = new File(home,"externaltool");
+		if (!invocationManagerDirectory.exists()) {
+			invocationManagerDirectory.mkdir();
+		}
+		return invocationManagerDirectory;
+	}
+
+	@Override
+	public void saveConfiguration() {
+		File f = new File(getInvocationManagerDirectory(), "invocationManager.xml");
+
+		Document configDocument = new Document();
+		Element topElement = new Element("invocationManager");
+		Element mechanismsElement = new Element("invocationMechanisms");
+
+		for (InvocationMechanism m : mechanisms) {
+			Element mechanismElement = new Element("invocationMechanism");
+			Element nameElement = new Element("invocationMechanismName");
+			nameElement.setText(m.getName());
+			mechanismElement.addContent(nameElement);
+			Element typeElement = new Element("invocationMechanismType");
+			typeElement.setText(m.getType());
+			mechanismElement.addContent(typeElement);
+			Element mechanismDetails = new Element("mechanismDetails");
+			mechanismDetails.addContent(m.getXMLElement());
+			mechanismElement.addContent(mechanismDetails);
+
+			mechanismsElement.addContent(mechanismElement);
+		}
+		topElement.addContent(mechanismsElement);
+
+		Element groupsElement = new Element("invocationGroups");
+		for (InvocationGroup g : groups) {
+			Element groupElement = new Element("invocationGroup");
+			Element nameElement = new Element("invocationGroupName");
+			nameElement.setText(g.getName());
+			groupElement.addContent(nameElement);
+			Element mechanismNameElement = new Element("mechanismName");
+			mechanismNameElement.setText(g.getMechanism().getName());
+			groupElement.addContent(mechanismNameElement);
+			groupsElement.addContent(groupElement);
+		}
+		topElement.addContent(groupsElement);
+
+		configDocument.setRootElement(topElement);
+
+		FileWriter writer;
+		try {
+			writer = new FileWriter(f);
+			synchronized (outputter) {
+				outputter.output(configDocument, writer);
+			}
+			writer.close();
+		} catch (IOException e) {
+			logger.error("Unable to save invocation manager", e);
+		}
+	}
+
+	@Override
+	public void groupChanged(InvocationGroup group) {
+		observers.notify(new InvocationGroupChangedEvent(group));
+	}
+
+	@Override
+	public void addObserver(Observer<InvocationManagerEvent> observer) {
+		observers.addObserver(observer);
+	}
+
+	@Override
+	public List<Observer<InvocationManagerEvent>> getObservers() {
+		return observers.getObservers();
+	}
+
+	@Override
+	public void removeObserver(Observer<InvocationManagerEvent> observer) {
+		observers.removeObserver(observer);
+	}
+
+	@Override
+	public void deleteRun(String runId) {
+		for (InvocationPersister persister : invocationPersisters) {
+			persister.deleteRun(runId);
+		}
+	}
+
+	@Override
+	public void persistInvocations() {
+		for (InvocationPersister persister : invocationPersisters) {
+			persister.persist(getInvocationManagerDirectory());
+		}
+	}
+
+	@Override
+	public void loadInvocations() {
+		for (InvocationPersister persister : invocationPersisters) {
+			persister.load(getInvocationManagerDirectory());
+		}
+	}
+
+	@Override
+	public boolean containsMechanism(InvocationMechanism invocationMechanism) {
+		return mechanisms.contains(invocationMechanism);
+	}
+
+	@Override
+	public InvocationGroup getGroupReplacement(InvocationGroup group) {
+		return groupReplacements.get(group);
+	}
+
+	@Override
+	public InvocationMechanism getMechanismReplacement(String invocationMechanismSpecification) {
+		return mechanismReplacements.get(invocationMechanismSpecification);
+	}
+
+	@Override
+	public InvocationGroup getImportedGroup(String groupSpecification) {
+		return groupImports.get(groupSpecification);
+	}
+
+	@Override
+	public InvocationMechanism getImportedMechanism(String mechanismSpecification) {
+		return mechanismImports.get(mechanismSpecification);
+	}
+
+	@Override
+	public void importMechanism(String invocationMechanismSpecification,
+			InvocationMechanism createdMechanism) {
+		addMechanism(createdMechanism);
+		mechanismImports.put(invocationMechanismSpecification, createdMechanism);
+	}
+
+	@Override
+	public void importInvocationGroup(String invocationGroupSpecification,
+			InvocationGroup invocationGroup) {
+		addInvocationGroup(invocationGroup);
+		groupImports.put(invocationGroupSpecification, invocationGroup);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/package.html
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/package.html b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/package.html
new file mode 100644
index 0000000..b07bedc
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/package.html
@@ -0,0 +1,3 @@
+<body>
+Contains the activity classes required to interact with use cases.
+</body>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/repository/ExternalToolRepositoryUtil.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/repository/ExternalToolRepositoryUtil.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/repository/ExternalToolRepositoryUtil.java
new file mode 100644
index 0000000..d0c7592
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/repository/ExternalToolRepositoryUtil.java
@@ -0,0 +1,28 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.repository;
+
+/**
+ * @author alanrw
+ *
+ */
+public class ExternalToolRepositoryUtil {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/ExternalToolSshInvocationMechanism.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/ExternalToolSshInvocationMechanism.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/ExternalToolSshInvocationMechanism.java
new file mode 100644
index 0000000..c373879
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/ExternalToolSshInvocationMechanism.java
@@ -0,0 +1,110 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.ssh;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom.Element;
+import org.jdom.Text;
+
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNodeFactory;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUseCaseInvocation;
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
+
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNode;
+
+/**
+ * @author alanrw
+ *
+ */
+public class ExternalToolSshInvocationMechanism extends InvocationMechanism {
+	
+	private List<SshNode> nodes = new ArrayList<SshNode>();
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.activities.externaltool.manager.InvocationMechanism#getType()
+	 */
+	@Override
+	public String getType() {
+		return SshUseCaseInvocation.SSH_USE_CASE_INVOCATION_TYPE;
+	}
+
+	/**
+	 * @param list the nodes to set
+	 */
+	public void setNodes(List<SshNode> list) {
+		this.nodes = list;
+	}
+
+	public List<SshNode> getNodes() {
+		if (this.nodes.isEmpty()) {
+			this.nodes.add(SshNodeFactory.getInstance().getDefaultNode());
+		}
+		return this.nodes;
+	}
+
+	@Override
+	public Element getXMLElement() {
+		Element top = new Element("sshInvocation");
+		for (SshNode node : nodes) {
+			Element nodeElement = new Element("sshNode");
+			String host = node.getHost();
+			if (host != null) {
+				Element hostElement = new Element("host");
+				hostElement.addContent(new Text(host));
+				nodeElement.addContent(hostElement);
+			}
+			int port = node.getPort();
+			Element portElement = new Element("port");
+			portElement.addContent(new Text(Integer.toString(port)));
+			nodeElement.addContent(portElement);
+
+			String directory = node.getDirectory();
+			if (directory != null) {
+				Element directoryElement = new Element("directory");
+				directoryElement.addContent(new Text(directory));
+				nodeElement.addContent(directoryElement);
+			}
+			
+			String linkCommand = node.getLinkCommand();
+			if (linkCommand != null) {
+				Element linkCommandElement = new Element("linkCommand");
+				linkCommandElement.addContent(new Text(linkCommand));
+				nodeElement.addContent(linkCommandElement);
+			}
+			
+			String copyCommand = node.getCopyCommand();
+			if (copyCommand != null) {
+				Element copyCommandElement = new Element("copyCommand");
+				copyCommandElement.addContent(new Text(copyCommand));
+				nodeElement.addContent(copyCommandElement);
+			}
+			if (node.isRetrieveData()) {
+				Element retrieveDataElement = new Element("retrieveData");
+				nodeElement.addContent(retrieveDataElement);
+			}
+			
+			top.addContent(nodeElement);
+		}
+		return top;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationCreator.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationCreator.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationCreator.java
new file mode 100644
index 0000000..2cc6fd6
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationCreator.java
@@ -0,0 +1,133 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.ssh;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.taverna.activities.externaltool.InvocationCreator;
+import org.apache.taverna.activities.externaltool.RetrieveLoginFromTaverna;
+
+import org.apache.log4j.Logger;
+
+import com.jcraft.jsch.JSchException;
+import com.jcraft.jsch.SftpException;
+
+import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.UseCaseInvocation;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNode;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNodeFactory;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUrl;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUseCaseInvocation;
+
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
+import net.sf.taverna.t2.reference.ExternalReferenceSPI;
+import net.sf.taverna.t2.reference.Identified;
+import net.sf.taverna.t2.reference.ReferenceService;
+import net.sf.taverna.t2.reference.ReferenceSet;
+import net.sf.taverna.t2.reference.T2Reference;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+
+/**
+ * @author alanrw
+ *
+ */
+public final class SshInvocationCreator implements InvocationCreator {
+
+	private static Logger logger = Logger.getLogger(SshInvocationCreator.class);
+
+    private static List<SshNode> knownNodes = new ArrayList<SshNode>();
+
+	private CredentialManager credentialManager;
+
+	@Override
+	public boolean canHandle(String mechanismType) {
+		return mechanismType.equals(SshUseCaseInvocation.SSH_USE_CASE_INVOCATION_TYPE);
+	}
+
+	@Override
+	public UseCaseInvocation convert(InvocationMechanism m, UseCaseDescription description, Map<String, T2Reference> data, ReferenceService referenceService) {
+	    ExternalToolSshInvocationMechanism mechanism = (ExternalToolSshInvocationMechanism) m;
+		SshUseCaseInvocation result = null;
+		try {
+		    SshNode chosenNode = chooseNode(mechanism.getNodes(), data, referenceService);
+		    result = new SshUseCaseInvocation(description, chosenNode, new RetrieveLoginFromTaverna(new SshUrl(chosenNode).toString(), credentialManager), credentialManager);
+		} catch (JSchException e) {
+			logger.error("Null invocation", e);
+		} catch (SftpException e) {
+			logger.error("Null invocation", e);
+		}
+		return result;
+	}
+
+    private static SshNode chooseNode(List<SshNode> possibleNodes, Map<String, T2Reference> data, ReferenceService referenceService) {
+	SshNode result = null;
+	for (T2Reference ref : data.values()) {
+		SshReference r = getAsSshReference(referenceService, ref);
+		if (r != null) {
+			SshNode dataNode = SshNodeFactory.getInstance().getSshNode(r.getHost(), r.getPort(), r.getDirectory());
+			if (possibleNodes.contains(dataNode)) {
+				logger.info("Running with data at " + r.getHost());
+				return dataNode;
+			}
+		}
+	}
+	synchronized(knownNodes) {
+	    int chosenIndex = Integer.MAX_VALUE;
+	    for (SshNode p : possibleNodes) {
+		if (!knownNodes.contains(p)) {
+		    knownNodes.add(p);
+		}
+		int index = knownNodes.indexOf(p);
+		if (index < chosenIndex) {
+		    chosenIndex = index;
+		}
+	    }
+	    if (chosenIndex != Integer.MAX_VALUE) {
+		result = knownNodes.get(chosenIndex);
+		// Move node to end of list
+		knownNodes.remove(result);
+		knownNodes.add(result);
+	    }
+	}
+	return result;
+    }
+
+    private static SshReference getAsSshReference(ReferenceService referenceService,
+			T2Reference t2Reference) {
+    	Identified identified = referenceService.resolveIdentifier(t2Reference, null, null);
+		if (identified instanceof ReferenceSet) {
+			for (ExternalReferenceSPI ref : ((ReferenceSet) identified).getExternalReferences()) {
+				if (ref instanceof SshReference) {
+					SshReference sshRef = (SshReference) ref;
+					return sshRef;
+				}
+			}
+		}
+		return null;
+	}
+
+	public void setCredentialManager(CredentialManager credentialManager) {
+		this.credentialManager = credentialManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationPersister.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationPersister.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationPersister.java
new file mode 100644
index 0000000..dbdd32c
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshInvocationPersister.java
@@ -0,0 +1,91 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.ssh;
+
+import java.io.File;
+
+import org.apache.taverna.activities.externaltool.manager.InvocationPersister;
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+
+import org.apache.log4j.Logger;
+
+import de.uni_luebeck.inb.knowarc.usecases.invocation.InvocationException;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUseCaseInvocation;
+
+/**
+ * @author alanrw
+ *
+ */
+public class SshInvocationPersister extends InvocationPersister {
+
+	private static Logger logger = Logger.getLogger(SshInvocationPersister.class);
+	private CredentialManager credentialManager;
+
+
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister#load()
+	 */
+	@Override
+	public void load(File directory) {
+		SshUseCaseInvocation.load(directory);
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister#persist()
+	 */
+	@Override
+	public void persist(File directory) {
+		SshUseCaseInvocation.persist(directory);
+	}
+
+	@Override
+	public void deleteRun(String runId) {
+		try {
+			SshUseCaseInvocation.cleanup(runId, credentialManager);
+		} catch (InvocationException e) {
+			logger.error(e);
+		}
+	}
+
+	public void setCredentialManager(CredentialManager credentialManager) {
+		this.credentialManager = credentialManager;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshMechanismCreator.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshMechanismCreator.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshMechanismCreator.java
new file mode 100644
index 0000000..2a15d38
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshMechanismCreator.java
@@ -0,0 +1,100 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.taverna.activities.externaltool.ssh;
+
+import java.util.ArrayList;
+
+import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
+import org.apache.taverna.activities.externaltool.manager.MechanismCreator;
+
+import org.apache.log4j.Logger;
+import org.jdom.Element;
+
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNode;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNodeFactory;
+import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUseCaseInvocation;
+
+/**
+ * @author alanrw
+ *
+ */
+public class SshMechanismCreator extends MechanismCreator {
+
+
+	private static Logger logger = Logger.getLogger(SshMechanismCreator.class);
+	
+	/* (non-Javadoc)
+	 * @see net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator#canHandle(java.lang.String)
+	 */
+	@Override
+	public boolean canHandle(String mechanismType) {
+		return mechanismType.equals(SshUseCaseInvocation.SSH_USE_CASE_INVOCATION_TYPE);
+	}
+
+
+	@Override
+	public InvocationMechanism convert(Element detailsElement,
+			String mechanismName) {
+		ExternalToolSshInvocationMechanism result = new ExternalToolSshInvocationMechanism();
+		result.setName(mechanismName);
+		ArrayList<SshNode> nodeList = new ArrayList<SshNode>();
+		for (Object nodeObject : detailsElement.getChildren("sshNode")) {
+			Element nodeElement = (Element) nodeObject;
+			Element hostElement = nodeElement.getChild("host");
+			String host;
+			int port;
+			String directory;
+
+				host = hostElement.getText();
+
+			Element portElement = nodeElement.getChild("port");
+			port = Integer.parseInt(portElement.getText());
+			
+			Element directoryElement = nodeElement.getChild("directory");
+
+				directory = directoryElement.getText();
+
+				boolean newNode = !SshNodeFactory.getInstance().containsSshNode(host, port, directory);
+			
+			SshNode node = SshNodeFactory.getInstance().getSshNode(host, port, directory);
+			
+			if (newNode) {
+
+			Element linkCommandElement = nodeElement.getChild("linkCommand");
+			if (linkCommandElement != null) {
+				node.setLinkCommand(linkCommandElement.getText());
+			}
+
+			Element copyCommandElement = nodeElement.getChild("copyCommand");
+			if (copyCommandElement != null) {
+				node.setCopyCommand(copyCommandElement.getText());
+			}
+			
+			Element retrieveDataElement = nodeElement.getChild("retrieveData");
+			node.setRetrieveData(retrieveDataElement != null);
+			}
+			nodeList.add(node);
+
+		}
+		result.setNodes(nodeList);		
+		return result;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.InvocationCreator
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.InvocationCreator b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.InvocationCreator
index 3eeef74..2639112 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.InvocationCreator
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.InvocationCreator
@@ -1,2 +1,2 @@
-net.sf.taverna.t2.activities.externaltool.local.LocalInvocationCreator
-net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationCreator
+org.apache.taverna.activities.externaltool.local.LocalInvocationCreator
+org.apache.taverna.activities.externaltool.ssh.SshInvocationCreator

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister
index 4f4b71f..2caa4de 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister
@@ -1,2 +1,2 @@
-net.sf.taverna.t2.activities.externaltool.local.LocalInvocationPersister
-net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationPersister
\ No newline at end of file
+org.apache.taverna.activities.externaltool.local.LocalInvocationPersister
+org.apache.taverna.activities.externaltool.ssh.SshInvocationPersister
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator
index 2166ed6..47b965f 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator
@@ -1,2 +1,2 @@
-net.sf.taverna.t2.activities.externaltool.local.LocalMechanismCreator
-net.sf.taverna.t2.activities.externaltool.ssh.SshMechanismCreator
\ No newline at end of file
+org.apache.taverna.activities.externaltool.local.LocalMechanismCreator
+org.apache.taverna.activities.externaltool.ssh.SshMechanismCreator
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener
index ac84bb3..0ba5254 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener
@@ -1 +1 @@
-net.sf.taverna.t2.activities.externaltool.ExternalToolRunDeletionListener
+org.apache.taverna.activities.externaltool.ExternalToolRunDeletionListener

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker
index c97a79d..6992636 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker
@@ -1,2 +1,2 @@
-net.sf.taverna.t2.activities.externaltool.ExternalToolActivityHealthChecker
-net.sf.taverna.t2.activities.externaltool.ExternalToolActivityMimeTypeChecker
+org.apache.taverna.activities.externaltool.ExternalToolActivityHealthChecker
+org.apache.taverna.activities.externaltool.ExternalToolActivityMimeTypeChecker

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml
index 197f2c0..eb2307c 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml
@@ -8,13 +8,13 @@
 
 	<service ref="SshReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" />
 
-	<service ref="invocationGroupManager" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManager" />
+	<service ref="invocationGroupManager" interface="org.apache.taverna.activities.externaltool.manager.InvocationGroupManager" />
 
-	<service ref="LocalInvocationPersister" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" />
-	<service ref="SshInvocationPersister" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" />
+	<service ref="LocalInvocationPersister" interface="org.apache.taverna.activities.externaltool.manager.InvocationPersister" />
+	<service ref="SshInvocationPersister" interface="org.apache.taverna.activities.externaltool.manager.InvocationPersister" />
 
-	<service ref="LocalMechanismCreator" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" />
-	<service ref="SshMechanismCreator" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" />
+	<service ref="LocalMechanismCreator" interface="org.apache.taverna.activities.externaltool.manager.MechanismCreator" />
+	<service ref="SshMechanismCreator" interface="org.apache.taverna.activities.externaltool.manager.MechanismCreator" />
 
 	<service ref="ExternalToolRunDeletionListener" interface="net.sf.taverna.t2.workflowmodel.RunDeletionListener" />
 
@@ -23,16 +23,16 @@
 	<service ref="ExternalToolActivityHealthChecker" interface="net.sf.taverna.t2.workflowmodel.health.HealthChecker" />
 	<service ref="ExternalToolActivityMimeTypeChecker" interface="net.sf.taverna.t2.workflowmodel.health.HealthChecker" />
 
-	<service ref="LocalInvocationCreator" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" />
-	<service ref="SshInvocationCreator" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" />
+	<service ref="LocalInvocationCreator" interface="org.apache.taverna.activities.externaltool.InvocationCreator" />
+	<service ref="SshInvocationCreator" interface="org.apache.taverna.activities.externaltool.InvocationCreator" />
 
 	<service ref="externalToolActivityFactory" interface="net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory" />
 
-	<list id="invocationCreators" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" cardinality="0..N" />
+	<list id="invocationCreators" interface="org.apache.taverna.activities.externaltool.InvocationCreator" cardinality="0..N" />
 
-	<list id="mechanismCreators" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" cardinality="0..N" />
+	<list id="mechanismCreators" interface="org.apache.taverna.activities.externaltool.manager.MechanismCreator" cardinality="0..N" />
 
-        <list id="invocationPersisters" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" cardinality="0..N" />
+        <list id="invocationPersisters" interface="org.apache.taverna.activities.externaltool.manager.InvocationPersister" cardinality="0..N" />
 
 	<reference id="credentialManager" interface="net.sf.taverna.t2.security.credentialmanager.CredentialManager" />
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml
index a3cfdb8..46486da 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml
@@ -7,15 +7,15 @@
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 
-	<bean id="LocalInvocationPersister" class="net.sf.taverna.t2.activities.externaltool.local.LocalInvocationPersister" />
-	<bean id="SshInvocationPersister" class="net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationPersister">
+	<bean id="LocalInvocationPersister" class="org.apache.taverna.activities.externaltool.local.LocalInvocationPersister" />
+	<bean id="SshInvocationPersister" class="org.apache.taverna.activities.externaltool.ssh.SshInvocationPersister">
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 
-	<bean id="LocalMechanismCreator" class="net.sf.taverna.t2.activities.externaltool.local.LocalMechanismCreator" />
-	<bean id="SshMechanismCreator" class="net.sf.taverna.t2.activities.externaltool.ssh.SshMechanismCreator" />
+	<bean id="LocalMechanismCreator" class="org.apache.taverna.activities.externaltool.local.LocalMechanismCreator" />
+	<bean id="SshMechanismCreator" class="org.apache.taverna.activities.externaltool.ssh.SshMechanismCreator" />
 
-	<bean id="ExternalToolRunDeletionListener" class="net.sf.taverna.t2.activities.externaltool.ExternalToolRunDeletionListener">
+	<bean id="ExternalToolRunDeletionListener" class="org.apache.taverna.activities.externaltool.ExternalToolRunDeletionListener">
 		<property name="invocationGroupManager" ref="invocationGroupManager" />
 	</bean>
 
@@ -23,24 +23,24 @@
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 
-	<bean id="ExternalToolActivityHealthChecker" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityHealthChecker">
+	<bean id="ExternalToolActivityHealthChecker" class="org.apache.taverna.activities.externaltool.ExternalToolActivityHealthChecker">
 		<property name="invocationGroupManager" ref="invocationGroupManager" />
 	</bean>
-	<bean id="ExternalToolActivityMimeTypeChecker" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityMimeTypeChecker" />
+	<bean id="ExternalToolActivityMimeTypeChecker" class="org.apache.taverna.activities.externaltool.ExternalToolActivityMimeTypeChecker" />
 
-	<bean id="LocalInvocationCreator" class="net.sf.taverna.t2.activities.externaltool.local.LocalInvocationCreator" />
-	<bean id="SshInvocationCreator" class="net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationCreator">
+	<bean id="LocalInvocationCreator" class="org.apache.taverna.activities.externaltool.local.LocalInvocationCreator" />
+	<bean id="SshInvocationCreator" class="org.apache.taverna.activities.externaltool.ssh.SshInvocationCreator">
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 
 
-	<bean id="externalToolActivityFactory" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityFactory">
+	<bean id="externalToolActivityFactory" class="org.apache.taverna.activities.externaltool.ExternalToolActivityFactory">
 		<property name="invocationCreators" ref="invocationCreators" />
 		<property name="mechanismCreators" ref="mechanismCreators" />
                 <property name="edits" ref="edits" />
 	</bean>
 
-	<bean id="invocationGroupManager" class="net.sf.taverna.t2.activities.externaltool.manager.impl.InvocationGroupManagerImpl">
+	<bean id="invocationGroupManager" class="org.apache.taverna.activities.externaltool.manager.impl.InvocationGroupManagerImpl">
 		<constructor-arg name="applicationConfiguration" ref="applicationConfiguration" />
 		<constructor-arg name="mechanismCreators" ref="mechanismCreators" />
 		<constructor-arg name="invocationPersisters" ref="invocationPersisters" />

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
deleted file mode 100644
index 7be03df..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Date;
-
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-
-import org.apache.abdera.model.Document;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.model.Feed;
-import org.apache.abdera.parser.ParseException;
-import org.apache.abdera.parser.Parser;
-import org.apache.abdera.parser.stax.FOMParser;
-import org.apache.log4j.Logger;
-
-public abstract class FeedReader extends Thread {
-
-	static final Logger logger = Logger.getLogger(FeedReader.class);
-
-	public FeedReader(final String name) {
-		super(name);
-		this.setDaemon(true);
-	}
-
-	protected abstract void considerEntry(Entry entry);
-
-	@Override
-	public void run() {
-		try {
-			final Parser parser = new FOMParser();
-			Date lastCheckedDate = new Date();
-			while (true) {
-				try {
-					sleep(5000);
-				} catch (final InterruptedException e1) {
-					logger.error(e1);
-				}
-				InputStream openStream = null;
-				try {
-					final Date newLastCheckedDate = new Date();
-					final URL url = getInteractionPreference().getFeedUrl();
-					openStream = url.openStream();
-					final Document<Feed> doc = parser.parse(openStream,
-							url.toString());
-					final Feed feed = doc.getRoot().sortEntriesByEdited(true);
-
-					for (final Entry entry : feed.getEntries()) {
-
-						Date d = entry.getEdited();
-						if (d == null) {
-							d = entry.getUpdated();
-						}
-						if (d == null) {
-							d = entry.getPublished();
-						}
-						 if (d.before(lastCheckedDate)) {
-						 break;
-						 }
-						this.considerEntry(entry);
-					}
-					lastCheckedDate = newLastCheckedDate;
-				} catch (final MalformedURLException e) {
-					logger.error(e);
-				} catch (final ParseException e) {
-					logger.error(e);
-				} catch (final IOException e) {
-					logger.error(e);
-				} finally {
-					try {
-						if (openStream != null) {
-							openStream.close();
-						}
-					} catch (final IOException e) {
-						logger.error(e);
-					}
-				}
-			}
-		} catch (final Exception e) {
-			logger.error(e);
-		}
-	}
-
-	protected abstract InteractionPreference getInteractionPreference();
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
deleted file mode 100644
index cfc2182..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.activities.interaction.velocity.NotifyChecker;
-import net.sf.taverna.t2.activities.interaction.velocity.ProduceChecker;
-import net.sf.taverna.t2.activities.interaction.velocity.RequireChecker;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AbstractAsynchronousActivity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback;
-import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean;
-import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean;
-
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.parser.node.ASTprocess;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-public final class InteractionActivity extends
-		AbstractAsynchronousActivity<JsonNode>
-		implements AsynchronousActivity<JsonNode> {
-	
-	public static final String URI = "http://ns.taverna.org.uk/2010/activity/interaction";
-
-	@SuppressWarnings("unused")
-	private static final Logger logger = Logger
-			.getLogger(InteractionActivity.class);
-
-	private Template presentationTemplate;
-
-	private final Map<String, Integer> inputDepths = new HashMap<String, Integer>();
-	private final Map<String, Integer> outputDepths = new HashMap<String, Integer>();
-
-	private CredentialManager credentialManager;
-
-	private InteractionRecorder interactionRecorder;
-
-	private InteractionUtils interactionUtils;
-
-	private InteractionJetty interactionJetty;
-
-	private InteractionPreference interactionPreference;
-
-	private ResponseFeedListener responseFeedListener;
-
-	private JsonNode json;
-
-	private InteractionVelocity interactionVelocity;
-
-	public InteractionActivity(final CredentialManager credentialManager,
-			final InteractionRecorder interactionRecorder,
-			final InteractionUtils interactionUtils,
-			final InteractionJetty interactionJetty,
-			final InteractionPreference interactionPreference,
-			final ResponseFeedListener responseFeedListener,
-			final InteractionVelocity interactionVelocity) {
-		this.credentialManager = credentialManager;
-		this.interactionRecorder = interactionRecorder;
-		this.interactionUtils = interactionUtils;
-		this.interactionJetty = interactionJetty;
-		this.interactionPreference = interactionPreference;
-		this.responseFeedListener = responseFeedListener;
-		this.interactionVelocity = interactionVelocity;
-		this.json = null;
-	}
-
-	@Override
-	public void configure(final JsonNode json)
-			throws ActivityConfigurationException {
-		
-		this.json = json;
-	}
-
-	@Override
-	public void executeAsynch(final Map<String, T2Reference> inputs,
-			final AsynchronousActivityCallback callback) {
-		// Don't execute service directly now, request to be run ask to be run
-		// from thread pool and return asynchronously
-		final InteractionRequestor requestor = new InteractionCallbackRequestor(
-				this, callback, inputs);
-		callback.requestRun(new InteractionActivityRunnable(requestor,
-				this.presentationTemplate,
-				this.credentialManager,
-				this.interactionRecorder,
-				this.interactionUtils,
-				this.interactionJetty,
-				this.interactionPreference,
-				this.responseFeedListener,
-				this.interactionVelocity));
-	}
-
-	@Override
-	public JsonNode getConfiguration() {
-		return this.json;
-	}
-
-	public ActivityInputPort getInputPort(final String name) {
-		for (final ActivityInputPort port : this.getInputPorts()) {
-			if (port.getName().equals(name)) {
-				return port;
-			}
-		}
-		return null;
-	}
-
-	InteractionActivityType getInteractionActivityType() {
-		JsonNode subNode = json.get("interactivityActivityType");
-		if (subNode == null) {
-			return InteractionActivityType.LocallyPresentedHtml;
-		}
-		String textValue = subNode.textValue();
-		if (textValue == null) {
-			return InteractionActivityType.LocallyPresentedHtml;
-		}
-		if ("VelocityTemplate".equals(textValue)) {
-			return InteractionActivityType.VelocityTemplate;
-		}
-		return InteractionActivityType.LocallyPresentedHtml;
-	}
-	
-
-	 String getPresentationOrigin() {
-		JsonNode subNode = json.get("presentationOrigin");
-		if (subNode == null) {
-			return null;
-		}
-		String textValue = subNode.textValue();
-		if (textValue == null) {
-			return null;			
-		}
-		return textValue;
-	}
-
-	public boolean isProgressNotification() {
-		JsonNode subNode = json.get("progressNotification");
-		if (subNode == null) {
-			return false;
-		}
-		return subNode.booleanValue();
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
deleted file mode 100644
index 911d860..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * 
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Set;
-
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityOutputPort;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionActivityFactory implements ActivityFactory {
-	
-	private CredentialManager credentialManager;
-	
-	private InteractionRecorder interactionRecorder;
-	
-	private InteractionUtils interactionUtils;
-
-	private InteractionJetty interactionJetty;
-
-	private InteractionPreference interactionPreference;
-
-	private ResponseFeedListener responseFeedListener;
-
-	private InteractionVelocity interactionVelocity;
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#createActivity()
-	 */
-	@Override
-	public InteractionActivity createActivity() {
-		return new InteractionActivity(this.credentialManager,
-				this.interactionRecorder,
-				this.interactionUtils,
-				this.interactionJetty,
-				this.interactionPreference,
-				this.responseFeedListener,
-				this.interactionVelocity);
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getActivityType()
-	 */
-	@Override
-	public URI getActivityType() {
-		return URI.create(InteractionActivity.URI);
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getActivityConfigurationSchema()
-	 */
-	@Override
-	public JsonNode getActivityConfigurationSchema() {
-		ObjectMapper objectMapper = new ObjectMapper();
-		try {
-			return objectMapper.readTree(getClass().getResource("/schema.json"));
-		} catch (IOException e) {
-			return objectMapper.createObjectNode();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getInputPorts(com.fasterxml.jackson.databind.JsonNode)
-	 */
-	@Override
-	public Set<ActivityInputPort> getInputPorts(JsonNode configuration)
-			throws ActivityConfigurationException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getOutputPorts(com.fasterxml.jackson.databind.JsonNode)
-	 */
-	@Override
-	public Set<ActivityOutputPort> getOutputPorts(JsonNode configuration)
-			throws ActivityConfigurationException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	/**
-	 * @return the credentialManager
-	 */
-	public CredentialManager getCredentialManager() {
-		return credentialManager;
-	}
-
-	/**
-	 * @param credentialManager the credentialManager to set
-	 */
-	public void setCredentialManager(CredentialManager credentialManager) {
-		this.credentialManager = credentialManager;
-	}
-
-	public void setInteractionRecorder(InteractionRecorder interactionRecorder) {
-		this.interactionRecorder = interactionRecorder;
-	}
-
-	public void setInteractionUtils(InteractionUtils interactionUtils) {
-		this.interactionUtils = interactionUtils;
-	}
-
-	public void setInteractionJetty(InteractionJetty interactionJetty) {
-		this.interactionJetty = interactionJetty;
-	}
-
-	public void setInteractionPreference(InteractionPreference interactionPreference) {
-		this.interactionPreference = interactionPreference;
-	}
-
-	public void setResponseFeedListener(ResponseFeedListener responseFeedListener) {
-		this.responseFeedListener = responseFeedListener;
-	}
-
-	public void setInteractionVelocity(InteractionVelocity interactionVelocity) {
-		this.interactionVelocity = interactionVelocity;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
deleted file mode 100644
index 555fe6a..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.List;
-
-import net.sf.taverna.t2.visit.VisitReport;
-import net.sf.taverna.t2.workflowmodel.health.HealthChecker;
-import net.sf.taverna.t2.workflowmodel.health.RemoteHealthChecker;
-
-/**
- * Example health checker
- * 
- */
-public class InteractionActivityHealthChecker implements
-		HealthChecker<InteractionActivity> {
-
-	@Override
-	public boolean canVisit(final Object o) {
-		return o instanceof InteractionActivity;
-	}
-
-	@Override
-	public boolean isTimeConsuming() {
-		return true;
-	}
-
-	@Override
-	public VisitReport visit(final InteractionActivity activity,
-			final List<Object> ancestry) {
-
-		if (activity.getInteractionActivityType().equals(
-				InteractionActivityType.LocallyPresentedHtml)) {
-			return RemoteHealthChecker.contactEndpoint(activity,
-					activity.getPresentationOrigin());
-		}
-
-		return null;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
deleted file mode 100644
index 342eeda..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Date;
-import java.util.Map;
-import java.util.UUID;
-
-import net.sf.taverna.t2.activities.interaction.atom.AtomUtils;
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-
-import org.apache.abdera.Abdera;
-import org.apache.abdera.i18n.text.Normalizer;
-import org.apache.abdera.i18n.text.Sanitizer;
-import org.apache.abdera.model.Element;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.parser.stax.FOMElement;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-
-public final class InteractionActivityRunnable implements Runnable {
-
-	private static final Logger logger = Logger
-			.getLogger(InteractionActivityRunnable.class);
-
-	private static final Abdera ABDERA = Abdera.getInstance();
-
-	private final Template presentationTemplate;
-
-	private final InteractionRequestor requestor;
-
-	private CredentialManager credentialManager;
-
-	private InteractionRecorder interactionRecorder;
-	
-	private InteractionUtils interactionUtils;
-
-	private InteractionJetty interactionJetty;
-
-	private InteractionPreference interactionPreference;
-
-	private ResponseFeedListener responseFeedListener;
-
-	private InteractionVelocity interactionVelocity;
-
-	public InteractionActivityRunnable(final InteractionRequestor requestor,
-			final Template presentationTemplate,
-			final CredentialManager credentialManager,
-			final InteractionRecorder interactionRecorder,
-			final InteractionUtils interactionUtils,
-			final InteractionJetty interactionJetty,
-			final InteractionPreference interactionPreference,
-			final ResponseFeedListener responseFeedListener,
-			final InteractionVelocity interactionVelocity) {
-		this.requestor = requestor;
-		this.presentationTemplate = presentationTemplate;
-		this.credentialManager = credentialManager;
-		this.interactionRecorder = interactionRecorder;
-		this.interactionUtils = interactionUtils;
-		this.interactionJetty = interactionJetty;
-		this.interactionPreference = interactionPreference;
-		this.responseFeedListener = responseFeedListener;
-		this.interactionVelocity = interactionVelocity;
-	}
-
-	@Override
-	public void run() {
-		/*
-		 * InvocationContext context = callback.getContext();
-		 */
-		final String runId = InteractionUtils.getUsedRunId(this.requestor
-				.getRunId());
-
-		final String id = Sanitizer.sanitize(UUID.randomUUID().toString(), "",
-				true, Normalizer.Form.D);
-
-		final Map<String, Object> inputData = this.requestor.getInputData();
-
-		if (interactionPreference.getUseJetty()) {
-			interactionJetty.startJettyIfNecessary(credentialManager);
-		}
-		interactionJetty.startListenersIfNecessary();
-		try {
-			interactionUtils.copyFixedFile("pmrpc.js");
-			interactionUtils.copyFixedFile("interaction.css");
-		} catch (final IOException e1) {
-			logger.error(e1);
-			this.requestor.fail("Unable to copy necessary fixed file");
-			return;
-		}
-		synchronized (ABDERA) {
-			final Entry interactionNotificationMessage = this
-					.createBasicInteractionMessage(id, runId);
-
-			for (final String key : inputData.keySet()) {
-				final Object value = inputData.get(key);
-				if (value instanceof byte[]) {
-					final String replacementUrl = interactionPreference
-							.getPublicationUrlString(id, key);
-					final ByteArrayInputStream bais = new ByteArrayInputStream(
-							(byte[]) value);
-					try {
-						interactionUtils.publishFile(replacementUrl, bais,
-								runId, id);
-						bais.close();
-						inputData.put(key, replacementUrl);
-					} catch (final IOException e) {
-						logger.error(e);
-						this.requestor.fail("Unable to publish to " + replacementUrl);
-						return;
-					}
-				}
-			}
-
-			final String inputDataString = this.createInputDataJson(inputData);
-			if (inputDataString == null) {
-				return;
-			}
-			final String inputDataUrl = interactionPreference
-					.getInputDataUrlString(id);
-			try {
-				interactionUtils.publishFile(inputDataUrl, inputDataString,
-						runId, id);
-			} catch (final IOException e) {
-				logger.error(e);
-				this.requestor.fail("Unable to publish to " + inputDataUrl);
-				return;
-			}
-
-			String outputDataUrl = null;
-
-			if (!this.requestor.getInteractionType().equals(
-					InteractionType.Notification)) {
-				outputDataUrl = interactionPreference
-						.getOutputDataUrlString(id);
-			}
-			final String interactionUrlString = this.generateHtml(inputDataUrl,
-					outputDataUrl, inputData, runId, id);
-
-			try {
-				this.postInteractionMessage(id, interactionNotificationMessage,
-						interactionUrlString, runId);
-			} catch (IOException e) {
-				logger.error(e);
-				this.requestor.fail("Unable to post message");
-				return;
-			}
-			if (!this.requestor.getInteractionType().equals(
-					InteractionType.Notification)) {
-				responseFeedListener.registerInteraction(
-						interactionNotificationMessage, this.requestor);
-			} else {
-				this.requestor.carryOn();
-
-			}
-		}
-	}
-
-	private String createInputDataJson(final Map<String, Object> inputData) {
-		try {
-			return InteractionUtils.objectToJson(inputData);
-		} catch (final IOException e) {
-			logger.error(e);
-			this.requestor.fail("Unable to generate JSON");
-		}
-		return null;
-	}
-
-	private Entry createBasicInteractionMessage(final String id,
-			final String runId) {
-		final Entry interactionNotificationMessage = ABDERA.newEntry();
-
-		interactionNotificationMessage.setId(id);
-		final Date timestamp = new Date();
-		interactionNotificationMessage.setPublished(timestamp);
-		interactionNotificationMessage.setUpdated(timestamp);
-
-		interactionNotificationMessage.addAuthor("Taverna");
-		interactionNotificationMessage.setTitle("Interaction from Taverna for "
-				+ this.requestor.generateId());
-
-		final Element runIdElement = interactionNotificationMessage
-				.addExtension(AtomUtils.getRunIdQName());
-		runIdElement.setText(StringEscapeUtils.escapeJavaScript(runId));
-		
-		final Element pathIdElement = interactionNotificationMessage.addExtension(AtomUtils.getPathIdQName());
-		pathIdElement.setText(StringEscapeUtils.escapeJavaScript(this.requestor.getPath()));
-		
-		final Element countElement = interactionNotificationMessage.addExtension(AtomUtils.getCountQName());
-		countElement.setText(StringEscapeUtils.escapeJavaScript(this.requestor.getInvocationCount().toString()));
-		
-		if (this.requestor.getInteractionType().equals(
-				InteractionType.Notification)) {
-			interactionNotificationMessage.addExtension(AtomUtils
-					.getProgressQName());
-		}
-		final Element idElement = interactionNotificationMessage
-				.addExtension(AtomUtils.getIdQName());
-		idElement.setText(id);
-
-		return interactionNotificationMessage;
-	}
-
-	private void postInteractionMessage(final String id, final Entry entry,
-			final String interactionUrlString, final String runId) throws IOException {
-
-		entry.addLink(StringEscapeUtils.escapeXml(interactionUrlString),
-				"presentation");
-		entry.setContentAsXhtml("<p><a href=\""
-				+ StringEscapeUtils.escapeXml(interactionUrlString)
-				+ "\">Open: "
-				+ StringEscapeUtils.escapeXml(interactionUrlString)
-				+ "</a></p>");
-
-		URL feedUrl;
-
-			feedUrl = new URL(interactionPreference
-					.getFeedUrlString());
-			final String entryContent = ((FOMElement) entry)
-					.toFormattedString();
-			final HttpURLConnection httpCon = (HttpURLConnection) feedUrl
-					.openConnection();
-			httpCon.setDoOutput(true);
-			httpCon.setRequestProperty("Content-Type",
-					"application/atom+xml;type=entry;charset=UTF-8");
-			httpCon.setRequestProperty("Content-Length",
-					"" + entryContent.length());
-			httpCon.setRequestProperty("Slug", id);
-			httpCon.setRequestMethod("POST");
-			httpCon.setConnectTimeout(5000);
-			final OutputStream outputStream = httpCon.getOutputStream();
-			IOUtils.write(entryContent, outputStream, "UTF-8");
-			outputStream.close();
-			final int response = httpCon.getResponseCode();
-			if ((response < 0) || (response >= 400)) {
-				logger.error("Received response code" + response);
-				throw (new IOException ("Received response code " + response));
-			}
-			if (response == HttpURLConnection.HTTP_CREATED) {
-				interactionRecorder.addResource(runId, id,
-						httpCon.getHeaderField("Location"));
-			}
-	}
-
-	String generateHtml(final String inputDataUrl, final String outputDataUrl,
-			final Map<String, Object> inputData, final String runId,
-			final String id) {
-
-		final VelocityContext velocityContext = new VelocityContext();
-
-		for (final String inputName : inputData.keySet()) {
-			final Object input = inputData.get(inputName);
-			velocityContext.put(inputName, input);
-		}
-
-		velocityContext.put("feed", interactionPreference
-				.getFeedUrlString());
-		velocityContext.put("runId", runId);
-		velocityContext.put("entryId", id);
-		final String pmrpcUrl = interactionPreference
-				.getLocationUrl() + "/pmrpc.js";
-		velocityContext.put("pmrpcUrl", pmrpcUrl);
-		velocityContext.put("inputDataUrl", inputDataUrl);
-		velocityContext.put("outputDataUrl", outputDataUrl);
-		final String interactionUrl = interactionPreference
-				.getInteractionUrlString(id);
-
-		velocityContext.put("interactionUrl", interactionUrl);
-
-		String presentationUrl = "";
-		final String authorizeUrl = "";
-		try {
-			if (this.requestor.getPresentationType().equals(
-					InteractionActivityType.VelocityTemplate)) {
-
-				presentationUrl = interactionPreference
-						.getPresentationUrlString(id);
-
-				final String presentationString = this.processTemplate(
-						this.presentationTemplate, velocityContext);
-				interactionUtils.publishFile(presentationUrl,
-						presentationString, runId, id);
-
-			} else if (this.requestor.getPresentationType().equals(
-					InteractionActivityType.LocallyPresentedHtml)) {
-				presentationUrl = this.requestor.getPresentationOrigin();
-			}
-
-			velocityContext.put("presentationUrl", presentationUrl);
-
-			final String interactionString = this.processTemplate(
-					interactionVelocity.getInteractionTemplate(),
-					velocityContext);
-			interactionUtils.publishFile(interactionUrl, interactionString,
-					runId, id);
-
-			if (!authorizeUrl.isEmpty()) {
-				return authorizeUrl;
-			}
-			return interactionUrl;
-		} catch (final IOException e) {
-			logger.error(e);
-			this.requestor.fail("Unable to generate HTML");
-			return null;
-		}
-	}
-
-	private String processTemplate(final Template template,
-			final VelocityContext context) throws IOException {
-		final StringWriter resultWriter = new StringWriter();
-		template.merge(context, resultWriter);
-		resultWriter.close();
-		return resultWriter.toString();
-	}
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
deleted file mode 100644
index 63bc001..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-/**
- * @author alanrw
- * 
- *         Should be renamed something like presentation type
- */
-public enum InteractionActivityType {
-
-	VelocityTemplate, LocallyPresentedHtml
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/433612be/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
----------------------------------------------------------------------
diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
deleted file mode 100644
index f7445a8..0000000
--- a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.taverna.t2.invocation.InvocationContext;
-import net.sf.taverna.t2.reference.ReferenceService;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.WorkflowRunIdEntity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityOutputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback;
-
-/**
- * @author alanrw
- * 
- */
-public class InteractionCallbackRequestor implements InteractionRequestor {
-
-	private final AsynchronousActivityCallback callback;
-
-	private final Map<String, T2Reference> inputs;
-
-	private final InteractionActivity activity;
-
-	private boolean answered = false;
-
-	private String path;
-
-	private Integer count;
-	
-	private static Map<String, Integer> invocationCount = new HashMap<String, Integer> ();
-
-	public InteractionCallbackRequestor(final InteractionActivity activity,
-			final AsynchronousActivityCallback callback,
-			final Map<String, T2Reference> inputs) {
-		this.activity = activity;
-		this.callback = callback;
-		this.inputs = inputs;
-		this.path = calculatePath();
-		this.count = calculateInvocationCount(path);
-	}
-
-	@Override
-	public String getRunId() {
-		return this.callback.getContext()
-				.getEntities(WorkflowRunIdEntity.class).get(0)
-				.getWorkflowRunId();
-	}
-
-	@Override
-	public Map<String, Object> getInputData() {
-		final Map<String, Object> inputData = new HashMap<String, Object>();
-
-		final InvocationContext context = this.callback.getContext();
-		final ReferenceService referenceService = context.getReferenceService();
-		for (final String inputName : this.inputs.keySet()) {
-			final Object input = referenceService.renderIdentifier(this.inputs
-					.get(inputName), this.getInputPort(inputName)
-					.getTranslatedElementClass(), this.callback.getContext());
-			inputData.put(inputName, input);
-		}
-		return inputData;
-	}
-
-	public ActivityInputPort getInputPort(final String name) {
-		for (final ActivityInputPort port : this.activity.getInputPorts()) {
-			if (port.getName().equals(name)) {
-				return port;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public void fail(final String string) {
-		if (this.answered) {
-			return;
-		}
-		this.callback.fail(string);
-		this.answered = true;
-	}
-
-	@Override
-	public void carryOn() {
-		if (this.answered) {
-			return;
-		}
-		this.callback.receiveResult(new HashMap<String, T2Reference>(),
-				new int[0]);
-		this.answered = true;
-	}
-
-	@Override
-	public String generateId() {
-		final String workflowRunId = getRunId();
-		final String parentProcessIdentifier = this.callback
-				.getParentProcessIdentifier();
-		return (workflowRunId + ":" + parentProcessIdentifier);
-	}
-
-	@Override
-	public InteractionType getInteractionType() {
-		if (this.activity.isProgressNotification()) {
-			return InteractionType.Notification;
-		}
-		return InteractionType.DataRequest;
-	}
-
-	@Override
-	public InteractionActivityType getPresentationType() {
-		return this.activity.getInteractionActivityType();
-	}
-
-	@Override
-	public String getPresentationOrigin() {
-		return this.activity.getPresentationOrigin();
-	}
-
-	@Override
-	public void receiveResult(final Map<String, Object> resultMap) {
-		if (this.answered) {
-			return;
-		}
-		final Map<String, T2Reference> outputs = new HashMap<String, T2Reference>();
-
-		final InvocationContext context = this.callback.getContext();
-		final ReferenceService referenceService = context.getReferenceService();
-
-		for (final Object key : resultMap.keySet()) {
-			final String keyString = (String) key;
-			final Object value = resultMap.get(key);
-			final Integer depth = this.findPortDepth(keyString);
-			if (depth == null) {
-				this.callback.fail("Data sent for unknown port : " + keyString);
-			}
-			outputs.put(keyString,
-					referenceService.register(value, depth, true, context));
-		}
-		this.callback.receiveResult(outputs, new int[0]);
-		this.answered = true;
-	}
-
-	private Integer findPortDepth(final String portName) {
-		final Set<ActivityOutputPort> ports = this.activity.getOutputPorts();
-		for (final ActivityOutputPort op : ports) {
-			if (op.getName().equals(portName)) {
-				return op.getDepth();
-			}
-		}
-		return null;
-	}
-
-	private String calculatePath() {
-		final String parentProcessIdentifier = this.callback
-				.getParentProcessIdentifier();
-		String result = "";
-		String parts[] = parentProcessIdentifier.split(":");
-
-		for (int i = 2; i < parts.length; i += 4) {
-			if (!result.isEmpty()) {
-				result += ":";
-			}
-			result += parts[i];
-		}
-		return result;
-	}
-
-	@Override
-	public String getPath() {
-		return this.path;
-	}
-	
-	private synchronized static Integer calculateInvocationCount(String path) {
-		Integer currentCount = invocationCount.get(path);
-		if (currentCount == null) {
-			currentCount = Integer.valueOf(0);
-		} else {
-			currentCount = currentCount + 1;
-		}
-		invocationCount.put(path, currentCount);
-		return currentCount;
-	}
-
-	@Override
-	public Integer getInvocationCount() {
-		return count;
-	}
-}