You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2016/05/04 02:01:23 UTC

[4/8] incubator-taverna-common-activities git commit: TAVERNA-963 package taverna.externaltool.*

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/local/LocalUseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/local/LocalUseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/local/LocalUseCaseInvocation.java
deleted file mode 100755
index 612a487..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/local/LocalUseCaseInvocation.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.local;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-
-import org.apache.taverna.reference.AbstractExternalReference;
-import org.apache.taverna.reference.ErrorDocument;
-import org.apache.taverna.reference.ExternalReferenceSPI;
-import org.apache.taverna.reference.Identified;
-import org.apache.taverna.reference.ReferenceService;
-import org.apache.taverna.reference.ReferenceSet;
-import org.apache.taverna.reference.ReferencedDataNature;
-import org.apache.taverna.reference.T2Reference;
-import org.apache.taverna.reference.impl.external.file.FileReference;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInput;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptOutput;
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.InvocationException;
-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.SshUrl;
-
-/**
- * The job is executed locally, i.e. not via the grid.
- * @author Hajo Krabbenhoeft
- */
-public class LocalUseCaseInvocation extends UseCaseInvocation {
-
-	private static Logger logger = Logger.getLogger(LocalUseCaseInvocation.class);
-
-	private final File tempDir;
-	
-	public static String LOCAL_USE_CASE_INVOCATION_TYPE = "789663B8-DA91-428A-9F7D-B3F3DA185FD4";
-	
-	private Process running;
-
-	private final String shellPrefix;
-
-	private final String linkCommand;
-
-	private Reader stdInReader = null;
-	
-	private static Map<String, Set<String>> runIdToTempDir = Collections.synchronizedMap(new HashMap<String, Set<String>> ());
-	
-	private static String LOCAL_INVOCATION_FILE = "localInvocations";
-
-	public LocalUseCaseInvocation(UseCaseDescription desc, boolean retrieveData, String mainTempDirectory, String shellPrefix, String linkCommand) throws IOException {
-
-		usecase = desc;
-		setRetrieveData(retrieveData);
-		this.shellPrefix = shellPrefix;
-		this.linkCommand = linkCommand;
-		
-		if (mainTempDirectory != null) {
-		
-			File mainTempDir = new File(mainTempDirectory);
-
-			tempDir = File.createTempFile("usecase", "dir", mainTempDir);
-		} else {
-			tempDir = File.createTempFile("usecase", "dir");
-		}
-		tempDir.delete();
-		tempDir.mkdir();
-		logger.info("mainTempDirectory is " + mainTempDirectory);
-		logger.info("Using tempDir " + tempDir.getAbsolutePath());
-
-	}
-
-	void recDel(File c) {
-		File[] files = c.listFiles();
-		if (files != null) {
-			for (File cc : files)
-				recDel(cc);
-		}
-		c.delete();
-	}
-	
-	private String setOneBinaryInput(ReferenceService referenceService,
-			T2Reference t2Reference, ScriptInput input, String targetSuffix)
-			throws InvocationException {
-
-		if (input.isFile() || input.isTempFile()) {
-			// Try to get it as a file
-			String target = tempDir.getAbsolutePath() + "/" + targetSuffix;
-			FileReference fileRef = getAsFileReference(referenceService,
-					t2Reference);
-			if (fileRef != null) {
-
-				if (!input.isForceCopy()) {
-					if (linkCommand != null) {
-						String source = fileRef.getFile().getAbsolutePath();
-						String actualLinkCommand = getActualOsCommand(
-								linkCommand, source, targetSuffix, target);
-						logger.info("Link command is " + actualLinkCommand);
-						String[] splitCmds = actualLinkCommand.split(" ");
-						ProcessBuilder builder = new ProcessBuilder(splitCmds);
-						builder.directory(tempDir);
-						try {
-							int code = builder.start().waitFor();
-							if (code == 0) {
-								return target;
-							} else {
-								logger.error("Link command gave errorcode: "
-										+ code);
-							}
-
-						} catch (InterruptedException e) {
-							// go through
-						} catch (IOException e) {
-							// go through
-						}
-
-					}
-				}
-			}
-
-			InputStream is = null;
-			OutputStream os = null;
-			is = getAsStream(referenceService, t2Reference);
-
-			try {
-				os = new FileOutputStream(target);
-			} catch (FileNotFoundException e) {
-				throw new InvocationException(e);
-			}
-
-			try {
-				IOUtils.copyLarge(is, os);
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-			try {
-				is.close();
-				os.close();
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-			return target;
-		} else {
-			String value = (String) referenceService.renderIdentifier(
-					t2Reference, String.class, this.getContext());
-			return value;
-		}
-	}
-	
-	@Override
-	public String setOneInput(ReferenceService referenceService,
-			T2Reference t2Reference, ScriptInput input)
-			throws InvocationException {
-
-		if (input.getCharsetName() == null) {
-			input.setCharsetName(Charset.defaultCharset().name());
-		}
-		String target = null;
-		String targetSuffix = null;
-		if (input.isFile()) {
-			targetSuffix = input.getTag();
-		} else if (input.isTempFile()) {
-			targetSuffix = "tempfile." + (nTempFiles++) + ".tmp";
-		}
-
-		if (input.isBinary()) {
-			return setOneBinaryInput(referenceService, t2Reference, input,
-					targetSuffix);
-		}
-
-		logger.info("Target is " + target);
-		if (input.isFile() || input.isTempFile()) {
-			target = tempDir.getAbsolutePath() + "/" + targetSuffix;
-			// Try to get it as a file
-			Reader r;
-			Writer w;
-			FileReference fileRef = getAsFileReference(referenceService,
-					t2Reference);
-			if (fileRef != null) {
-
-				if (!input.isForceCopy()) {
-					if (linkCommand != null) {
-						String source = fileRef.getFile().getAbsolutePath();
-						String actualLinkCommand = getActualOsCommand(
-								linkCommand, source, targetSuffix, target);
-						logger.info("Link command is " + actualLinkCommand);
-						String[] splitCmds = actualLinkCommand.split(" ");
-						ProcessBuilder builder = new ProcessBuilder(splitCmds);
-						builder.directory(tempDir);
-						try {
-							int code = builder.start().waitFor();
-							if (code == 0) {
-								return target;
-							} else {
-								logger.error("Link command gave errorcode: "
-										+ code);
-							}
-
-						} catch (InterruptedException e) {
-							// go through
-						} catch (IOException e) {
-							// go through
-						}
-
-					}
-				}
-
-				if (fileRef.getDataNature().equals(ReferencedDataNature.TEXT)) {
-					r = new InputStreamReader(fileRef.openStream(this
-							.getContext()), Charset.forName(fileRef
-							.getCharset()));
-				} else {
-					try {
-						r = new FileReader(fileRef.getFile());
-					} catch (FileNotFoundException e) {
-						throw new InvocationException(e);
-					}
-				}
-			} else {
-				r = new InputStreamReader(getAsStream(referenceService,
-						t2Reference));
-			}
-			try {
-				w = new OutputStreamWriter(new FileOutputStream(target), input
-						.getCharsetName());
-			} catch (UnsupportedEncodingException e) {
-				throw new InvocationException(e);
-			} catch (FileNotFoundException e) {
-				throw new InvocationException(e);
-			}
-			try {
-				IOUtils.copyLarge(r, w);
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-			try {
-				r.close();
-				w.close();
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-			return target;
-		} else {
-			String value = (String) referenceService.renderIdentifier(
-					t2Reference, String.class, this.getContext());
-			return value;
-		}
-	}
-	
-	private void forgetRun() {
-		Set<String> directories = runIdToTempDir.get(getRunId());
-		try {
-			directories.remove(tempDir.getCanonicalPath());
-		} catch (IOException e) {
-			logger.error(e);
-		}
-	}
-
-	private static void deleteDirectory(String location) {
-		try {
-			FileUtils.deleteDirectory(new File(location));
-		} catch (IOException e) {
-			logger.error("Problem deleting " + location, e);
-		}
-	}
-	
-	public static void cleanup(String runId) {
-		Set<String> tempDirectories = runIdToTempDir.get(runId);
-		if (tempDirectories != null) {
-			for (String tempDir : tempDirectories) {
-				deleteDirectory(tempDir);
-			}
-			runIdToTempDir.remove(runId);
-		}
-	}
-	
-	@Override
-	protected void submit_generate_job_inner() throws InvocationException {
-		tags.put("uniqueID", "" + getSubmissionID());
-		String command = usecase.getCommand();
-		for (String cur : tags.keySet()) {
-		    command = command.replaceAll("\\Q%%" + cur + "%%\\E", Matcher.quoteReplacement(tags.get(cur)));
-		}
-
-		List<String> cmds = new ArrayList<String>();
-		if ((shellPrefix != null) && !shellPrefix.isEmpty()) {
-			String[] prefixCmds = shellPrefix.split(" ");
-			for (int i = 0; i < prefixCmds.length; i++) {
-				cmds.add(prefixCmds[i]);
-			}
-			cmds.add(command);
-		} else {
-			String[] splitCmds = command.split(" ");
-			for (int i = 0; i < splitCmds.length; i++) {
-				cmds.add(splitCmds[i]);
-			}
-		}
-	
-		ProcessBuilder builder = new ProcessBuilder(cmds);
-		builder.directory(tempDir);
-
-		for (int i = 0; i < cmds.size(); i++) {
-			logger.info("cmds[" + i + "] = " + cmds.get(i));
-		}
-		logger.info("Command is " + command + " in directory " + tempDir);
-		try {
-			running = builder.start();
-			if (stdInReader != null) {
-				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(running.getOutputStream()));
-				IOUtils.copyLarge(stdInReader, writer);
-				writer.close();
-			}
-		} catch (IOException e) {
-			throw new InvocationException(e);
-		}
-	}
-
-	private void copy_stream(InputStream read, OutputStream write) throws IOException {
-		int a = read.available();
-		if (a > 0) {
-			byte[] buf = new byte[a];
-			read.read(buf);
-			write.write(buf);
-		}
-	}
-
-	@Override
-	public HashMap<String, Object> submit_wait_fetch_results(ReferenceService referenceService) throws InvocationException {
-		ByteArrayOutputStream stdout_buf = new ByteArrayOutputStream();
-		ByteArrayOutputStream stderr_buf = new ByteArrayOutputStream();
-		while (true) {
-			try {
-				copy_stream(running.getInputStream(), stdout_buf);
-				copy_stream(running.getErrorStream(), stderr_buf);
-			} catch (IOException e1) {
-				throw new InvocationException(e1);
-			}
-			try {
-				int exitcode = running.exitValue();
-				if (!usecase.getValidReturnCodes().contains(exitcode)) {
-					try {
-						throw new InvocationException("Invalid exit code " + exitcode + ":" + stderr_buf.toString("US-ASCII"));
-					} catch (UnsupportedEncodingException e) {
-						throw new InvocationException("Invalid exit code " + exitcode + ":" + stderr_buf.toString());
-					}
-				}
-				else
-					break;
-			} catch (IllegalThreadStateException e) {
-
-				try {
-					Thread.sleep(100);
-				} catch (InterruptedException e1) {
-					throw new InvocationException(e);
-				}
-
-			}
-		}
-
-		HashMap<String, Object> results = new HashMap<String, Object>();
-			results.put("STDOUT", stdout_buf.toByteArray());
-			results.put("STDERR", stderr_buf.toByteArray());
-
-		for (Map.Entry<String, ScriptOutput> cur : usecase.getOutputs().entrySet()) {
-			ScriptOutput scriptOutput = cur.getValue();
-			File result = new File(tempDir.getAbsoluteFile() + "/" + cur.getValue().getPath());
-			if (result.exists()) {
-				AbstractExternalReference ref;
-				if (isRetrieveData()) {
-					FileInputStream is;
-					try {
-						is = new FileInputStream(result);
-					} catch (FileNotFoundException e) {
-						throw new InvocationException(e);
-					}
-					if (scriptOutput.isBinary()) {
-						ref = inlineByteArrayReferenceBuilder.createReference(is, null);
-					} else {
-						ref = inlineStringReferenceBuilder.createReference(is, null);
-					}
-					try {
-						is.close();
-					} catch (IOException e) {
-						throw new InvocationException(e);
-					}
-				}
-				else {
-					ref = new FileReference(result);
-					if (scriptOutput.isBinary()) {
-						((FileReference) ref)
-								.setDataNature(ReferencedDataNature.BINARY);
-					} else {
-						((FileReference) ref)
-								.setDataNature(ReferencedDataNature.TEXT);
-						((FileReference) ref).setCharset("UTF-8");
-					}
-				}
-				results.put(cur.getKey(), ref);
-			} else {
-				ErrorDocument ed = referenceService.getErrorDocumentService().registerError("No result for " + cur.getKey(), 0, getContext());
-				results.put(cur.getKey(), ed);
-			}
-		}
-		
-		if (isRetrieveData()) {
-			forgetRun();
-			try {
-				deleteDirectory(tempDir.getCanonicalPath());
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-		}
-
-		return results;
-	}
-
-	private FileReference getAsFileReference(ReferenceService referenceService, T2Reference t2Reference) {
-		Identified identified = referenceService.resolveIdentifier(t2Reference, null, null);
-		if (identified instanceof ReferenceSet) {
-			for (ExternalReferenceSPI ref : ((ReferenceSet) identified).getExternalReferences()) {
-				if (ref instanceof FileReference) {
-					return (FileReference) ref;
-				}
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public void setStdIn(ReferenceService referenceService,
-			T2Reference t2Reference) {
-		stdInReader = new BufferedReader(new InputStreamReader(getAsStream(referenceService, t2Reference)));
-	}
-
-	@Override
-	public void rememberRun(String runId) {
-		this.setRunId(runId);
-		Set<String> directories = runIdToTempDir.get(runId);
-		if (directories == null) {
-			directories = Collections.synchronizedSet(new HashSet<String> ());
-			runIdToTempDir.put(runId, directories);
-		}
-		try {
-			directories.add(tempDir.getCanonicalPath());
-		} catch (IOException e) {
-			logger.error("Unable to record temporary directory: " + tempDir, e);
-		}
-	}
-
-	public static void load(File directory) {
-		File invocationsFile = new File(directory, LOCAL_INVOCATION_FILE);
-		if (!invocationsFile.exists()) {
-			return;
-		}
-		BufferedReader reader = null;
-		try {
-			reader = new BufferedReader(new FileReader(invocationsFile));
-			String line = reader.readLine();
-			while (line != null) {
-				String[] parts = line.split(" ");
-				if (parts.length != 2) {
-					break;
-				}
-				String runId = parts[0];
-				String tempDirString = parts[1];
-				Set<String> tempDirs = runIdToTempDir.get(runId);
-				if (tempDirs == null) {
-					tempDirs = new HashSet<String>();
-					runIdToTempDir.put(runId, tempDirs);
-				}
-				tempDirs.add(tempDirString);
-				line = reader.readLine();
-			}
-		} catch (FileNotFoundException e) {
-			logger.error(e);
-		} catch (IOException e) {
-			logger.error(e);
-		} finally {
-			if (reader != null) {
-				try {
-					reader.close();
-				} catch (IOException e) {
-					logger.error(e);
-				}
-			}
-		}
-	}
-
-	public static void persist(File directory) {
-		File invocationsFile = new File(directory, LOCAL_INVOCATION_FILE);
-		BufferedWriter writer = null;
-		try {
-			writer = new BufferedWriter(new FileWriter(invocationsFile));
-			for (String runId : runIdToTempDir.keySet()) {
-				for (String tempDir : runIdToTempDir.get(runId)) {
-					writer.write(runId);
-					writer.write(" ");
-					writer.write(tempDir);
-					writer.newLine();
-				}
-			}
-		} catch (IOException e) {
-			logger.error(e);
-		} finally {
-			if (writer != null) {
-				try {
-					writer.close();
-				} catch (IOException e) {
-					logger.error(e);
-				}
-			}
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshAutoLoginTrustEveryone.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshAutoLoginTrustEveryone.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshAutoLoginTrustEveryone.java
deleted file mode 100644
index ec9c15c..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshAutoLoginTrustEveryone.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import org.apache.log4j.Logger;
-
-import com.jcraft.jsch.UIKeyboardInteractive;
-import com.jcraft.jsch.UserInfo;
-
-import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
-
-final class SshAutoLoginTrustEveryone implements UserInfo, UIKeyboardInteractive {
-	
-	private static Logger logger = Logger.getLogger(SshAutoLoginTrustEveryone.class);
-
-	private final AskUserForPw askUserForPw;
-
-	public SshAutoLoginTrustEveryone(AskUserForPw askUserForPw) {
-		super();
-		this.askUserForPw = askUserForPw;
-	}
-
-	public void showMessage(String arg0) {
-		logger.info(arg0);
-	}
-
-	public boolean promptYesNo(String arg0) {
-		if (arg0.startsWith("The authenticity of host"))
-			return true;
-		return false;
-	}
-
-	public boolean promptPassword(String arg0) {
-		return true;
-	}
-
-	public boolean promptPassphrase(String arg0) {
-		return true;
-	}
-
-	public String getPassword() {
-		return askUserForPw.getPassword();
-	}
-
-	public String getPassphrase() {
-		return askUserForPw.getPassphrase();
-	}
-
-	public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) {
-		if (prompt.length >= 1 && prompt[0].toLowerCase().startsWith("password"))
-			return new String[] { askUserForPw.getPassword() };
-		return null;
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNode.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNode.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNode.java
deleted file mode 100644
index 6bc122a..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNode.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
-
-public class SshNode {
-	
-    public static String DEFAULT_HOST = "127.0.0.1";
-    public static int DEFAULT_PORT = 22;
-    public static String DEFAULT_DIRECTORY = "/tmp/";
-
-    private String host = DEFAULT_HOST;
-    private int port = DEFAULT_PORT;
-    private String directory = DEFAULT_DIRECTORY;
-	
-	private SshUrl url;
-	
-	private String linkCommand = null;
-	private String copyCommand = null;
-	private boolean retrieveData = false;
-
-	/**
-	 * 
-	 */
-	SshNode() {
-		super();
-		linkCommand = InvocationMechanism.UNIX_LINK;
-		copyCommand = InvocationMechanism.UNIX_COPY;
-		
-	}
-	/**
-	 * @param directory the directory to set
-	 */
-	public void setDirectory(String directory) {
-		if ((directory != null) && !directory.isEmpty()) {
-			if (!directory.endsWith("/")) {
-				directory = directory + "/";
-			}
-			this.directory = directory;
-		}
-	}
-
-	/**
-	 * @return the directory
-	 */
-	public String getDirectory() {
-		return directory;
-	}
-
-	/**
-	 * @param host the host to set
-	 */
-	public void setHost(String host) {
-		this.host = host;
-	}
-
-	/**
-	 * @return the host
-	 */
-	public String getHost() {
-		return host;
-	}
-
-	/**
-	 * @param port the port to set
-	 */
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	/**
-	 * @return the port
-	 */
-	public int getPort() {
-		return port;
-	}
-	
-	SshUrl getUrl() {
-		if (url == null) {
-			url = new SshUrl(this);
-		}
-		return url;
-	}
-	
-	public int hashCode() {
-		return getUrl().hashCode();	
-	}
-
-	public boolean equals(Object obj) {
-		if ((obj == null) || !(obj instanceof SshNode)) {
-			return false;
-		}
-		return (this.hashCode() == obj.hashCode());
-	}
-	/**
-	 * @return the linkCommand
-	 */
-	public String getLinkCommand() {
-		return linkCommand;
-	}
-	/**
-	 * @param linkCommand the linkCommand to set
-	 */
-	public void setLinkCommand(String linkCommand) {
-		if ((linkCommand != null) && linkCommand.isEmpty()) {
-			this.linkCommand = null;
-		} else {
-			this.linkCommand = linkCommand;
-		}	}
-	/**
-	 * @return the copyCommand
-	 */
-	public String getCopyCommand() {
-		return copyCommand;
-	}
-	/**
-	 * @param copyCommand the copyCommand to set
-	 */
-	public void setCopyCommand(String copyCommand) {
-		if ((copyCommand != null) && copyCommand.isEmpty()) {
-			this.copyCommand = null;
-		} else {
-			this.copyCommand = copyCommand;
-		}
-	}
-	
-	/**
-	 * @return the retrieveData
-	 */
-	public boolean isRetrieveData() {
-		return retrieveData;
-	}
-	/**
-	 * @param retrieveData the retrieveData to set
-	 */
-	public void setRetrieveData(boolean retrieveData) {
-		this.retrieveData = retrieveData;
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNodeFactory.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNodeFactory.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNodeFactory.java
deleted file mode 100644
index bb9a16e..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshNodeFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-public class SshNodeFactory {
-	
-	private Map<String, SshNode> nodeMap = Collections.synchronizedMap(new HashMap<String, SshNode> ());
-	
-	private static SshNodeFactory INSTANCE = new SshNodeFactory();
-	
-	private SshNode defaultNode;
-	
-	private SshNodeFactory() {
-		defaultNode = getSshNode(SshNode.DEFAULT_HOST, SshNode.DEFAULT_PORT, SshNode.DEFAULT_DIRECTORY);
-	}
-
-	public SshNode getDefaultNode() {
-		return defaultNode;
-	}
-
-	public static SshNodeFactory getInstance() {
-		return INSTANCE;
-	}
-	
-	public SshNode getSshNode(String host, int port, String directory) {
-		String url = makeUrl(host, port, directory);
-		if (nodeMap.containsKey(url)) {
-			return nodeMap.get(url);
-		}
-		else {
-			SshNode newNode = new SshNode();
-			newNode.setHost(host);
-			newNode.setPort(port);
-			newNode.setDirectory(directory);
-			nodeMap.put(url, newNode);
-			return newNode;
-		}
-	}
-	
-	public boolean containsSshNode(String host, int port, String directory) {
-		return nodeMap.containsKey(makeUrl(host, port, directory));
-	}
-	
-	public static String makeUrl(String host, int port, String directory) {
-		return ("ssh://" + host + ":" + port + directory);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshPool.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshPool.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshPool.java
deleted file mode 100755
index 3eac767..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshPool.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-
-import de.uni_luebeck.inb.knowarc.usecases.RuntimeEnvironmentConstraint;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
-
-public class SshPool {
-	
-	private static Logger logger = Logger.getLogger(SshPool.class);
-
-	
-	private static JSch jsch = new JSch();
-	
-    private static int CONNECT_TIMEOUT = 10000; // milliseconds
-
-	private static Map<SshNode, Session> sessionMap = Collections.synchronizedMap(new HashMap<SshNode, Session> ());
-	private static Map<Session, ChannelSftp> sftpGetMap = Collections.synchronizedMap(new HashMap<Session, ChannelSftp> ());
-	private static Map<Session, ChannelSftp> sftpPutMap = Collections.synchronizedMap(new HashMap<Session, ChannelSftp> ());
-	
-	public static Session getSshSession(final SshUrl sshUrl, final AskUserForPw askUserForPw) throws JSchException {
-		return getSshSession(sshUrl.getSshNode(), askUserForPw);
-	}
-	
-	public static synchronized Session getSshSession(final SshNode sshNode, final AskUserForPw askUserForPw) throws JSchException {
-
-		Session s = sessionMap.get(sshNode);
-		if ((s != null) && s.isConnected()) {
-			logger.info("Reusing session");
-			return s;
-		}
-		if (s != null) {
-			logger.info("Session was not connected");
-		}
-		if (s == null) {
-			logger.info("No session found for " + sshNode.toString());
-		}
-
-		if (askUserForPw.getKeyfile().length() > 0) {
-			jsch.addIdentity(askUserForPw.getKeyfile());
-		}
-		logger.info("Using host is " + sshNode.getHost() + " and port " + sshNode.getPort());
-		Session sshSession = jsch.getSession(askUserForPw.getUsername(), sshNode.getHost(), sshNode.getPort());
-		sshSession.setUserInfo(new SshAutoLoginTrustEveryone(askUserForPw));
-		sshSession.connect(CONNECT_TIMEOUT);
-		
-		askUserForPw.authenticationSucceeded();
-		sessionMap.put(sshNode, sshSession);
-		if (sshSession == null) {
-			logger.error("Returning a null session");
-		}
-		return sshSession;
-	}
-	
-	public static ChannelSftp getSftpGetChannel(SshNode sshNode, final AskUserForPw askUserForPw) throws JSchException {
-		return getSftpGetChannel(getSshSession(sshNode, askUserForPw));
-	}
-
-	private static synchronized ChannelSftp getSftpGetChannel(Session session) throws JSchException {
-		ChannelSftp result = sftpGetMap.get(session);
-		if (!session.isConnected()) {
-			logger.warn("Session is not connected");
-		}
-		if (result == null) {
-			logger.info("Creating new sftp channel");
-			result = (ChannelSftp) session.openChannel("sftp");
-			sftpGetMap.put(session, result);
-		}
-		else {
-			logger.info("Reusing sftp channel");			
-		}
-		if (!result.isConnected()) {
-			logger.info("Connecting");
-			result.connect();
-		} else {
-			logger.info("Already connected");
-		}
-		return result;
-	}
-	
-	public static ChannelSftp getSftpPutChannel(SshNode sshNode, final AskUserForPw askUserForPw) throws JSchException {
-		return getSftpPutChannel(getSshSession(sshNode, askUserForPw));
-	}
-
-	private static synchronized ChannelSftp getSftpPutChannel(Session session) throws JSchException {
-	    ChannelSftp result = null;
-	    synchronized(sftpPutMap) {
-		result = sftpPutMap.get(session);
-		if (!session.isConnected()) {
-			logger.info("Session is not connected");
-		}
-		if (result == null) {
-			logger.info("Creating new sftp channel");
-			result = (ChannelSftp) session.openChannel("sftp");
-			sftpPutMap.put(session, result);
-		}
-		else {
-			logger.info("Reusing sftp channel");			
-		}
-	    }
-	    if (!result.isConnected()) {
-		logger.info("Connecting");
-		result.connect(CONNECT_TIMEOUT);
-	    } else {
-		logger.info("Already connected");
-	    }
-	    return result;
-	}
-	
-	public static synchronized ChannelExec openExecChannel(SshNode sshNode, final AskUserForPw askUserForPw) throws JSchException {
-		return (ChannelExec) getSshSession(sshNode, askUserForPw).openChannel("exec");
-	}
-
-	private static synchronized ChannelExec openExecChannel(Session session) throws JSchException {
-		return (ChannelExec) session.openChannel("exec");
-	}
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.java
deleted file mode 100644
index b401c0f..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import java.io.InputStream;
-
-import org.apache.taverna.activities.externaltool.RetrieveLoginFromTaverna;
-import org.apache.taverna.reference.AbstractExternalReference;
-import org.apache.taverna.reference.DereferenceException;
-import org.apache.taverna.reference.ExternalReferenceSPI;
-import org.apache.taverna.reference.ReferenceContext;
-import org.apache.taverna.security.credentialmanager.CredentialManager;
-import org.apache.taverna.reference.ReferencedDataNature;
-
-import org.apache.log4j.Logger;
-
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.SftpException;
-
-/**
- * @author alanrw
- *
- */
-public class SshReference extends AbstractExternalReference implements
-	ExternalReferenceSPI {
-
-	private static Logger logger = Logger.getLogger(SshReference.class);
-
-
-	private String host = "127.0.0.1";
-	private int port = 22;
-	private String directory = "/tmp/";
-	private String subDirectory;
-	private String fileName;
-
-	private CredentialManager credentialManager;
-
-	private int dataNatureInteger = ReferencedDataNature.UNKNOWN.ordinal();
-	private String charset = "UTF-8";
-	
-	public SshReference() {
-		super();
-	}
-
-	public SshReference(SshUrl url) {
-		super();
-		this.host = url.getSshNode().getHost();
-		this.port = url.getSshNode().getPort();
-		this.directory = url.getSshNode().getDirectory();
-		this.subDirectory = url.getSubDirectory();
-		this.fileName = url.getFileName();
-		this.setDataNature(url.getDataNature());
-		this.setCharset(url.getCharset());
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.reference.ExternalReferenceSPI#getApproximateSizeInBytes()
-	 */
-	@Override
-	public Long getApproximateSizeInBytes() {
-		return 10000L;
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.reference.ExternalReferenceSPI#openStream(net.sf.taverna.t2.reference.ReferenceContext)
-	 */
-	@Override
-	public InputStream openStream(ReferenceContext context)
-			throws DereferenceException {
-		try {
-			SshNode node = SshNodeFactory.getInstance().getSshNode(this.getHost(), this.getPort(), this.getDirectory());
-			String fullPath = getDirectory() +  getSubDirectory() + "/" + getFileName();
-			ChannelSftp channel = SshPool.getSftpGetChannel(node, new RetrieveLoginFromTaverna(new SshUrl(node).toString(), credentialManager));
-			logger.info("Opening stream on " + fullPath);
-			return (channel.get(fullPath));
-		} catch (JSchException e) {
-			//TODO
-			logger.error(e);
-		} catch (SftpException e) {
-			// TODO Auto-generated catch block
-			logger.error(e);
-		}
-		return null;
-	}
-
-	/**
-	 * @return the host
-	 */
-	public String getHost() {
-		return host;
-	}
-
-	/**
-	 * @param host the host to set
-	 */
-	public void setHost(String host) {
-		this.host = host;
-	}
-
-	/**
-	 * @return the port
-	 */
-	public int getPort() {
-		return port;
-	}
-
-	/**
-	 * @param port the port to set
-	 */
-	public void setPort(int port) {
-		this.port = port;
-	}
-
-	/**
-	 * @return the directory
-	 */
-	public String getDirectory() {
-		return directory;
-	}
-
-	/**
-	 * @param directory the directory to set
-	 */
-	public void setDirectory(String directory) {
-		this.directory = directory;
-	}
-
-	/**
-	 * @return the subDirectory
-	 */
-	public String getSubDirectory() {
-		return subDirectory;
-	}
-
-	/**
-	 * @param subDirectory the subDirectory to set
-	 */
-	public void setSubDirectory(String subDirectory) {
-		this.subDirectory = subDirectory;
-	}
-
-	/**
-	 * @return the fileName
-	 */
-	public String getFileName() {
-		return fileName;
-	}
-
-	/**
-	 * @param fileName the fileName to set
-	 */
-	public void setFileName(String fileName) {
-		this.fileName = fileName;
-	}
-
-	public String getFullPath() {
-		return getDirectory() + "/" + getSubDirectory() + "/" + getFileName();
-	}
-	
-	public ReferencedDataNature getDataNature() {
-		return ReferencedDataNature.values()[dataNatureInteger];
-	}
-
-	public void setDataNature(ReferencedDataNature dataNature) {
-		this.dataNatureInteger = dataNature.ordinal();
-	}
-
-	public String getCharset() {
-		return charset;
-	}
-
-	public void setCredentialManager(CredentialManager credentialManager) {
-		this.credentialManager = credentialManager;
-	}
-
-	public void setCharset(String charset) {
-		this.charset = charset;
-	}
-
-	/**
-	 * @return the dataNatureInteger
-	 */
-	public int getDataNatureInteger() {
-		return dataNatureInteger;
-	}
-
-	/**
-	 * @param dataNatureInteger the dataNatureInteger to set
-	 */
-	public void setDataNatureInteger(int dataNatureInteger) {
-		this.dataNatureInteger = dataNatureInteger;
-	}
-	
-	public SshReference clone() {
-		SshReference result = new SshReference();
-		result.setHost(this.getHost());
-		result.setPort(this.getPort());
-		result.setDirectory(this.getDirectory());
-		result.setSubDirectory(this.getSubDirectory());
-		result.setFileName(this.getFileName());
-		result.setDataNature(this.getDataNature());
-		result.setCharset(this.getCharset());
-		return result;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrl.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrl.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrl.java
deleted file mode 100644
index ae40ead..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrl.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import org.apache.taverna.reference.ReferencedDataNature;
-
-public class SshUrl {
-	
-	private SshNode sshNode;
-	private String subDirectory;
-	private String fileName;
-
-	private ReferencedDataNature dataNature = ReferencedDataNature.UNKNOWN;
-	private String charset = "UTF-8";
-	
-
-	public SshUrl(SshNode sshNode) {
-		this.setSshNode(sshNode);
-	}
-	
-
-	/**
-	 * @return the host
-	 */
-	public String getHost() {
-		return getSshNode().getHost();
-	}
-	/**
-	 * @param host the host to set
-	 */
-	public void setHost(String host) {
-		getSshNode().setHost(host);
-	}
-	/**
-	 * @return the port
-	 */
-	public int getPort() {
-		return getSshNode().getPort();
-	}
-	/**
-	 * @param port the port to set
-	 */
-	public void setPort(int port) {
-		getSshNode().setPort(port);
-	}
-	/**
-	 * @return the directory
-	 */
-	public String getDirectory() {
-		return getSshNode().getDirectory();
-	}
-	/**
-	 * @param directory the directory to set
-	 */
-	public void setDirectory(String directory) {
-		getSshNode().setDirectory(directory);
-	}
-	/**
-	 * @return the subDirectory
-	 */
-	public String getSubDirectory() {
-		return subDirectory;
-	}
-	/**
-	 * @param subDirectory the subDirectory to set
-	 */
-	public void setSubDirectory(String subDirectory) {
-		this.subDirectory = subDirectory;
-	}
-	/**
-	 * @return the fileName
-	 */
-	public String getFileName() {
-		return fileName;
-	}
-	/**
-	 * @param fileName the fileName to set
-	 */
-	public void setFileName(String fileName) {
-		this.fileName = fileName;
-	}
-	
-	public String toString() {
-		String result = SshNodeFactory.makeUrl(getHost(), getPort(), getDirectory());
-		if (getSubDirectory() != null) {
-			result += getSubDirectory();
-		}
-		if (getFileName() != null) {
-			result += "/" + getFileName();
-		}
-		return result;
-	}
-	
-	public int hashCode() {
-		return toString().hashCode();
-		
-	}
-	
-	public boolean equals(Object obj) {
-		if ((obj == null) || !(obj instanceof SshUrl)) {
-			return false;
-		}
-		return (this.hashCode() == obj.hashCode());
-	}
-	
-	public SshUrl getBaseUrl() {
-		SshUrl result = new SshUrl(this.getSshNode());
-		return result;
-	}
-
-
-	/**
-	 * @return the sshNode
-	 */
-	public SshNode getSshNode() {
-		return sshNode;
-	}
-
-
-	/**
-	 * @param sshNode the sshNode to set
-	 */
-	public void setSshNode(SshNode sshNode) {
-		this.sshNode = sshNode;
-	}
-	
-	public ReferencedDataNature getDataNature() {
-		return dataNature;
-	}
-
-
-	public void setDataNature(ReferencedDataNature dataNature) {
-		this.dataNature = dataNature;
-	}
-
-
-	public String getCharset() {
-		return charset;
-	}
-
-
-	public void setCharset(String charset) {
-		this.charset = charset;
-	}
-
-
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrlToSshReference.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrlToSshReference.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrlToSshReference.java
deleted file mode 100644
index 7ab4cc6..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUrlToSshReference.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import org.apache.taverna.reference.ExternalReferenceSPI;
-import org.apache.taverna.reference.ReferenceContext;
-import org.apache.taverna.reference.ValueToReferenceConversionException;
-import org.apache.taverna.reference.ValueToReferenceConverterSPI;
-import org.apache.taverna.security.credentialmanager.CredentialManager;
-
-public class SshUrlToSshReference implements ValueToReferenceConverterSPI {
-
-	private CredentialManager credentialManager;
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.reference.ValueToReferenceConverterSPI#canConvert(java.lang.Object, net.sf.taverna.t2.reference.ReferenceContext)
-	 */
-	@Override
-	public boolean canConvert(Object o, ReferenceContext context) {
-		return (o instanceof SshUrl);
-	}
-
-	/* (non-Javadoc)
-	 * @see net.sf.taverna.t2.reference.ValueToReferenceConverterSPI#convert(java.lang.Object, net.sf.taverna.t2.reference.ReferenceContext)
-	 */
-	@Override
-	public ExternalReferenceSPI convert(Object o, ReferenceContext context)
-			throws ValueToReferenceConversionException {
-		SshReference result = new SshReference((SshUrl) o);
-		result.setCredentialManager(credentialManager);
-		return result;
-	}
-
-	public void setCredentialManager(CredentialManager credentialManager) {
-		this.credentialManager = credentialManager;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUseCaseInvocation.java
deleted file mode 100755
index 5f77364..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshUseCaseInvocation.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/*
- * 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 de.uni_luebeck.inb.knowarc.usecases.invocation.ssh;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.Vector;
-import java.util.regex.Matcher;
-
-import org.apache.taverna.activities.externaltool.RetrieveLoginFromTaverna;
-import org.apache.taverna.reference.AbstractExternalReference;
-import org.apache.taverna.reference.ErrorDocument;
-import org.apache.taverna.reference.ErrorDocumentServiceException;
-import org.apache.taverna.reference.ExternalReferenceSPI;
-import org.apache.taverna.reference.Identified;
-import org.apache.taverna.reference.ReferenceService;
-import org.apache.taverna.reference.ReferenceSet;
-import org.apache.taverna.reference.ReferencedDataNature;
-import org.apache.taverna.reference.T2Reference;
-import org.apache.taverna.security.credentialmanager.CredentialManager;
-
-import org.apache.log4j.Logger;
-
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.SftpException;
-import com.jcraft.jsch.ChannelSftp.LsEntry;
-
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInput;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptOutput;
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.InvocationException;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.UseCaseInvocation;
-
-/**
- * The job is executed by connecting to a worker pc using ssh, i.e. not via the
- * grid.
- * 
- * @author Hajo Krabbenhoeft
- */
-public class SshUseCaseInvocation extends UseCaseInvocation {
-
-	private static Logger logger = Logger.getLogger(SshUseCaseInvocation.class);
-
-	private SshUrl location = null;
-
-	private InputStream stdInputStream = null;
-
-	public static final String SSH_USE_CASE_INVOCATION_TYPE = "D0A4CDEB-DD10-4A8E-A49C-8871003083D8";
-	private String tmpname;
-	private final SshNode workerNode;
-	private final AskUserForPw askUserForPw;
-
-	private ChannelExec running;
-
-	private List<String> precedingCommands = new ArrayList<String>();
-
-	private final ByteArrayOutputStream stdout_buf = new ByteArrayOutputStream();
-	private final ByteArrayOutputStream stderr_buf = new ByteArrayOutputStream();
-
-	private static Map<String, Object> nodeLock = Collections
-			.synchronizedMap(new HashMap<String, Object>());
-
-	private static Map<String, Set<SshUrl>> runIdToTempDir = Collections
-			.synchronizedMap(new HashMap<String, Set<SshUrl>>());
-
-	private static String SSH_INVOCATION_FILE = "sshInvocations";
-
-	private final CredentialManager credentialManager;
-
-	public static String test(final SshNode workerNode,
-			final AskUserForPw askUserForPw) {
-		try {
-			Session sshSession = SshPool
-					.getSshSession(workerNode, askUserForPw);
-
-			ChannelSftp sftpTest = (ChannelSftp) sshSession.openChannel("sftp");
-			sftpTest.connect();
-			sftpTest.cd(workerNode.getDirectory());
-			sftpTest.disconnect();
-			sshSession.disconnect();
-		} catch (JSchException e) {
-			return e.toString();
-		} catch (SftpException e) {
-			return e.toString();
-		}
-		return null;
-	}
-
-	public SshUseCaseInvocation(UseCaseDescription desc, SshNode workerNodeA,
-			AskUserForPw askUserForPwA, CredentialManager credentialManager)
-			throws JSchException, SftpException {
-		this.workerNode = workerNodeA;
-		this.credentialManager = credentialManager;
-
-		setRetrieveData(workerNodeA.isRetrieveData());
-		this.askUserForPw = askUserForPwA;
-		usecase = desc;
-
-		ChannelSftp sftp = SshPool.getSftpPutChannel(workerNode, askUserForPw);
-		synchronized (getNodeLock(workerNode)) {
-
-			logger.info("Changing remote directory to "
-					+ workerNode.getDirectory());
-			sftp.cd(workerNode.getDirectory());
-			Random rnd = new Random();
-			while (true) {
-				tmpname = "usecase" + rnd.nextLong();
-				try {
-					sftp.lstat(workerNode.getDirectory() + tmpname);
-					continue;
-				} catch (Exception e) {
-					// file seems to not exist :)
-				}
-				sftp.mkdir(workerNode.getDirectory() + tmpname);
-				sftp.cd(workerNode.getDirectory() + tmpname);
-				break;
-			}
-		}
-	}
-
-	private static void recursiveDelete(ChannelSftp sftp, String path)
-			throws SftpException, JSchException {
-		Vector<?> entries = sftp.ls(path);
-		for (Object object : entries) {
-			LsEntry entry = (LsEntry) object;
-			if (entry.getFilename().equals(".")
-					|| entry.getFilename().equals("..")) {
-				continue;
-			}
-			if (entry.getAttrs().isDir()) {
-				recursiveDelete(sftp, path + entry.getFilename() + "/");
-			} else {
-				sftp.rm(path + entry.getFilename());
-			}
-		}
-		sftp.rmdir(path);
-	}
-
-	private static void deleteDirectory(SshUrl directory,
-			CredentialManager credentialManager) throws InvocationException {
-		URI uri;
-		try {
-			uri = new URI(directory.toString());
-
-			ChannelSftp sftp;
-			SshNode workerNode;
-			String fullPath = uri.getPath();
-			String path = fullPath.substring(0, fullPath.lastIndexOf("/"));
-			String tempDir = fullPath.substring(fullPath.lastIndexOf("/"));
-			try {
-				workerNode = SshNodeFactory.getInstance().getSshNode(
-						uri.getHost(), uri.getPort(), path);
-
-				sftp = SshPool.getSftpPutChannel(workerNode,
-						new RetrieveLoginFromTaverna(workerNode.getUrl()
-								.toString(), credentialManager));
-			} catch (JSchException e) {
-				throw new InvocationException(e);
-			}
-			synchronized (getNodeLock(workerNode)) {
-				try {
-					sftp.cd(path);
-					recursiveDelete(sftp, path + "/" + tempDir + "/");
-				} catch (SftpException e) {
-					throw new InvocationException(e);
-				} catch (JSchException e) {
-					throw new InvocationException(e);
-				}
-			}
-		} catch (URISyntaxException e1) {
-			throw new InvocationException(e1);
-		}
-	}
-
-	public static void cleanup(String runId, CredentialManager credentialManager)
-			throws InvocationException {
-		Set<SshUrl> tempDirectories = runIdToTempDir.get(runId);
-		if (tempDirectories != null) {
-			for (SshUrl tempUrl : tempDirectories) {
-				deleteDirectory(tempUrl, credentialManager);
-			}
-			runIdToTempDir.remove(runId);
-		}
-	}
-
-	@Override
-	protected void submit_generate_job_inner() throws InvocationException {
-		tags.put("uniqueID", "" + getSubmissionID());
-		String command = usecase.getCommand();
-		for (String cur : tags.keySet()) {
-			command = command.replaceAll("\\Q%%" + cur + "%%\\E",
-					Matcher.quoteReplacement(tags.get(cur)));
-		}
-		String fullCommand = "cd " + workerNode.getDirectory() + tmpname;
-		for (String preceding : precedingCommands) {
-			fullCommand += " && " + preceding;
-		}
-		fullCommand += " && " + command;
-
-		logger.info("Full command is " + fullCommand);
-
-		try {
-			running = SshPool.openExecChannel(workerNode, askUserForPw);
-			running.setCommand(fullCommand);
-			running.setOutputStream(stdout_buf);
-			running.setErrStream(stderr_buf);
-			if (stdInputStream != null) {
-				running.setInputStream(stdInputStream);
-			}
-			running.connect();
-		} catch (JSchException e) {
-			throw new InvocationException(e);
-		}
-
-	}
-
-	@Override
-	public HashMap<String, Object> submit_wait_fetch_results(
-			ReferenceService referenceService) throws InvocationException {
-		while (!running.isClosed()) {
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				throw new InvocationException("Invocation interrupted:"
-						+ e.getMessage());
-			}
-		}
-
-		int exitcode = running.getExitStatus();
-		if (!usecase.getValidReturnCodes().contains(exitcode)) {
-			try {
-				throw new InvocationException("Invalid exit code " + exitcode
-						+ ":" + stderr_buf.toString("US-ASCII"));
-			} catch (UnsupportedEncodingException e) {
-				throw new InvocationException("Invalid exit code " + exitcode
-						+ ":" + stderr_buf.toString());
-			}
-		}
-
-		HashMap<String, Object> results = new HashMap<String, Object>();
-
-		results.put("STDOUT", stdout_buf.toByteArray());
-		results.put("STDERR", stderr_buf.toByteArray());
-		try {
-			stdout_buf.close();
-			stderr_buf.close();
-		} catch (IOException e2) {
-			throw new InvocationException(e2);
-		}
-
-		try {
-			ChannelSftp sftp = SshPool.getSftpPutChannel(workerNode,
-					askUserForPw);
-			synchronized (getNodeLock(workerNode)) {
-				for (Map.Entry<String, ScriptOutput> cur : usecase.getOutputs()
-						.entrySet()) {
-					ScriptOutput scriptOutput = cur.getValue();
-					String fullPath = workerNode.getDirectory() + tmpname + "/"
-							+ scriptOutput.getPath();
-					try {
-						if (sftp.stat(fullPath) != null) {
-							SshUrl url = new SshUrl(workerNode);
-							url.setSubDirectory(tmpname);
-							url.setFileName(scriptOutput.getPath());
-							if (scriptOutput.isBinary()) {
-								url.setDataNature(ReferencedDataNature.BINARY);
-							} else {
-								url.setDataNature(ReferencedDataNature.TEXT);
-								url.setCharset("UTF-8");
-							}
-							if (isRetrieveData()) {
-								SshReference urlRef = new SshReference(url);
-								InputStream is = urlRef.openStream(null);
-								AbstractExternalReference ref;
-								if (scriptOutput.isBinary()) {
-									ref = inlineByteArrayReferenceBuilder
-											.createReference(is, null);
-								} else {
-									ref = inlineStringReferenceBuilder
-											.createReference(is, null);
-								}
-								try {
-									is.close();
-								} catch (IOException e) {
-									throw new InvocationException(e);
-								}
-								results.put(cur.getKey(), ref);
-							} else {
-								results.put(cur.getKey(), url);
-							}
-						} else {
-							ErrorDocument ed = referenceService
-									.getErrorDocumentService().registerError(
-											"No result for " + cur.getKey(), 0,
-											getContext());
-							results.put(cur.getKey(), ed);
-						}
-					} catch (SftpException e) {
-						ErrorDocument ed = referenceService
-								.getErrorDocumentService().registerError(
-										"No result for " + cur.getKey(), 0,
-										getContext());
-						results.put(cur.getKey(), ed);
-
-					}
-				}
-			}
-		} catch (JSchException e1) {
-			throw new InvocationException(e1);
-		} catch (ErrorDocumentServiceException e) {
-			throw new InvocationException(e);
-		}
-
-		if (running != null) {
-			running.disconnect();
-		}
-		if (stdInputStream != null) {
-			try {
-				stdInputStream.close();
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-		}
-
-		if (isRetrieveData()) {
-			forgetRun();
-			deleteDirectory(location, credentialManager);
-
-		}
-		return results;
-	}
-
-	@Override
-	public String setOneInput(ReferenceService referenceService,
-			T2Reference t2Reference, ScriptInput input)
-			throws InvocationException {
-		String target = null;
-		String remoteName = null;
-		if (input.isFile()) {
-			remoteName = input.getTag();
-		} else if (input.isTempFile()) {
-			remoteName = "tempfile." + (nTempFiles++) + ".tmp";
-
-		}
-		if (input.isFile() || input.isTempFile()) {
-			SshReference sshRef = getAsSshReference(referenceService,
-					t2Reference, workerNode);
-			target = workerNode.getDirectory() + tmpname + "/" + remoteName;
-			logger.info("Target is " + target);
-			if (sshRef != null) {
-				if (!input.isForceCopy()) {
-					String linkCommand = workerNode.getLinkCommand();
-					if (linkCommand != null) {
-						String actualLinkCommand = getActualOsCommand(
-								linkCommand, sshRef.getFullPath(), remoteName,
-								target);
-						precedingCommands.add(actualLinkCommand);
-						return target;
-
-					}
-				}
-				String copyCommand = workerNode.getCopyCommand();
-				if (copyCommand != null) {
-					String actualCopyCommand = getActualOsCommand(copyCommand,
-							sshRef.getFullPath(), remoteName, target);
-					precedingCommands.add(actualCopyCommand);
-					return target;
-				}
-			}
-			try {
-				ChannelSftp sftp = SshPool.getSftpPutChannel(workerNode,
-						askUserForPw);
-				synchronized (getNodeLock(workerNode)) {
-					InputStream r = getAsStream(referenceService, t2Reference);
-					sftp.put(r, target);
-					r.close();
-				}
-			} catch (SftpException e) {
-				throw new InvocationException(e);
-			} catch (JSchException e) {
-				throw new InvocationException(e);
-			} catch (IOException e) {
-				throw new InvocationException(e);
-			}
-			return target;
-		} else {
-			String value = (String) referenceService.renderIdentifier(
-					t2Reference, String.class, this.getContext());
-			return value;
-
-		}
-	}
-
-	public SshReference getAsSshReference(ReferenceService referenceService,
-			T2Reference t2Reference, SshNode workerNode) {
-		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;
-					if (sshRef.getHost().equals(workerNode.getHost())) {
-						return sshRef;
-					}
-				}
-			}
-		}
-		return null;
-	}
-
-	private static Object getNodeLock(final SshNode node) {
-		return getNodeLock(node.getHost());
-	}
-
-	private static synchronized Object getNodeLock(String hostName) {
-		if (!nodeLock.containsKey(hostName)) {
-			nodeLock.put(hostName, new Object());
-		}
-		return nodeLock.get(hostName);
-	}
-
-	@Override
-	public void setStdIn(ReferenceService referenceService,
-			T2Reference t2Reference) {
-		stdInputStream = new BufferedInputStream(getAsStream(referenceService,
-				t2Reference));
-	}
-
-	@Override
-	public void rememberRun(String runId) {
-		this.setRunId(runId);
-		Set<SshUrl> directories = runIdToTempDir.get(runId);
-		if (directories == null) {
-			directories = Collections.synchronizedSet(new HashSet<SshUrl>());
-			runIdToTempDir.put(runId, directories);
-		}
-		location = new SshUrl(workerNode);
-		location.setSubDirectory(tmpname);
-		directories.add(location);
-	}
-
-	private void forgetRun() {
-		Set<SshUrl> directories = runIdToTempDir.get(getRunId());
-		directories.remove(location);
-	}
-
-	public static void load(File directory) {
-		File invocationsFile = new File(directory, SSH_INVOCATION_FILE);
-		if (!invocationsFile.exists()) {
-			return;
-		}
-		BufferedReader reader = null;
-		try {
-			reader = new BufferedReader(new FileReader(invocationsFile));
-			String line = reader.readLine();
-			while (line != null) {
-				String[] parts = line.split(" ");
-				if (parts.length != 2) {
-					break;
-				}
-				String runId = parts[0];
-				String urlString = parts[1];
-				Set<SshUrl> urls = runIdToTempDir.get(runId);
-				if (urls == null) {
-					urls = new HashSet<SshUrl>();
-					runIdToTempDir.put(runId, urls);
-				}
-				URI uri = new URI(urlString);
-				String fullPath = uri.getPath();
-				String path = fullPath.substring(0, fullPath.lastIndexOf("/"));
-				String tempDir = fullPath.substring(fullPath.lastIndexOf("/"));
-				SshNode node = SshNodeFactory.getInstance().getSshNode(
-						uri.getHost(), uri.getPort(), path);
-				SshUrl newUrl = new SshUrl(node);
-				newUrl.setSubDirectory(tempDir);
-				urls.add(newUrl);
-				line = reader.readLine();
-			}
-		} catch (FileNotFoundException e) {
-			logger.error(e);
-		} catch (URISyntaxException e) {
-			logger.error(e);
-		} catch (IOException e) {
-			logger.error(e);
-		} finally {
-			if (reader != null) {
-				try {
-					reader.close();
-				} catch (IOException e) {
-					logger.error(e);
-				}
-			}
-		}
-	}
-
-	public static void persist(File directory) {
-		File invocationsFile = new File(directory, SSH_INVOCATION_FILE);
-		BufferedWriter writer = null;
-		try {
-			writer = new BufferedWriter(new FileWriter(invocationsFile));
-			for (String runId : runIdToTempDir.keySet()) {
-				for (SshUrl url : runIdToTempDir.get(runId)) {
-					writer.write(runId);
-					writer.write(" ");
-					writer.write(url.toString());
-					writer.newLine();
-				}
-			}
-		} catch (IOException e) {
-			logger.error(e);
-		} finally {
-			if (writer != null) {
-				try {
-					writer.close();
-				} catch (IOException e) {
-					logger.error(e);
-				}
-			}
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivity.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivity.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivity.java
index fb903c8..167f424 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivity.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivity.java
@@ -24,6 +24,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.taverna.activities.externaltool.desc.ScriptInput;
+import org.apache.taverna.activities.externaltool.desc.ScriptInputUser;
+import org.apache.taverna.activities.externaltool.desc.ScriptOutput;
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.invocation.InvocationException;
+import org.apache.taverna.activities.externaltool.invocation.UseCaseInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.annotation.Annotated;
@@ -41,13 +47,6 @@ import org.apache.taverna.workflowmodel.processor.activity.AsynchronousActivityC
 
 import org.apache.log4j.Logger;
 
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInput;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInputUser;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptOutput;
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.InvocationException;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.UseCaseInvocation;
-
 /**
  * This is the main class of the use case activity plugin. Here we store the
  * configuration and the description of a use case activity, configure the input

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityConfigurationBean.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityConfigurationBean.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityConfigurationBean.java
index 5e6fd23..74c9070 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityConfigurationBean.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityConfigurationBean.java
@@ -21,12 +21,12 @@ package org.apache.taverna.activities.externaltool;
 
 import java.util.List;
 
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
 import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.activities.externaltool.manager.MechanismCreator;
 import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
 import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
 
 @ConfigurationBean(uri = ExternalToolActivity.URI + "#Config")
 public final class ExternalToolActivityConfigurationBean {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityMimeTypeChecker.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityMimeTypeChecker.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityMimeTypeChecker.java
index 641b60d..051b69b 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityMimeTypeChecker.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ExternalToolActivityMimeTypeChecker.java
@@ -27,6 +27,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.Map.Entry;
 
+import org.apache.taverna.activities.externaltool.desc.ScriptInputUser;
+import org.apache.taverna.activities.externaltool.desc.ScriptOutput;
 import org.apache.taverna.visit.VisitReport;
 import org.apache.taverna.visit.VisitReport.Status;
 import org.apache.taverna.workflowmodel.Dataflow;
@@ -49,9 +51,6 @@ import org.apache.taverna.workflowmodel.utils.Tools;
 
 import org.apache.log4j.Logger;
 
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInputUser;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptOutput;
-
 /**
  * @author alanrw
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/InvocationCreator.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/InvocationCreator.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/InvocationCreator.java
index 6697ed6..6bf729c 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/InvocationCreator.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/InvocationCreator.java
@@ -21,9 +21,8 @@ package org.apache.taverna.activities.externaltool;
 
 import java.util.Map;
 
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.UseCaseInvocation;
-
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.invocation.UseCaseInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.reference.ReferenceService;
 import org.apache.taverna.reference.T2Reference;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/RetrieveLoginFromTaverna.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/RetrieveLoginFromTaverna.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/RetrieveLoginFromTaverna.java
index 3dcfd0f..dff298a 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/RetrieveLoginFromTaverna.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/RetrieveLoginFromTaverna.java
@@ -21,10 +21,10 @@ package org.apache.taverna.activities.externaltool;
 
 import java.net.URI;
 
+import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
 import org.apache.taverna.security.credentialmanager.CMException;
 import org.apache.taverna.security.credentialmanager.CredentialManager;
 import org.apache.taverna.security.credentialmanager.UsernamePassword;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
 
 public class RetrieveLoginFromTaverna implements AskUserForPw {
 	private final String url;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/98468d30/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironment.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironment.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironment.java
new file mode 100644
index 0000000..ad58eea
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironment.java
@@ -0,0 +1,251 @@
+/*
+ * 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.desc;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Representation of information about a single runtime environment. It is used
+ * to decide if one runtime environment is possibly compatible with another one
+ * for the selection of queues to commit to.
+ * 
+ * To experiment/test these functions, run the following java -cp
+ * target/taverna-knowarc-processor-0.1.7.jar
+ * de.uni_luebeck.janitor.ldap.RuntimeEnvironment compare bla-1 foo-1 java -cp
+ * target/taverna-knowarc-processor-0.1.7.jar
+ * de.uni_luebeck.janitor.ldap.RuntimeEnvironment compare bla-1 bla-2 java -cp
+ * target/taverna-knowarc-processor-0.1.7.jar
+ * de.uni_luebeck.janitor.ldap.RuntimeEnvironment compare bla-1.2 bla-1
+ * 
+ * @author Steffen Moeller
+ */
+@SuppressWarnings("unchecked")
+public class RuntimeEnvironment implements Comparable {
+	
+	private static Logger logger = Logger.getLogger(RuntimeEnvironment.class);
+
+
+	/**
+	 * Unique identification of the runtime environment - the full name
+	 */
+	protected String id;
+
+	/**
+	 * Accessor function for the complete identifier of the runtime environment
+	 */
+	public String getID() {
+		return id;
+	}
+
+	protected String name;
+
+	/**
+	 * Accessor function for the RE's name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	protected String version;
+
+	/**
+	 * Accessfor function for the version
+	 */
+	public String getVersion() {
+		return version;
+	}
+
+	/**
+	 * for those busy fellows who don't have the time to convert the String into
+	 * a RuntimeEnvironment object.
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public boolean atLeastAsCapableAs(String s) {
+		RuntimeEnvironment tmpRE = new RuntimeEnvironment(s);
+		return this.atLeastAsCapableAs(tmpRE);
+	}
+
+	/**
+	 * Indicates if a runtime environment has the same name, and if so, if the
+	 * given RE has the same or a later version.
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public boolean atLeastAsCapableAs(RuntimeEnvironment re) {
+		if (!name.equals(re.name))
+			return false;
+		int c = compareVersions(getVersion(), re.getVersion());
+		if (c >= 0) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Indicates if this runtimeEnvironment is the same version or later as any
+	 * in that list.
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public boolean atLeastAsCapableAsAnyOf(Iterable<RuntimeEnvironment> res) {
+		boolean compatibleOneFound = false;
+		Iterator<RuntimeEnvironment> i = res.iterator();
+		while (i.hasNext() && !compatibleOneFound) {
+			RuntimeEnvironment r = i.next();
+			compatibleOneFound = atLeastAsCapableAs(r);
+		}
+		return compatibleOneFound;
+	}
+
+	/**
+	 * Indicates if any of the runtime environments listed is the same version
+	 * as this or later.
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public boolean isInferiorToAtLeastOneIn(Iterable<RuntimeEnvironment> res) {
+		boolean compatibleOneFound = false;
+		Iterator<RuntimeEnvironment> i = res.iterator();
+		while (i.hasNext() && !compatibleOneFound) {
+			RuntimeEnvironment r = i.next();
+			compatibleOneFound = r.atLeastAsCapableAs(this);
+		}
+		return compatibleOneFound;
+	}
+
+	/**
+	 * Parses a string as commonly presented by the infosystem
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public RuntimeEnvironment(String raw) {
+		id = raw;
+		int dashpos = raw.indexOf("-");
+		if (-1 == dashpos) {
+			version = "";
+			name = raw;
+		} else {
+			name = raw.substring(0, dashpos);
+			if (dashpos + 1 <= raw.length()) {
+				version = raw.substring(dashpos + 1, raw.length());
+			} else {
+				version = "";
+			}
+		}
+	}
+
+	/**
+	 * to make it behave like a string at time, as it was originally implemented
+	 */
+	@Override
+	public String toString() {
+		return id;
+	}
+
+	/**
+	 * Implementation of Comparable interface. It comes handy albeit this
+	 * function says nothing about the compatibility of two runtime environments
+	 * unless their names are identical and the relation of the constraint was
+	 * taken into account. It just sorts them in lists.
+	 */
+	public int compareTo(Object o) throws ClassCastException {
+		RuntimeEnvironment r = (RuntimeEnvironment) o;
+		if (getName().equals(r.getName())) {
+			return RuntimeEnvironment.compareVersions(getVersion(), r.getVersion());
+		} else {
+			return id.compareTo(r.getID());
+		}
+	}
+
+	/**
+	 * FIXME: For the sake of simplicity, this implementation makes an error in
+	 * treating . and - in the versions equally. Versions, if numerical, are
+	 * treated numerically. Otherwise it is lexicographical, which is error
+	 * prone, though. Should the 'Scanner' class should be tapped into?
+	 * 
+	 * @author Steffen Moeller
+	 */
+	public static int compareVersions(String a, String b) {
+
+		// null pointer exceptions are not risked .. we are nice
+		if (null == a)
+			a = "";
+		if (null == b)
+			b = "";
+
+		// catching the dumb case first
+		if (a.equals(b))
+			return 0;
+
+		List as = Arrays.asList(a.split("[.-]"));
+		List bs = Arrays.asList(b.split("[.-]"));
+
+		// both lists have the empty element as members at least
+		Iterator aIterator = as.iterator();
+		Iterator bIterator = bs.iterator();
+
+		while (aIterator.hasNext()) {
+			String aa = (String) aIterator.next();
+			if (!bIterator.hasNext()) {
+				// a is longer while equal so far
+				return 1; // a > b
+			}
+			String bb = (String) bIterator.next();
+			if (!aa.equals(bb)) {
+				// a and b differ
+				try {
+					Integer aInt = Integer.parseInt(aa);
+					Integer bInt = Integer.parseInt(bb);
+					return aInt.compareTo(bInt);
+				} catch (Exception e) {
+					return aa.compareTo(bb);
+				}
+			}
+		}
+		if (bIterator.hasNext()) {
+			// b is longer while equal so far
+			return -1; // a < b
+		}
+		return 0; // a == b
+	}
+
+	/**
+	 * For testing purposes
+	 */
+	public static void main(String argv[]) {
+		if ("compare".equals(argv[0])) {
+			RuntimeEnvironment r1 = new RuntimeEnvironment(argv[1]);
+			RuntimeEnvironment r2 = new RuntimeEnvironment(argv[2]);
+			logger.info("r1.getName(): " + r1.getName());
+			logger.info("r1.getVersion(): " + r1.getVersion());
+			logger.info("r2.getName(): " + r2.getName());
+			logger.info("r2.getVersion(): " + r2.getVersion());
+			logger.info("r1.atLeastAsCapableAs(r2): " + String.valueOf(r1.atLeastAsCapableAs(r2)));
+		} else {
+			logger.info("Don't know how to '" + argv[0] + "'");
+		}
+	}
+
+}