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 01:56:48 UTC

[1/6] incubator-taverna-common-activities git commit: TAVERNA-963 ASF license header

Repository: incubator-taverna-common-activities
Updated Branches:
  refs/heads/cwl-browse 545856641 -> 4e64abd8e


TAVERNA-963 ASF license header

> Hajo Krabbenhoeft and Steffen Moelller have both signed ICLAs for pre-Apache
> Taverna. That licensed their work to Manchester University and should be
> covered by the University's transfer to Apache.


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/5eea144c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/5eea144c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/5eea144c

Branch: refs/heads/cwl-browse
Commit: 5eea144c058c8d60c0ebd3029d1a49cb08913a13
Parents: 5458566
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed May 4 00:47:12 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed May 4 00:47:12 2016 +0100

----------------------------------------------------------------------
 .../inb/knowarc/gui/AskUserForPwPopup.java      | 31 +++++++++-----------
 .../inb/knowarc/gui/PleaseWaitDialog.java       | 30 +++++++++----------
 .../knowarc/usecases/RuntimeEnvironment.java    | 30 +++++++++----------
 .../usecases/RuntimeEnvironmentConstraint.java  | 30 +++++++++----------
 .../inb/knowarc/usecases/ScriptInput.java       | 30 +++++++++----------
 .../inb/knowarc/usecases/ScriptInputStatic.java | 30 +++++++++----------
 .../inb/knowarc/usecases/ScriptInputUser.java   | 30 +++++++++----------
 .../inb/knowarc/usecases/ScriptOutput.java      | 30 +++++++++----------
 .../knowarc/usecases/UseCaseDescription.java    | 30 +++++++++----------
 .../knowarc/usecases/UseCaseEnumeration.java    | 30 +++++++++----------
 .../usecases/invocation/AskUserForPw.java       | 30 +++++++++----------
 .../invocation/InvocationException.java         | 23 +++++++++++----
 .../usecases/invocation/UseCaseInvocation.java  | 30 +++++++++----------
 .../local/LocalUseCaseInvocation.java           | 30 +++++++++----------
 .../ssh/SshAutoLoginTrustEveryone.java          | 30 +++++++++----------
 .../usecases/invocation/ssh/SshNode.java        | 30 +++++++++----------
 .../usecases/invocation/ssh/SshNodeFactory.java | 22 ++++++++++----
 .../usecases/invocation/ssh/SshPool.java        | 22 ++++++++++----
 .../usecases/invocation/ssh/SshReference.java   | 16 +++++++++-
 .../knowarc/usecases/invocation/ssh/SshUrl.java | 22 ++++++++++----
 .../invocation/ssh/SshUrlToSshReference.java    | 21 +++++++++----
 .../invocation/ssh/SshUseCaseInvocation.java    | 30 +++++++++----------
 22 files changed, 320 insertions(+), 287 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
index e2ae7e1..0ce0460 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
@@ -1,23 +1,20 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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.gui;
 
 import javax.swing.JOptionPane;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
index a6bf707..2a643eb 100755
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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.gui;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
index ea49079..c7fd889 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
index baa68d2..ce7e055 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
index 305564c..50747b5 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
index 989c59a..749e104 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
index 59ead67..715c13e 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
index 066c88a..d824ad4 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
index 58bfa93..1c5914e 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
index 08069e5..d5c5d2c 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
index 9c54b1d..e912db1 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
index d714ab1..2f4485f 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
@@ -1,12 +1,23 @@
-/**
- * 
+/*
+ * 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;
 
-/**
- * @author alanrw
- *
- */
 public class InvocationException extends Exception {
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
index 17b90c3..d6b2502 100644
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
+++ b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index f4ae273..612a487 100755
--- 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
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 60d3bec..ec9c15c 100644
--- 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
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 7cd0f90..6bc122a 100644
--- 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
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 2d8f4bb..bb9a16e 100644
--- 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
@@ -1,5 +1,19 @@
-/**
- * 
+/*
+ * 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;
 
@@ -7,10 +21,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-/**
- * @author alanrw
- *
- */
 public class SshNodeFactory {
 	
 	private Map<String, SshNode> nodeMap = Collections.synchronizedMap(new HashMap<String, SshNode> ());

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index c6a5851..3eac767 100755
--- 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
@@ -1,5 +1,19 @@
-/**
- * 
+/*
+ * 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;
 
@@ -18,10 +32,6 @@ import com.jcraft.jsch.Session;
 import de.uni_luebeck.inb.knowarc.usecases.RuntimeEnvironmentConstraint;
 import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
 
-/**
- * @author alanrw
- *
- */
 public class SshPool {
 	
 	private static Logger logger = Logger.getLogger(SshPool.class);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index c226e8a..b401c0f 100644
--- 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
@@ -1,5 +1,19 @@
-/**
+/*
+ * 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;
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 601735b..ae40ead 100644
--- 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
@@ -1,14 +1,24 @@
-/**
- * 
+/*
+ * 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;
 
-/**
- * @author alanrw
- *
- */
 public class SshUrl {
 	
 	private SshNode sshNode;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 3e89f38..7ab4cc6 100644
--- 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
@@ -1,6 +1,21 @@
-/**
+/*
+ * 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;
@@ -9,10 +24,6 @@ import org.apache.taverna.reference.ValueToReferenceConversionException;
 import org.apache.taverna.reference.ValueToReferenceConverterSPI;
 import org.apache.taverna.security.credentialmanager.CredentialManager;
 
-/**
- * @author alanrw
- *
- */
 public class SshUrlToSshReference implements ValueToReferenceConverterSPI {
 
 	private CredentialManager credentialManager;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/5eea144c/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
index 9d01e08..5f77364 100755
--- 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
@@ -1,21 +1,19 @@
-/* Part of the KnowARC Janitor Use-case processor for taverna
- *  written 2007-2010 by Hajo Nils Krabbenhoeft and Steffen Moeller
- *  University of Luebeck, Institute for Neuro- and Bioinformatics
- *  University of Luebeck, Institute for Dermatolgy
+/*
+ * 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
  *
- *  This package is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU Lesser General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- *  This package is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public License
- *  along with this package; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ * 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;


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

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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/1e35285b/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] + "'");
+		}
+	}
+
+}


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

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalUseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalUseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalUseCaseInvocation.java
new file mode 100755
index 0000000..b57be14
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalUseCaseInvocation.java
@@ -0,0 +1,560 @@
+/*
+ * 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.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.activities.externaltool.desc.ScriptInput;
+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.ssh.SshNode;
+import org.apache.taverna.activities.externaltool.ssh.SshNodeFactory;
+import org.apache.taverna.activities.externaltool.ssh.SshUrl;
+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;
+
+/**
+ * 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/1e35285b/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
index c373879..94cc466 100644
--- 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
@@ -24,13 +24,8 @@ 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
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshAutoLoginTrustEveryone.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshAutoLoginTrustEveryone.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshAutoLoginTrustEveryone.java
new file mode 100644
index 0000000..dfee8bb
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshAutoLoginTrustEveryone.java
@@ -0,0 +1,69 @@
+/*
+ * 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 org.apache.log4j.Logger;
+import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
+
+import com.jcraft.jsch.UIKeyboardInteractive;
+import com.jcraft.jsch.UserInfo;
+
+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/1e35285b/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
index 88f6ceb..b876ec8 100644
--- 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
@@ -25,20 +25,13 @@ import java.util.Map;
 
 import org.apache.taverna.activities.externaltool.InvocationCreator;
 import org.apache.taverna.activities.externaltool.RetrieveLoginFromTaverna;
-
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.invocation.UseCaseInvocation;
 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 org.apache.taverna.reference.ExternalReferenceSPI;
 import org.apache.taverna.reference.Identified;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/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
index 1884cbe..bad5c2e 100644
--- 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
@@ -21,6 +21,7 @@ package org.apache.taverna.activities.externaltool.ssh;
 
 import java.io.File;
 
+import org.apache.taverna.activities.externaltool.invocation.InvocationException;
 import org.apache.taverna.activities.externaltool.manager.InvocationPersister;
 /*
 * Licensed to the Apache Software Foundation (ASF) under one
@@ -45,9 +46,6 @@ import org.apache.taverna.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
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/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
index 2a15d38..097f8db 100644
--- 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
@@ -27,10 +27,6 @@ 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
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNode.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNode.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNode.java
new file mode 100644
index 0000000..378696f
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNode.java
@@ -0,0 +1,157 @@
+/*
+ * 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 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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNodeFactory.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNodeFactory.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNodeFactory.java
new file mode 100644
index 0000000..a697bd7
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshNodeFactory.java
@@ -0,0 +1,66 @@
+/*
+ * 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.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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshPool.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshPool.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshPool.java
new file mode 100755
index 0000000..e7f9787
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshPool.java
@@ -0,0 +1,157 @@
+/*
+ * 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.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.apache.taverna.activities.externaltool.desc.RuntimeEnvironmentConstraint;
+import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
+
+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;
+
+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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshReference.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshReference.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshReference.java
new file mode 100644
index 0000000..091bd0c
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshReference.java
@@ -0,0 +1,222 @@
+/*
+ * 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.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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrl.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrl.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrl.java
new file mode 100644
index 0000000..4c39d66
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrl.java
@@ -0,0 +1,163 @@
+/*
+ * 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 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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrlToSshReference.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrlToSshReference.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrlToSshReference.java
new file mode 100644
index 0000000..74b01e1
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUrlToSshReference.java
@@ -0,0 +1,54 @@
+/*
+ * 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 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/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUseCaseInvocation.java
new file mode 100755
index 0000000..fcbc33f
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshUseCaseInvocation.java
@@ -0,0 +1,560 @@
+/*
+ * 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.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.activities.externaltool.desc.ScriptInput;
+import org.apache.taverna.activities.externaltool.desc.ScriptOutput;
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
+import org.apache.taverna.activities.externaltool.invocation.InvocationException;
+import org.apache.taverna.activities.externaltool.invocation.UseCaseInvocation;
+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;
+
+/**
+ * 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/1e35285b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ExternalReferenceSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ExternalReferenceSPI b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ExternalReferenceSPI
index 6a18935..d63d896 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ExternalReferenceSPI
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ExternalReferenceSPI
@@ -1,2 +1,2 @@
 # Implementation classes of ExternalReferenceSPI go here, one per line
-de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference
+org.apache.taverna.activities.externaltool.invocation.ssh.SshReference

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ValueToReferenceConverterSPI
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ValueToReferenceConverterSPI b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ValueToReferenceConverterSPI
index 53ca06c..50c5a16 100644
--- a/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ValueToReferenceConverterSPI
+++ b/taverna-external-tool-activity/src/main/resources/META-INF/services/org.apache.taverna.reference.ValueToReferenceConverterSPI
@@ -1,3 +1,3 @@
 # Implementation classes of ValueToReferenceConverterSPI go here, one per line
-de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUrlToSshReference
+org.apache.taverna.activities.externaltool.invocation.ssh.SshUrlToSshReference
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/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 d933de9..297fc8d 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
@@ -21,7 +21,7 @@
 	xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd">
 
-	<bean id="SshReference" class="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference">
+	<bean id="SshReference" class="org.apache.taverna.activities.externaltool.invocation.ssh.SshReference">
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 
@@ -37,7 +37,7 @@
 		<property name="invocationGroupManager" ref="invocationGroupManager" />
 	</bean>
 
-	<bean id="SshUrlToSshReference" class="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUrlToSshReference">
+	<bean id="SshUrlToSshReference" class="org.apache.taverna.activities.externaltool.invocation.ssh.SshUrlToSshReference">
 		<property name="credentialManager" ref="credentialManager" />
 	</bean>
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml b/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml
index 4f0a737..b67f6be 100644
--- a/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml
+++ b/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml
@@ -23,7 +23,7 @@
 <!-- Hibernate mapping for ssh reference bean -->
 <hibernate-mapping>
 	<joined-subclass
-		name="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference"
+		name="org.apache.taverna.activities.externaltool.invocation.ssh.SshReference"
 		extends="org.apache.taverna.reference.AbstractExternalReference">
 		<!-- Link to primary key from abstract superclass -->
 		<key column="bean_id" />


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

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironmentConstraint.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironmentConstraint.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironmentConstraint.java
new file mode 100644
index 0000000..8324d61
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/RuntimeEnvironmentConstraint.java
@@ -0,0 +1,160 @@
+/*
+ * 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.Collection;
+import java.util.Iterator;
+
+import org.apache.log4j.Logger;
+
+
+/**
+ * When use cases present a runtime environment, then they don't want to express
+ * that these would provide such, but that these request such, i.e. they constrain
+ * lists of potentially eligible queues. 
+ * @author Steffen Moeller
+ * @since 2008
+ */
+public class RuntimeEnvironmentConstraint extends RuntimeEnvironment {
+	
+	private static Logger logger = Logger.getLogger(RuntimeEnvironmentConstraint.class);
+
+	private static String[] ACCEPTED_RELATIONS = new String[] {"=", ">=", "<=", ">", "<"};
+	/**
+	 * If there is no relation specified, presume >=
+	 */
+	private static String DEFAULT_RELATION = ">=";
+	
+	public static String[] getAcceptedRelations() {
+		return ACCEPTED_RELATIONS;
+	}
+
+	public static String getDefaultRelation() {
+		return DEFAULT_RELATION;
+	}
+
+	/**
+	 *  Identifies the relation between runtime environments to be tested
+	 */
+	protected String relation;
+	
+	/**
+	 * Accessor function for relation
+	 */
+	public String getRelation() {
+		return this.relation;
+	}
+	
+	/**
+	 * Tests of a relation is supported
+	 * @param relation
+	 * @return true iff in <, > , <=, >=, =
+	 */
+	public static boolean acceptedRelation(String relation) {
+		if ((null == relation) || relation.equals("")) {
+			return false;
+		}
+		return relation.equals("=")||relation.equals(">=")||relation.equals("<=")||relation.equals(">")||relation.equals("<");
+	}
+	
+	/**
+	 * Constructor
+	 * @param id - expects the name of the runtime environment together with the version to which the
+	 * @param relation - relates to (">","<","=",">=","<=")
+	 */
+	public RuntimeEnvironmentConstraint(String id, String relation) {
+		super(id);
+		if (null == relation || relation.equals("")) {
+			relation=RuntimeEnvironmentConstraint.getDefaultRelation();
+		}
+		if (relation.equals("==")) {
+			relation="=";
+		}
+		else if (relation.equals("=<")) {
+			relation="<=";
+		}
+		else if (!RuntimeEnvironmentConstraint.acceptedRelation(relation)) {
+			logger.warn("Unknown relation '"+relation+"', presuming '"+RuntimeEnvironmentConstraint.getDefaultRelation()+"'");
+			relation=RuntimeEnvironmentConstraint.getDefaultRelation();
+		}
+		this.relation=relation;
+	}
+	
+	/**
+	 * Perfoms test if the RuntimeEnvironment (RE) passed as argument fulfills the requirements set by the constraint.
+	 * @param re - RE to test
+	 * @return true iff the RE fulfills this REconstraint.
+	 */
+	public boolean isFulfilledBy(RuntimeEnvironment re) {
+		logger.info(re.getID()+" " + this.getRelation() + " "+this.getID() + " ?");
+		if (this.getRelation().equals("=")) {
+			logger.info("=");
+			return re.getID().equals(this.getID());
+		}
+		if (!re.getName().equals(this.getName())) {
+			logger.warn("Name match failed");
+			return false;
+		}
+		int c = RuntimeEnvironment.compareVersions(re.getVersion(),this.getVersion());
+		logger.info("c="+c);
+		if (this.getRelation().equals(">")) return c>0;
+		if (this.getRelation().equals(">=")) return c>=0;
+		if (this.getRelation().equals("<=")) return c<=0;
+		if (this.getRelation().equals("<")) return c<0;
+		throw new RuntimeException("Unknown/untreated releation '"+this.getRelation()+"'");
+	}
+	
+	/**
+	 * Iterates over all the RuntimeEnvironments passed as argument.
+	 * @param REs - list of RuntimeEnvironments, mostly those offered at a particular queue
+	 * @return true iff any RE among the REs passed as argument are fulfilling the constraint
+	 */
+	public boolean isFulfilledByAtLeastOneIn(Collection<RuntimeEnvironment> REs) {
+		boolean fulfilled = false;
+		Iterator<RuntimeEnvironment> i = REs.iterator();
+		while(i.hasNext() && !fulfilled) {
+			RuntimeEnvironment r = i.next();
+			fulfilled = this.isFulfilledBy(r);
+		}
+		return fulfilled;
+	}
+	/**
+	 * For testing purposes
+	 */
+	public static void main(String argv[]) {
+		try {
+			if (argv[0].equals("--help") || argv.length != 3) {
+				logger.error("Expecting arguments (<|>|=|<=|>=) runtime1-version runtime2-version");
+			}
+			else {
+				RuntimeEnvironmentConstraint r1 = new RuntimeEnvironmentConstraint(argv[1], argv[0]);
+				RuntimeEnvironment r2 = new RuntimeEnvironment(argv[2]);
+				logger.info("r1.getName(): "+r1.getName());
+				logger.info("r1.getVersion(): "+r1.getVersion());
+				logger.info("r1.getRelation(): "+r1.getRelation());
+				logger.info("r2.getName(): "+r2.getName());
+				logger.info("r2.getVersion(): "+r2.getVersion());
+				logger.info("r1.isFulfilledBy(r2): "+String.valueOf(r1.isFulfilledBy(r2)));
+			}
+		}
+		catch (Exception e) {
+			logger.error(e);
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInput.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInput.java
new file mode 100644
index 0000000..3d68272
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInput.java
@@ -0,0 +1,134 @@
+/*
+ * 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.nio.charset.Charset;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivity;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
+
+/**
+ * Integrates inputs to the grid that come from the use case descriptions
+ * with those that are fed through the workflow.
+ *
+ * this class controls name and data storage of one input,
+ * no matter where the data comes from
+ */
+@ConfigurationBean(uri = ExternalToolActivity.URI + "#AbstractScriptInput")
+public abstract class ScriptInput {
+	/**
+	 * This input can be referenced under the name 'tag'.
+	 */
+	private String tag = null;
+	/**
+	 * In most cases, the data will be stored under a specific
+	 * filename.
+	 */
+	private boolean file = false;
+	/**
+	 * Set, if the name of the file to be executed is not
+	 * explicitly set but prepared by some automatism and referenced
+	 * via the tagging principle.
+	 */
+	private boolean tempFile = false;
+	/**
+	 * True if (!) the data is binary. (Text otherwise)
+	 */
+	private boolean binary = false;
+
+	private String charsetName = Charset.defaultCharset().name();
+	private boolean forceCopy = false;
+
+	/**
+	 * @return the tag
+	 */
+	public final String getTag() {
+		return tag;
+	}
+	/**
+	 * @param tag the tag to set
+	 */
+	@ConfigurationProperty(name = "tag", label = "Tag")
+	public final void setTag(String tag) {
+		this.tag = tag;
+	}
+	/**
+	 * @return the file
+	 */
+	public final boolean isFile() {
+		return file;
+	}
+	/**
+	 * @param file the file to set
+	 */
+	@ConfigurationProperty(name = "file", label = "File")
+	public final void setFile(boolean file) {
+		this.file = file;
+	}
+	/**
+	 * @return the tempFile
+	 */
+	public final boolean isTempFile() {
+		return tempFile;
+	}
+	/**
+	 * @param tempFile the tempFile to set
+	 */
+	@ConfigurationProperty(name = "tempFile", label = "Temporary File")
+	public final void setTempFile(boolean tempFile) {
+		this.tempFile = tempFile;
+	}
+	/**
+	 * @return the binary
+	 */
+	public final boolean isBinary() {
+		return binary;
+	}
+	/**
+	 * @param binary the binary to set
+	 */
+	@ConfigurationProperty(name = "binary", label = "Binary")
+	public final void setBinary(boolean binary) {
+		this.binary = binary;
+	}
+
+	public String getCharsetName() {
+		return this.charsetName;
+	}
+	/**
+	 * @param charsetName the charsetName to set
+	 */
+	@ConfigurationProperty(name = "charsetName", label = "Chararter Set")
+	public void setCharsetName(String charsetName) {
+		this.charsetName = charsetName;
+	}
+
+	@ConfigurationProperty(name = "forceCopy", label = "Force Copy")
+	public final void setForceCopy(boolean forceCopy) {
+		this.forceCopy = forceCopy;
+
+	}
+	/**
+	 * @return the forceCopy
+	 */
+	public boolean isForceCopy() {
+		return forceCopy;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputStatic.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputStatic.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputStatic.java
new file mode 100644
index 0000000..78b6c3b
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputStatic.java
@@ -0,0 +1,73 @@
+/*
+ * 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 org.apache.taverna.activities.externaltool.ExternalToolActivity;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
+
+/**
+ * This subclass of script input is used to manage static content
+ * which is embedded into the use case description.
+ */
+@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptInputStatic")
+public class ScriptInputStatic extends ScriptInput {
+
+	public ScriptInputStatic() {
+	}
+
+	private String url = null;  //if this is set, load content from remote URL
+	private String content = null;
+
+	@Override
+	public String toString() {
+		return "InputStatic[tag: " +
+			getTag() + (isFile() ? ", file" : "") + (isTempFile() ? ", tempfile" : "") + (isBinary() ? ", binary" : "") + ", content: " + content + "]";
+	}
+
+	/**
+	 * @return the url
+	 */
+	public final String getUrl() {
+		return url;
+	}
+
+	/**
+	 * @param url the url to set
+	 */
+	@ConfigurationProperty(name = "url", label = "URL", required=false)
+	public final void setUrl(String url) {
+		this.url = url;
+	}
+
+	/**
+	 * @return the content
+	 */
+	public final String getContent() {
+		return content;
+	}
+
+	/**
+	 * @param content the content to set
+	 */
+	@ConfigurationProperty(name = "content", label = "Content", required=false)
+	public final void setContent(String content) {
+		this.content = content;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputUser.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputUser.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputUser.java
new file mode 100644
index 0000000..a74bb5d
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptInputUser.java
@@ -0,0 +1,99 @@
+/*
+ * 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.ArrayList;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivity;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
+
+/**
+ * Internal description of output
+ */
+@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptInput")
+public class ScriptInputUser extends ScriptInput {
+
+	/**
+	 * This input may be fed from multiple ouputs.
+	 */
+	private boolean list = false;
+	/**
+	 * True if the data from a list input in taverna is concatenated into one single input file.
+	 */
+	private boolean concatenate = false;
+
+	private ArrayList<String> mime = new ArrayList<String>();
+
+	@Override
+	public String toString() {
+		return "Input[tag: " + getTag() + (isFile() ? ", file" : "")
+				+ (isTempFile() ? ", tempfile" : "")
+				+ (isBinary() ? ", binary" : "") + (list ? ", list" : "")
+				+ (concatenate ? ", concatenate" : "")
+				+ " mime: " + mime.toString() + "]";
+	}
+
+	/**
+	 * @return the list
+	 */
+	public final boolean isList() {
+		return list;
+	}
+
+	/**
+	 * @param list the list to set
+	 */
+	@ConfigurationProperty(name = "list", label = "List")
+	public final void setList(boolean list) {
+		this.list = list;
+	}
+
+	/**
+	 * @return the concatenate
+	 */
+	public final boolean isConcatenate() {
+		return concatenate;
+	}
+
+	/**
+	 * @param concatenate the concatenate to set
+	 */
+	@ConfigurationProperty(name = "concatenate", label = "Concatenate")
+	public final void setConcatenate(boolean concatenate) {
+		this.concatenate = concatenate;
+	}
+
+	/**
+	 * @return the mime
+	 */
+	public final ArrayList<String> getMime() {
+		if (mime == null) {
+			mime = new ArrayList<String>();
+		}
+		return mime;
+	}
+
+	/**
+	 * @param mime the mime to set
+	 */
+	@ConfigurationProperty(name = "mime", label = "Mime Types", required=false)
+	public final void setMime(ArrayList<String> mime) {
+		this.mime = mime;
+	}
+};

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptOutput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptOutput.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptOutput.java
new file mode 100644
index 0000000..77bbc83
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ScriptOutput.java
@@ -0,0 +1,88 @@
+/*
+ * 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.ArrayList;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivity;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
+
+/**
+ * Internal description of input
+ */
+@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptOutput")
+public class ScriptOutput {
+	private String path;
+	private boolean binary;
+	private ArrayList<String> mime = new ArrayList<String>();
+
+	@Override
+	public String toString() {
+		return "Output[path: " + path + (binary ? ", binary" : "")
+				+ " mime: " + mime.toString() + "]";
+	}
+
+	/**
+	 * @return the path
+	 */
+	public final String getPath() {
+		return path;
+	}
+
+	/**
+	 * @param path the path to set
+	 */
+	@ConfigurationProperty(name = "path", label = "Path")
+	public final void setPath(String path) {
+		this.path = path;
+	}
+
+	/**
+	 * @return the binary
+	 */
+	public final boolean isBinary() {
+		return binary;
+	}
+
+	/**
+	 * @param binary the binary to set
+	 */
+	@ConfigurationProperty(name = "binary", label = "Binary")
+	public final void setBinary(boolean binary) {
+		this.binary = binary;
+	}
+
+	/**
+	 * @return the mime
+	 */
+	public final ArrayList<String> getMime() {
+		if (mime == null) {
+			mime = new ArrayList<String>();
+		}
+		return mime;
+	}
+
+	/**
+	 * @param mime the mime to set
+	 */
+	@ConfigurationProperty(name = "mime", label = "Mime Types", required=false)
+	public final void setMime(ArrayList<String> mime) {
+		this.mime = mime;
+	}
+};

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseDescription.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseDescription.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseDescription.java
new file mode 100644
index 0000000..934330f
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseDescription.java
@@ -0,0 +1,897 @@
+/*
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.swing.ImageIcon;
+
+import org.apache.taverna.activities.externaltool.ExternalToolActivity;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
+import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty.OrderPolicy;
+import org.apache.taverna.workflowmodel.serialization.DeserializationException;
+import org.apache.taverna.workflowmodel.utils.Tools;
+
+import org.apache.log4j.Logger;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Class representation of XML-description of UseCases
+ */
+@ConfigurationBean(uri = ExternalToolActivity.URI + "#ToolDescription")
+public class UseCaseDescription {
+
+	private static Logger logger = Logger.getLogger(UseCaseDescription.class);
+
+	/**
+	 * Identifier for the retrieval of this UseCase in the sharedRepository
+	 * database, respectively its XML export.
+	 */
+	private String usecaseid = "";
+	/**
+	 * Workflow Elements now can get a group identifier. There may be subgroups
+	 * divided by :
+	 */
+	private String group = "";
+	/**
+	 * Textual description of the use case itself. This description is very
+	 * short to fit on the single line that is prepared for such descriptions in
+	 * the Taverna workflow element list.
+	 */
+	private String description = "";
+	/**
+	 * What is actually executed on the shell.
+	 */
+	private String command = "";
+
+	/**
+	 * Accessor function of command
+	 *
+	 * @return shell-executable series of commands
+	 */
+	public String getCommand() {
+		if (null == command) {
+			// FIXME: Is this possible?
+			return "";
+		} else {
+			return command;
+		}
+	}
+
+	/**
+	 * Routine that may be executed as a first check if the program is indeed
+	 * installed.
+	 */
+	private String test_local = null;
+
+	/**
+	 * URL of an icon that would help users to recognise the use case
+	 */
+	private String icon_url = null;
+
+	private int preparingTimeoutInSeconds = 20 * 60; // 20 minutes
+	private int executionTimeoutInSeconds = 30 * 60; // 30 minutes
+
+	private List<String> tags = new ArrayList<String>();
+	private List<RuntimeEnvironmentConstraint> REs = new ArrayList<RuntimeEnvironmentConstraint>();
+	private ArrayList<String> queue_preferred = new ArrayList<String>();
+	private ArrayList<String> queue_deny = new ArrayList<String>();
+
+	private List<ScriptInputStatic> static_inputs = new ArrayList<ScriptInputStatic>();
+	private Map<String, ScriptInput> inputs = new HashMap<String, ScriptInput>();
+	private Map<String, ScriptOutput> outputs = new HashMap<String, ScriptOutput>();
+
+	private boolean includeStdIn = false;
+	private boolean includeStdOut = true;
+	private boolean includeStdErr = true;
+
+	private List<Integer> validReturnCodes = new ArrayList<Integer>();
+	
+	/**
+	 * Default constructor to make xstream happy
+	 */
+	public UseCaseDescription() {
+		
+	}
+
+	/**
+	 * Constructor, for special purpose usecases.
+	 *
+	 * @param usecaseid
+	 */
+	public UseCaseDescription(String usecaseid) {
+		this.setUsecaseid(usecaseid);
+	}
+
+	/**
+	 * Constructor, expects an input stream containing the xml. for example, use
+	 * getClass().getClassLoader().getResourceAsStream("..") to load a usecase
+	 * from your program jar
+	 */
+	public UseCaseDescription(InputStream programAsStream) throws DeserializationException {
+		SAXBuilder builder = new SAXBuilder();
+		Document doc;
+		try {
+			doc = builder.build(programAsStream);
+			programAsStream.close();
+		} catch (JDOMException e) {
+			throw new DeserializationException("Error deserializing usecase", e);
+		} catch (IOException e) {
+			throw new DeserializationException("Error deserializing usecase", e);
+		}
+		readFromXmlElement(doc.getRootElement());
+	}
+
+	/**
+	 * Constructor, expects an XML-root to dissect.
+	 */
+	public UseCaseDescription(Element programNode) throws DeserializationException {
+		readFromXmlElement(programNode);
+	}
+
+/**
+ * Produce an XML description of the UseCaseDescription
+ */
+	public Element writeToXMLElement() {
+		Element programNode = new Element("program");
+		programNode.setAttribute("name", getUsecaseid());
+		programNode.setAttribute("description", getDescription());
+		// Always use element version of command
+//		programNode.setAttribute("command", getCommand());
+		Element commandNode = new Element("command");
+		commandNode.addContent(getCommand());
+		programNode.addContent(commandNode);
+		programNode.setAttribute("timeout", Integer.toString(getExecutionTimeoutInSeconds()));
+		programNode.setAttribute("preparing_timeout", Integer.toString(getPreparingTimeoutInSeconds()));
+		programNode.setAttribute("includeStdIn", Boolean.toString(isIncludeStdIn()));
+		programNode.setAttribute("includeStdOut", Boolean.toString(isIncludeStdOut()));
+		programNode.setAttribute("includeStdErr", Boolean.toString(isIncludeStdErr()));
+		for (ScriptInputStatic si : getStatic_inputs()) {
+			Element staticNode = new Element("static");
+			if (si.isBinary()) {
+				staticNode.setAttribute("binary", "true");
+			}
+			if (si.isForceCopy()) {
+				staticNode.setAttribute("forceCopy", "true");
+			}
+			if (si.isFile()) {
+				Element fileNode = new Element("file");
+				fileNode.setAttribute("path", si.getTag());
+				staticNode.addContent(fileNode);
+			} else if (si.isTempFile()) {
+				Element tempfileNode = new Element("tempfile");
+				tempfileNode.setAttribute("tag", si.getTag());
+				staticNode.addContent(tempfileNode);
+			} else {
+				Element replaceNode = new Element("replace");
+				replaceNode.setAttribute("tag", si.getTag());
+				staticNode.addContent(replaceNode);
+			}
+			if (si.getUrl() != null) {
+				Element contentNode = new Element("content");
+				contentNode.setAttribute("url", si.getUrl());
+				staticNode.addContent(contentNode);
+			} else {
+				Element contentNode = new Element("content");
+				contentNode.addContent((String) si.getContent());
+				staticNode.addContent(contentNode);
+			}
+			programNode.addContent(staticNode);
+		}
+		for (Entry<String, ScriptInput> entry : getInputs().entrySet()) {
+			String name = entry.getKey();
+			ScriptInputUser si = (ScriptInputUser) entry.getValue();
+			Element inputNode = new Element("input");
+			inputNode.setAttribute("name", name);
+			if (si.isBinary()) {
+				inputNode.setAttribute("binary", "true");
+			}
+			if (si.isForceCopy()) {
+				inputNode.setAttribute("forceCopy", "true");
+			}
+			if (si.isConcatenate()) {
+				inputNode.setAttribute("concatenate", "true");
+			}
+			if (si.isList()) {
+				inputNode.setAttribute("list", "true");
+			}
+			if (si.isFile()) {
+				Element fileNode = new Element("file");
+				fileNode.setAttribute("path", si.getTag());
+				inputNode.addContent(fileNode);
+			} else if (si.isTempFile()) {
+				Element tempfileNode = new Element("tempfile");
+				tempfileNode.setAttribute("tag", si.getTag());
+				inputNode.addContent(tempfileNode);
+			} else {
+				Element replaceNode = new Element("replace");
+				replaceNode.setAttribute("tag", si.getTag());
+				inputNode.addContent(replaceNode);
+			}
+			for (String mime : si.getMime()) {
+				Element mimeNode = new Element("mime");
+				mimeNode.setAttribute("type", mime);
+				inputNode.addContent(mimeNode);
+			}
+			programNode.addContent(inputNode);
+		}
+		for (Entry<String, ScriptOutput> entry : getOutputs().entrySet()) {
+			String name = entry.getKey();
+			ScriptOutput so = entry.getValue();
+			Element outputNode = new Element("output");
+			outputNode.setAttribute("name", name);
+			if (so.isBinary()) {
+				outputNode.setAttribute("binary", "true");
+			}
+			Element fromfileNode = new Element("fromfile");
+			fromfileNode.setAttribute("path", so.getPath());
+			outputNode.addContent(fromfileNode);
+			for (String mime : so.getMime()) {
+				Element mimeNode = new Element("mime");
+				mimeNode.setAttribute("type", mime);
+				outputNode.addContent(mimeNode);
+			}
+			programNode.addContent(outputNode);
+		}
+		for (RuntimeEnvironmentConstraint rec : getREs()) {
+			Element rteNode = new Element("rte");
+			rteNode.setAttribute("name", rec.getID());
+			rteNode.setAttribute("relation", rec.getRelation());
+			programNode.addContent(rteNode);
+		}
+		if ((group != null) && !group.isEmpty()) {
+			Element groupNode = new Element("group");
+			groupNode.setAttribute("name", group);
+			programNode.addContent(groupNode);
+		}
+		if ((test_local != null) && !test_local.isEmpty()) {
+			Element testNode = new Element("test");
+			testNode.setAttribute("local", test_local);
+			programNode.addContent(testNode);
+		}
+		if ((icon_url != null) && !icon_url.isEmpty()) {
+			Element iconNode = new Element("icon");
+			iconNode.setAttribute("url", icon_url);
+			programNode.addContent(iconNode);
+		}
+		if (!getQueue_preferred().isEmpty() || !getQueue_deny().isEmpty()) {
+			Element queueNode = new Element("queue");
+			for (String url : getQueue_preferred()) {
+				Element preferredNode = new Element("prefer");
+				preferredNode.setAttribute("url", url);
+				queueNode.addContent(preferredNode);
+			}
+			for (String url : getQueue_deny()) {
+				Element denyNode = new Element("deny");
+				denyNode.setAttribute("url", url);
+				queueNode.addContent(denyNode);
+			}
+			programNode.addContent(queueNode);
+		}
+			Element validReturnCodesNode = new Element("validReturnCodes");
+			validReturnCodesNode.setAttribute("codes", getReturnCodesAsText());
+			programNode.addContent(validReturnCodesNode);
+
+		return programNode;
+	}
+	/**
+	 * Specifies the UseCaseDescription from the root of an XML description
+	 * which is accessible online.
+	 *
+	 * @param programNode
+	 * @throws DeserializationException
+	 */
+	private void readFromXmlElement(Element programNode) throws DeserializationException {
+		if (programNode.getName().compareToIgnoreCase("program") != 0)
+			throw new DeserializationException("Expected <program>, read '" + programNode.getName() + "'");
+
+		setUsecaseid(programNode.getAttributeValue("name"));
+		setDescription(programNode.getAttributeValue("description"));
+		setCommand(programNode.getAttributeValue("command"));
+		String timeoutStr = programNode.getAttributeValue("timeout");
+		if (timeoutStr != null)
+			setExecutionTimeoutInSeconds(Integer.parseInt(timeoutStr));
+		timeoutStr = programNode.getAttributeValue("preparing_timeout");
+		if (timeoutStr != null)
+			setPreparingTimeoutInSeconds(Integer.parseInt(timeoutStr));
+
+		String includeStdInStr = programNode.getAttributeValue("includeStdIn");
+		if (includeStdInStr != null && !includeStdInStr.isEmpty()) {
+			setIncludeStdIn(includeStdInStr.equals("true"));
+		}
+
+		String includeStdOutStr = programNode.getAttributeValue("includeStdOut");
+		if (includeStdOutStr != null && !includeStdOutStr.isEmpty()) {
+			setIncludeStdOut(includeStdOutStr.equals("true"));
+		}
+
+		String includeStdErrStr = programNode.getAttributeValue("includeStdErr");
+		if (includeStdErrStr != null && !includeStdErrStr.isEmpty()) {
+			setIncludeStdErr(includeStdErrStr.equals("true"));
+		}
+
+		for (Object cur_ob : programNode.getChildren()) {
+			Element cur = (Element) cur_ob;
+
+			String name = cur.getAttributeValue("name");
+
+			String type = cur.getName();
+			boolean binary = false;
+			if (null != cur.getAttributeValue("binary") && cur.getAttributeValue("binary").equalsIgnoreCase("true")) {
+				binary = true;
+			}
+			boolean list = false;
+			if (null != cur.getAttributeValue("list") && cur.getAttributeValue("list").equalsIgnoreCase("true")) {
+				list = true;
+			}
+			boolean concatenate = false;
+			if (null != cur.getAttributeValue("concatenate") && cur.getAttributeValue("concatenate").equalsIgnoreCase("true")) {
+				concatenate = true;
+			}
+			boolean forceCopy = false;
+			if (null != cur.getAttributeValue("forceCopy") && cur.getAttributeValue("forceCopy").equalsIgnoreCase("true")) {
+				forceCopy = true;
+			}
+
+			Element inner = null;
+			String innerType = null, tag = null, path = null;
+			if (cur.getChildren().size() > 0) {
+				inner = (Element) cur.getChildren().get(0);
+				innerType = inner.getName();
+				tag = inner.getAttributeValue("tag");
+				path = inner.getAttributeValue("path");
+			}
+			// build mime type declaration list
+			ArrayList<String> mime = new ArrayList<String>();
+			for (Object child : cur.getChildren()) {
+				Element curChild = (Element) child;
+				if (curChild.getName().equalsIgnoreCase("mime")) {
+					mime.add(curChild.getAttributeValue("type"));
+				}
+			}
+			if (type.equalsIgnoreCase("static")) {
+				ScriptInputStatic si = new ScriptInputStatic();
+				Element content = cur.getChild("content");
+				if (content == null)
+					throw new DeserializationException("FIXME: script tag without embedded content tag");
+				si.setUrl(content.getAttributeValue("url"));
+				if (si.getUrl() == null)
+					si.setContent(content.getText());
+				fillInputDescription(si, binary, forceCopy, innerType, tag, path);
+				getStatic_inputs().add(si);
+			} else if (type.equalsIgnoreCase("input")) {
+				ScriptInputUser indesc = new ScriptInputUser();
+				indesc.setList(list);
+				indesc.setMime(mime);
+				indesc.setConcatenate(concatenate);
+				fillInputDescription(indesc, binary, forceCopy, innerType, tag, path);
+				getInputs().put(Tools.sanitiseName(name), indesc);
+			} else if (type.equalsIgnoreCase("output")) {
+				ScriptOutput outdesc = new ScriptOutput();
+				outdesc.setMime(mime);
+
+				boolean ok = true;
+				if (null == innerType) {
+					// don't know what to do
+					throw new DeserializationException("FIXME: Found null == innerType for output, is this the bug?");
+				} else if (innerType.equalsIgnoreCase("fromfile")) {
+					outdesc.setPath(path);
+					outdesc.setBinary(binary);
+				} else {
+					throw new DeserializationException("Problem reading output port: unknown innerType '" + innerType + "'");
+				}
+				if (ok) {
+					getOutputs().put(Tools.sanitiseName(name), outdesc);
+				}
+			} else if (type.equalsIgnoreCase("rte") || type.equalsIgnoreCase("re")) {
+				getREs().add(new RuntimeEnvironmentConstraint(name, cur.getAttributeValue("relation")));
+			} else if (type.equalsIgnoreCase("group")) {
+				group = name;
+			} else if (type.equalsIgnoreCase("test")) {
+				test_local = cur.getAttributeValue("local");
+			} else if (type.equalsIgnoreCase("icon")) {
+				icon_url = cur.getAttributeValue("url");
+			} else if (type.equalsIgnoreCase("queue")) {
+				for (Object child_ob : cur.getChildren()) {
+					Element child = (Element) child_ob;
+					if (child.getName().equalsIgnoreCase("prefer"))
+						getQueue_preferred().add(child.getAttributeValue("url"));
+					else if (child.getName().equalsIgnoreCase("deny"))
+						getQueue_deny().add(child.getAttributeValue("url"));
+					else
+						throw new DeserializationException("Error while reading usecase " + this.getUsecaseid() + ": invalid queue entry");
+				}
+			} else if (type.equalsIgnoreCase("command")) {
+				// i like to have the ability to inject complete shell script
+				// fragments into the use case,
+				// so this should be replace and should allow multiple lines
+				if ((getCommand() != null) && !getCommand().isEmpty()) {
+					throw new DeserializationException("You have specified both command attribute and command tag.");
+				}
+				setCommand(cur.getText());
+			} else if (type.equalsIgnoreCase("validReturnCodes")) {
+					String codeString = cur.getAttributeValue("codes");
+					if (codeString != null) {
+						setReturnCodesAsText(codeString);
+					}
+			}
+			else {
+				throw new DeserializationException("Unexpected and uninterpreted attribute " + type);
+			}
+		}
+	}
+
+	private void fillInputDescription(ScriptInput fillMe, boolean binary, boolean forceCopy, String innerType, String tag, String path) throws DeserializationException {
+		fillMe.setBinary(binary);
+		fillMe.setForceCopy(forceCopy);
+		if (null == innerType) {
+			// don't know what to do
+			throw new DeserializationException("FIXME: Found null == innerType for input, is this the bug?");
+		} else if (innerType.equalsIgnoreCase("replace")) {
+			fillMe.setTag(tag);
+			fillMe.setTempFile(false);
+			fillMe.setFile(false);
+			getTags().add(tag);
+		} else if (innerType.equalsIgnoreCase("tempfile")) {
+			fillMe.setTag(tag);
+			fillMe.setTempFile(true);
+			fillMe.setFile(false);
+			getTags().add(tag);
+		} else if (innerType.equalsIgnoreCase("file")) {
+			fillMe.setTag(path);
+			fillMe.setTempFile(false);
+			fillMe.setFile(true);
+		} else {
+			throw new DeserializationException("Problem reading input port: unknown innerType '" + innerType + "'");
+		}
+	}
+
+	/**
+	 * returns icon that is referenced in use case description
+	 */
+	public ImageIcon getImageIcon() {
+		if (null == icon_url) return null;
+		try {
+			URL u = new URL(icon_url);
+			return new ImageIcon(u, getUsecaseid());
+		} catch (Exception e) {
+			logger.error(e);
+			return null;
+		}
+	}
+
+	/**
+	 * String representation of the use case. It also contains interesting
+	 * information on the availability of resources in the grid to actually
+	 * execute that workflow element.
+	 *
+	 * @return String
+	 */
+	@Override
+	public String toString() {
+		List<String> hlp = new ArrayList<String>();
+		hlp.add("usecaseid: " + getUsecaseid());
+		hlp.add("description: " + getDescription());
+		hlp.add("group: " + group);
+		hlp.add("test: " + test_local);
+		hlp.add("tags: " + getTags());
+		for (Map.Entry<String, ScriptInput> cur : getInputs().entrySet()) {
+			hlp.add(">" + cur.getKey() + ">: " + cur.getValue().toString());
+		}
+		for (Map.Entry<String, ScriptOutput> cur : getOutputs().entrySet()) {
+			hlp.add("<" + cur.getKey() + "<: " + cur.getValue().toString());
+		}
+		hlp.add("RE: " + getREs().toString());
+		hlp.add("preferred queues: " + getQueue_preferred());
+		hlp.add("denied queues: " + getQueue_deny());
+		String tos = super.toString() + "[";
+		for (int i = 0; i < hlp.size(); i++) {
+			if (i != 0)
+				tos += ", ";
+			tos += hlp.get(i);
+		}
+		return tos + " ]";
+	}
+
+	/**
+	 * hajo's test just pass an url or file url to an xml file
+	 *
+	 * @throws IOException
+	 * @throws MalformedURLException
+	 * @throws DeserializationException
+	 */
+	public static void main(String[] argv) throws MalformedURLException, IOException, DeserializationException {
+		UseCaseDescription d = new UseCaseDescription(new URL(argv[0]).openStream());
+		logger.info(d.getCommand());
+	}
+
+	/**
+	 * @param command the command to set
+	 */
+	@ConfigurationProperty(name = "command", label = "Command", description="What is actually executed on the shell")
+	public void setCommand(String command) {
+		this.command = command;
+	}
+
+	/**
+	 * @param description the description to set
+	 */
+	@ConfigurationProperty(name = "description", label = "Description", description="Textual description of the tool", required=false, uri="http://purl.org/dc/elements/1.1/description")
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	/**
+	 * @return the description
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * @param executionTimeoutInSeconds the executionTimeoutInSeconds to set
+	 */
+	@ConfigurationProperty(name = "executionTimeoutInSeconds", label = "Execution Timeout In Seconds")
+	public void setExecutionTimeoutInSeconds(int executionTimeoutInSeconds) {
+		this.executionTimeoutInSeconds = executionTimeoutInSeconds;
+	}
+
+	/**
+	 * @return the executionTimeoutInSeconds
+	 */
+	public int getExecutionTimeoutInSeconds() {
+		return executionTimeoutInSeconds;
+	}
+
+	/**
+	 * @param inputs the inputs to set
+	 */
+	public void setInputs(Map<String, ScriptInput> inputs) {
+		this.inputs = inputs;
+	}
+
+	@ConfigurationProperty(name = "inputs", label = "Inputs", required=false)
+	public void setInputs(Set<InputMap> inputs) {
+		if (inputs != null) {
+			this.inputs = new HashMap<String, ScriptInput>();
+			for (InputMap inputMap : inputs) {
+				this.inputs.put(inputMap.getPort(), inputMap.getInput());
+			}
+		} else {
+			this.inputs = null;
+		}
+	}
+
+	/**
+	 * @return the inputs
+	 */
+	public Map<String, ScriptInput> getInputs() {
+		if (inputs == null) {
+			inputs = new HashMap<String, ScriptInput>();
+		}
+		return inputs;
+	}
+
+	/**
+	 * @param outputs the outputs to set
+	 */
+	public void setOutputs(Map<String, ScriptOutput> outputs) {
+		this.outputs = outputs;
+	}
+
+	@ConfigurationProperty(name = "outputs", label = "Outputs", required=false)
+	public void setOutputs(Set<OutputMap> outputs) {
+		if (outputs != null) {
+			this.outputs = new HashMap<String, ScriptOutput>();
+			for (OutputMap outputMap : outputs) {
+				this.outputs.put(outputMap.getPort(), outputMap.getOutput());
+			}
+		} else {
+			this.outputs = null;
+		}
+	}
+
+	/**
+	 * @return the outputs
+	 */
+	public Map<String, ScriptOutput> getOutputs() {
+		if (outputs == null) {
+			outputs = new HashMap<String, ScriptOutput>();
+		}
+		return outputs;
+	}
+
+	/**
+	 * @param preparingTimeoutInSeconds the preparingTimeoutInSeconds to set
+	 */
+	@ConfigurationProperty(name = "preparingTimeoutInSeconds", label = "Preparing Timeout In Seconds")
+	public void setPreparingTimeoutInSeconds(int preparingTimeoutInSeconds) {
+		this.preparingTimeoutInSeconds = preparingTimeoutInSeconds;
+	}
+
+	/**
+	 * @return the preparingTimeoutInSeconds
+	 */
+	public int getPreparingTimeoutInSeconds() {
+		return preparingTimeoutInSeconds;
+	}
+
+	/**
+	 * @param queue_deny the queue_deny to set
+	 */
+	public void setQueue_deny(ArrayList<String> queue_deny) {
+		this.queue_deny = queue_deny;
+	}
+
+	/**
+	 * @return the queue_deny
+	 */
+	public ArrayList<String> getQueue_deny() {
+		if (queue_deny == null) {
+			queue_deny = new ArrayList<String>();
+		}
+		return queue_deny;
+	}
+
+	/**
+	 * @param queue_preferred the queue_preferred to set
+	 */
+	public void setQueue_preferred(ArrayList<String> queue_preferred) {
+		this.queue_preferred = queue_preferred;
+	}
+
+	/**
+	 * @return the queue_preferred
+	 */
+	public ArrayList<String> getQueue_preferred() {
+		if (queue_preferred == null) {
+			queue_preferred = new ArrayList<String>();
+		}
+		return queue_preferred;
+	}
+
+	/**
+	 * @param rEs the rEs to set
+	 */
+	public void setREs(List<RuntimeEnvironmentConstraint> rEs) {
+		REs = rEs;
+	}
+
+	/**
+	 * @return the rEs
+	 */
+	public List<RuntimeEnvironmentConstraint> getREs() {
+		if (REs == null) {
+			REs = new ArrayList<RuntimeEnvironmentConstraint>();
+		}
+		return REs;
+	}
+
+	/**
+	 * @param static_inputs the static_inputs to set
+	 */
+	@ConfigurationProperty(name = "staticInputs", label = "Static Inputs", ordering=OrderPolicy.NON_ORDERED, required=false)
+	public void setStatic_inputs(List<ScriptInputStatic> static_inputs) {
+		this.static_inputs = static_inputs;
+	}
+
+	/**
+	 * @return the static_inputs
+	 */
+	public List<ScriptInputStatic> getStatic_inputs() {
+		if (static_inputs == null) {
+			static_inputs = new ArrayList<ScriptInputStatic>();
+		}
+		return static_inputs;
+	}
+
+	/**
+	 * @param tags the tags to set
+	 */
+	public void setTags(List<String> tags) {
+		this.tags = tags;
+	}
+
+	/**
+	 * @return the tags
+	 */
+	public List<String> getTags() {
+		if (tags == null) {
+			tags = new ArrayList<String>();
+		}
+		return tags;
+	}
+
+	/**
+	 * @param usecaseid the usecaseid to set
+	 */
+	@ConfigurationProperty(name = "usecaseid", label = "Title", uri="http://purl.org/dc/elements/1.1/title", required=false)
+	public void setUsecaseid(String usecaseid) {
+		this.usecaseid = usecaseid;
+	}
+
+	/**
+	 * @return the usecaseid
+	 */
+	public String getUsecaseid() {
+		return usecaseid;
+	}
+
+	public boolean isIncludeStdIn() {
+		return includeStdIn;
+	}
+
+	@ConfigurationProperty(name = "includeStdIn", label = "Include STDIN")
+	public void setIncludeStdIn(boolean includeStdIn) {
+		this.includeStdIn = includeStdIn;
+	}
+
+	public boolean isIncludeStdOut() {
+		return includeStdOut;
+	}
+
+	@ConfigurationProperty(name = "includeStdOut", label = "Include STDOUT")
+	public void setIncludeStdOut(boolean includeStdOut) {
+		this.includeStdOut = includeStdOut;
+	}
+
+	public boolean isIncludeStdErr() {
+		return includeStdErr;
+	}
+
+	@ConfigurationProperty(name = "includeStdErr", label = "Include STDERR")
+	public void setIncludeStdErr(boolean includeStdErr) {
+		this.includeStdErr = includeStdErr;
+	}
+
+	/**
+	 * @return the validReturnCodes
+	 */
+	public List<Integer> getValidReturnCodes() {
+		if (validReturnCodes == null) {
+			validReturnCodes = new ArrayList<Integer>();
+		}
+		if (validReturnCodes.isEmpty()) {
+			validReturnCodes.add(0);
+		}
+		return validReturnCodes;
+	}
+
+	/**
+	 * @param validReturnCodes the validReturnCodes to set
+	 */
+	public void setValidReturnCodes(List<Integer> validReturnCodes) {
+		this.validReturnCodes = validReturnCodes;
+	}
+
+	public String getReturnCodesAsText() {
+		return StringUtils.join(getValidReturnCodes(), ",");
+	}
+
+	public void setReturnCodesAsText(String text) {
+		if (getValidReturnCodes() == null) {
+			validReturnCodes = new ArrayList<Integer>();
+		}
+		validReturnCodes.clear();
+		String[] codes = text.split(",");
+		for (String code : codes) {
+			try {
+				Integer codeInt = new Integer(code);
+				if (!validReturnCodes.contains(codeInt)) {
+					validReturnCodes.add(codeInt);
+				}
+			}
+			catch (NumberFormatException e) {
+				logger.error(e);
+			}
+		}
+		if (validReturnCodes.isEmpty()) {
+			validReturnCodes.add(0);
+		}
+		Collections.sort(validReturnCodes);
+	}
+
+	/**
+	 * @return the group
+	 */
+	public String getGroup() {
+		return group;
+	}
+
+	/**
+	 * @param group the group to set
+	 */
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	/**
+	 * @return the icon_url
+	 */
+	public String getIcon_url() {
+		return icon_url;
+	}
+
+	@ConfigurationBean(uri = ExternalToolActivity.URI + "#OutputMap")
+	public static class OutputMap {
+		private String port;
+
+		private ScriptOutput output;
+
+		public String getPort() {
+			return port;
+		}
+
+		@ConfigurationProperty(name = "port", label = "Port")
+		public void setPort(String port) {
+			this.port = port;
+		}
+
+		public ScriptOutput getOutput() {
+			return output;
+		}
+
+		@ConfigurationProperty(name = "output", label = "Output")
+		public void setOutput(ScriptOutput output) {
+			this.output = output;
+		}
+	}
+
+	@ConfigurationBean(uri = ExternalToolActivity.URI + "#InputMap")
+	public static class InputMap {
+		private String port;
+
+		private ScriptInputUser input;
+
+		public String getPort() {
+			return port;
+		}
+
+		@ConfigurationProperty(name = "port", label = "Port")
+		public void setPort(String port) {
+			this.port = port;
+		}
+
+		public ScriptInputUser getInput() {
+			return input;
+		}
+
+		@ConfigurationProperty(name = "input", label = "Input")
+		public void setInput(ScriptInputUser input) {
+			this.input = input;
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseEnumeration.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseEnumeration.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseEnumeration.java
new file mode 100644
index 0000000..1a43461
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/UseCaseEnumeration.java
@@ -0,0 +1,111 @@
+/*
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.taverna.workflowmodel.serialization.DeserializationException;
+
+import org.apache.log4j.Logger;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+
+public class UseCaseEnumeration {
+
+	private static Logger logger = Logger.getLogger(UseCaseEnumeration.class);
+
+	public static List<UseCaseDescription> readDescriptionsFromUrl(String xmlFileUrl) throws IOException {
+
+		List<UseCaseDescription> ret = new ArrayList<UseCaseDescription>();
+		URLConnection con = null;
+		try {
+			URL url = new URL(xmlFileUrl);
+
+			con = url.openConnection();
+			con.setConnectTimeout(4000);
+			ret = readDescriptionsFromStream(con.getInputStream());
+			
+		} catch (IOException ioe) {
+			logger.error("Problem retrieving from " + xmlFileUrl);
+			logger.error(ioe);
+			throw ioe;
+		}
+		finally {
+
+		}
+
+		return ret;
+
+	}
+	
+	public static List<UseCaseDescription> readDescriptionsFromStream(InputStream is) {
+		
+		List<UseCaseDescription> ret = new ArrayList<UseCaseDescription>();
+
+		SAXBuilder builder = new SAXBuilder();
+		Document doc = null;
+		try {
+			doc = builder.build(is);
+			is.close();
+		} catch (JDOMException e1) {
+			logger.error(e1);
+			return ret;
+		} catch (IOException e1) {
+			logger.error(e1);
+			return ret;
+		} finally {
+			try {
+				is.close();
+			} catch (IOException e) {
+				logger.error(e);
+			}
+		}
+
+		Element usecases = doc.getRootElement();
+		for (Object ochild : usecases.getChildren()) {
+			Element child = (Element) ochild;
+			if (child.getName().equalsIgnoreCase("program")) {
+					try {
+						ret.add(new UseCaseDescription(child));
+					} catch (DeserializationException e) {
+						logger.error(e);
+					}
+			}
+		}
+		return ret;
+	}
+
+	public static UseCaseDescription readDescriptionFromUrl(
+			String repositoryUrl, String id) throws IOException {
+		List<UseCaseDescription> descriptions = readDescriptionsFromUrl(repositoryUrl);
+		for (UseCaseDescription usecase : descriptions) {
+			if (usecase.getUsecaseid().equals(id)) {
+				return usecase;
+			}
+		}
+		return null;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/AskUserForPwPopup.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/AskUserForPwPopup.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/AskUserForPwPopup.java
new file mode 100644
index 0000000..9dbe959
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/AskUserForPwPopup.java
@@ -0,0 +1,74 @@
+/*
+ * 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.gui;
+
+import javax.swing.JOptionPane;
+
+import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
+import org.apache.taverna.activities.externaltool.ssh.SshNode;
+
+public final class AskUserForPwPopup implements AskUserForPw {
+	private SshNode ret;
+	private String pw, pp, kf, us;
+
+	public static String ask(String message, String title) {
+		return (String) JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE, null, null, "");
+	}
+
+	public static boolean askYN(String message, String title) {
+		return JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION;
+	}
+
+	public String getPassword() {
+		getUsername();
+		if (pw != null)
+			return pw;
+		pw = ask("Please enter your password for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
+		return pw;
+	}
+
+	public String getPassphrase() {
+		getUsername();
+		if (pp != null)
+			return pp;
+		pp = ask("Please enter your passphrase for " + kf + " used for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
+		return pp;
+	}
+
+	public String getKeyfile() {
+		getUsername();
+		if (kf != null)
+			return kf;
+		kf = ask("Please enter the keyfile for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
+		return kf;
+	}
+
+	public String getUsername() {
+		if (us != null)
+			return us;
+		us = ask("Please enter the username for " + ret.getHost(), "Username for " + ret.getHost());
+		return us;
+	}
+
+	public void setSshNode(SshNode sshNode) {
+		this.ret = sshNode;
+	}
+
+	public void authenticationSucceeded() {
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/PleaseWaitDialog.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/PleaseWaitDialog.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/PleaseWaitDialog.java
new file mode 100755
index 0000000..9e265c8
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/gui/PleaseWaitDialog.java
@@ -0,0 +1,73 @@
+/*
+ * 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.gui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+
+public class PleaseWaitDialog extends JDialog {
+	private static final long serialVersionUID = 1L;
+
+	static PleaseWaitDialog instance = new PleaseWaitDialog();
+
+	public class WaitMessage{
+		public WaitMessage() {
+		}
+		
+		String str;
+		public void set(String newstr) {
+			synchronized (PleaseWaitDialog.instance) {
+				if(this.str != null && this.str.equals(newstr)) return;
+				if(this.str != null) messages.remove(this.str);
+				this.str = newstr;
+				if(this.str != null) messages.add(this.str);
+			}
+			updateDialog();
+		}
+		public void done() {
+			set(null);
+		}
+	}
+
+	private void updateDialog() {
+		synchronized (PleaseWaitDialog.instance) {
+			if(messages.size() > 0) this.setVisible(true);
+			else this.setVisible(false);
+			String t = "";
+			for (String  cur : messages) {
+				t += cur + "<br>";
+			}
+			l.setText("<html>"+t+"</html>");
+		}
+	}
+	
+	List<String> messages = new ArrayList<String>();
+	
+	JLabel l;
+	private PleaseWaitDialog() {
+		this.setAlwaysOnTop(true);
+		this.setTitle("Please wait");
+		l = new JLabel("");
+		this.add(l);
+		this.setSize(400, 100);
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/AskUserForPw.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/AskUserForPw.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/AskUserForPw.java
new file mode 100644
index 0000000..04bced0
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/AskUserForPw.java
@@ -0,0 +1,32 @@
+/*
+ * 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.invocation;
+
+public interface AskUserForPw {
+
+	// we will try keyfile first
+	public String getKeyfile();
+	public String getPassphrase();
+
+	// then username+password
+	public String getUsername();
+	public String getPassword();
+
+	public void authenticationSucceeded();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/InvocationException.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/InvocationException.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/InvocationException.java
new file mode 100644
index 0000000..d9f6bce
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/InvocationException.java
@@ -0,0 +1,36 @@
+/*
+ * 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.invocation;
+
+public class InvocationException extends Exception {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 437316164959631591L;
+
+	public InvocationException(String string) {
+		super(string);
+	}
+	
+	public InvocationException(Exception e) {
+		super(e);
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/UseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/UseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/UseCaseInvocation.java
new file mode 100644
index 0000000..4d97030
--- /dev/null
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/UseCaseInvocation.java
@@ -0,0 +1,321 @@
+/*
+ * 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.invocation;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.taverna.activities.externaltool.desc.ScriptInput;
+import org.apache.taverna.activities.externaltool.desc.ScriptInputStatic;
+import org.apache.taverna.activities.externaltool.desc.ScriptInputUser;
+import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.invocation.InvocationContext;
+import org.apache.taverna.reference.ExternalReferenceSPI;
+import org.apache.taverna.reference.Identified;
+import org.apache.taverna.reference.IdentifiedList;
+import org.apache.taverna.reference.ReferenceService;
+import org.apache.taverna.reference.ReferenceServiceException;
+import org.apache.taverna.reference.ReferenceSet;
+import org.apache.taverna.reference.T2Reference;
+import org.apache.taverna.reference.impl.external.object.InlineByteArrayReferenceBuilder;
+import org.apache.taverna.reference.impl.external.object.InlineStringReferenceBuilder;
+
+/**
+ * An abstraction of various forms to bring job using the software that is
+ * referenced as a use case towards their execution.
+ * 
+ * @author Hajo Nils Krabbenhoeft with some contribution by
+ * @author Steffen Moeller
+ */
+public abstract class UseCaseInvocation {
+	
+	private String runId;
+	
+	
+	protected static String getActualOsCommand(String osCommand, String pathToOriginal,
+			String targetName, String pathTarget) {
+				String actualOsCommand = osCommand;
+				actualOsCommand = actualOsCommand.replace("%%PATH_TO_ORIGINAL%%", pathToOriginal);
+				actualOsCommand = actualOsCommand.replace("%%TARGET_NAME%%", targetName);
+				actualOsCommand = actualOsCommand.replace("%%PATH_TO_TARGET%%", pathTarget);
+				return actualOsCommand;
+			}
+
+	protected UseCaseDescription usecase;
+	protected final HashMap<String, String> tags = new HashMap<String, String>();
+	protected int nTempFiles = 0;
+	private static int submissionID = 0;
+	protected static InlineByteArrayReferenceBuilder inlineByteArrayReferenceBuilder = new InlineByteArrayReferenceBuilder();
+	protected static InlineStringReferenceBuilder inlineStringReferenceBuilder = new InlineStringReferenceBuilder();
+	private InvocationContext invocationContext;
+	private boolean retrieveData;
+	
+	/*
+	 * get the class of the data we expect for a given input
+	 */
+	@SuppressWarnings("unchecked")
+	public Class getType(String inputName) {
+		if (!usecase.getInputs().containsKey(inputName))
+			return null;
+		ScriptInputUser input = (ScriptInputUser) usecase.getInputs().get(inputName);
+		if (input.isList()) {
+			if (input.isBinary())
+				return List.class;
+			else
+				return List.class;
+		} else {
+			if (input.isBinary())
+				return byte[].class;
+			else
+				return String.class;
+		}
+	}
+
+	/*
+	 * get a list of all the input port names
+	 */
+	public Set<String> getInputs() {
+		return usecase.getInputs().keySet();
+	}
+
+
+	/*
+	 * get a id, incremented with each job. thus, this should be thread-wide
+	 * unique
+	 */
+	public synchronized int getSubmissionID() {
+		return submissionID++;
+	}
+
+	/*
+	 * set the data for the input port with given name
+	 */
+	@SuppressWarnings("unchecked")
+	public void setInput(String inputName, ReferenceService referenceService, T2Reference t2Reference) throws InvocationException {
+		if (t2Reference == null) {
+			throw new InvocationException("No input specified for " + inputName);
+		}
+		ScriptInputUser input = (ScriptInputUser) usecase.getInputs().get(inputName);
+		if (input.isList()) {
+			IdentifiedList<T2Reference> listOfReferences = (IdentifiedList<T2Reference>) referenceService
+					.getListService().getList(t2Reference);
+
+			if (!input.isConcatenate()) {
+				// this is a list input (not concatenated)
+				// so write every element to its own temporary file
+				// and create a filelist file
+
+				// we need to write the list elements to temporary files
+				ScriptInputUser listElementTemp = new ScriptInputUser();
+				listElementTemp.setBinary(input.isBinary());
+				listElementTemp.setTempFile(true);
+
+				String lineEndChar = "\n";
+				if (!input.isFile() && !input.isTempFile()) {
+					lineEndChar = " ";
+				}
+
+				String listFileContent = "";
+				String filenamesFileContent = "";
+				// create a list of all temp file names
+				for (T2Reference cur : listOfReferences) {
+					String tmp = setOneInput(referenceService, cur,
+							listElementTemp);
+					listFileContent += tmp + lineEndChar;
+					int ind = tmp.lastIndexOf('/');
+					if (ind == -1) {
+						ind = tmp.lastIndexOf('\\');
+					}
+					if (ind != -1) {
+						tmp = tmp.substring(ind + 1);
+					}
+					filenamesFileContent += tmp + lineEndChar;
+				}
+
+				// how do we want the listfile to be stored?
+				ScriptInputUser listFile = new ScriptInputUser();
+				listFile.setBinary(false); // since its a list file
+				listFile.setFile(input.isFile());
+				listFile.setTempFile(input.isTempFile());
+				listFile.setTag(input.getTag());
+				T2Reference listFileContentReference = referenceService
+						.register(listFileContent, 0, true, invocationContext);
+
+				tags.put(listFile.getTag(), setOneInput(referenceService,
+						listFileContentReference, listFile));
+
+				listFile.setTag(input.getTag() + "_NAMES");
+				T2Reference filenamesFileContentReference = referenceService
+						.register(filenamesFileContent, 0, true, null);
+				tags.put(listFile.getTag(), setOneInput(referenceService,
+						filenamesFileContentReference, listFile));
+			} else {
+				try {
+					// first, concatenate all data
+					if (input.isBinary()) {
+						ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+						BufferedWriter outputWriter = new BufferedWriter(
+								new OutputStreamWriter(outputStream));
+						for (T2Reference cur : listOfReferences) {
+							InputStreamReader inputReader = new InputStreamReader(
+									getAsStream(referenceService, cur));
+							IOUtils.copyLarge(inputReader, outputWriter);
+							inputReader.close();
+						}
+						outputWriter.close();
+						T2Reference binaryReference = referenceService
+								.register(outputStream.toByteArray(), 0, true,
+										invocationContext);
+						tags.put(input.getTag(), setOneInput(referenceService,
+								binaryReference, input));
+					} else {
+						ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+						BufferedWriter outputWriter = new BufferedWriter(
+								new OutputStreamWriter(outputStream));
+						for (T2Reference cur : listOfReferences) {
+							InputStreamReader inputReader = new InputStreamReader(
+									getAsStream(referenceService, cur));
+							IOUtils.copyLarge(inputReader, outputWriter);
+							outputWriter.write(" ");
+							inputReader.close();
+						}
+						outputWriter.close();
+						T2Reference binaryReference = referenceService
+								.register(outputStream.toByteArray(), 0, true,
+										invocationContext);
+						tags.put(input.getTag(), setOneInput(referenceService,
+								binaryReference, input));
+					}
+				} catch (IOException e) {
+					throw new InvocationException(e);
+				}
+			}
+		} else {
+			tags.put(input.getTag(), setOneInput(referenceService, t2Reference,
+					input));
+		}
+	}
+
+	/*
+	 * submit a grid job and wait for it to finish, then get the result as
+	 * on-demand downloads or directly as data (in case of local execution)
+	 */
+	public HashMap<String, Object> Submit(ReferenceService referenceService) throws InvocationException {
+		submit_generate_job(referenceService);
+		return submit_wait_fetch_results(referenceService);
+	}
+
+	/*
+	 * just submit the job. useful if you want to wait for it to finish later on
+	 * 
+	 * Can the statics be made more static?
+	 */
+	public void submit_generate_job(ReferenceService referenceService) throws InvocationException {
+		for (ScriptInputStatic input : usecase.getStatic_inputs()) {
+			T2Reference ref;
+			if (input.getUrl() != null) {
+				// Does this work OK with binary
+				try {
+					ref = referenceService.register(new URL(input.getUrl()), 0, true, null);
+				} catch (ReferenceServiceException e) {
+					throw new InvocationException(e);
+				} catch (MalformedURLException e) {
+					throw new InvocationException(e);
+				}
+			} else {
+				ref = referenceService.register((String) input.getContent(), 0, true, null);
+			}
+				tags.put(input.getTag(), setOneInput(referenceService, ref, input));
+			
+		}
+		submit_generate_job_inner();
+	}
+
+	protected abstract void submit_generate_job_inner() throws InvocationException;
+
+	/*
+	 * wait for a submitted job to finish and fetch the results
+	 */
+	public abstract HashMap<String, Object> submit_wait_fetch_results(ReferenceService referenceService) throws InvocationException;
+
+	public abstract String setOneInput(ReferenceService referenceService, T2Reference t2Reference, ScriptInput input) throws InvocationException;
+
+	protected InputStream getAsStream(ReferenceService referenceService, T2Reference t2Reference) {
+		Identified identified = referenceService.resolveIdentifier(t2Reference, null, null);
+		if (identified instanceof ReferenceSet) {
+			ExternalReferenceSPI ref = ((ReferenceSet) identified).getExternalReferences().iterator().next();
+			return ref.openStream(invocationContext);
+		}
+		return null;
+	}
+
+	public void setContext(InvocationContext context) {
+		this.invocationContext = context;
+		
+	}
+	
+	public InvocationContext getContext() {
+		return this.invocationContext;
+	}
+
+	public abstract void setStdIn(ReferenceService referenceService,
+			T2Reference t2Reference);
+
+	public abstract void rememberRun(String runId);
+
+	/**
+	 * @return the runId
+	 */
+	protected String getRunId() {
+		return runId;
+	}
+
+	/**
+	 * @param runId the runId to set
+	 */
+	protected void setRunId(String runId) {
+		this.runId = runId;
+	}
+
+	/**
+	 * @return the retrieveData
+	 */
+	protected boolean isRetrieveData() {
+		return retrieveData;
+	}
+
+	/**
+	 * @param retrieveData the retrieveData to set
+	 */
+	protected void setRetrieveData(boolean retrieveData) {
+		this.retrieveData = retrieveData;
+	}
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/ExternalToolLocalInvocationMechanism.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/ExternalToolLocalInvocationMechanism.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/ExternalToolLocalInvocationMechanism.java
index f846d02..e921bc4 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/ExternalToolLocalInvocationMechanism.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/ExternalToolLocalInvocationMechanism.java
@@ -24,8 +24,6 @@ import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.jdom.Element;
 import org.jdom.Text;
 
-import de.uni_luebeck.inb.knowarc.usecases.invocation.local.LocalUseCaseInvocation;
-
 /**
  * @author alanrw
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationCreator.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationCreator.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationCreator.java
index 8c6234d..c340f0e 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationCreator.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationCreator.java
@@ -23,16 +23,14 @@ import java.io.IOException;
 import java.util.Map;
 
 import org.apache.taverna.activities.externaltool.InvocationCreator;
+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;
 
 import org.apache.log4j.Logger;
 
-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.local.LocalUseCaseInvocation;
-
 /**
  * @author alanrw
  *

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationPersister.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationPersister.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationPersister.java
index b30a73b..8cc8201 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationPersister.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalInvocationPersister.java
@@ -22,8 +22,6 @@ package org.apache.taverna.activities.externaltool.local;
 import java.io.File;
 
 import org.apache.log4j.Logger;
-
-import de.uni_luebeck.inb.knowarc.usecases.invocation.local.LocalUseCaseInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationPersister;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalMechanismCreator.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalMechanismCreator.java b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalMechanismCreator.java
index b92417c..3f95a2b 100644
--- a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalMechanismCreator.java
+++ b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalMechanismCreator.java
@@ -20,8 +20,6 @@
 package org.apache.taverna.activities.externaltool.local;
 
 import org.jdom.Element;
-
-import de.uni_luebeck.inb.knowarc.usecases.invocation.local.LocalUseCaseInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.activities.externaltool.manager.MechanismCreator;
 


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

Posted by st...@apache.org.
TAVERNA-963 package taverna.externaltool.*


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/1e35285b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/1e35285b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/1e35285b

Branch: refs/heads/cwl-browse
Commit: 1e35285b0c60962f81908fe16b7e268b28cb9a4f
Parents: 5eea144
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed May 4 00:53:18 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed May 4 00:53:18 2016 +0100

----------------------------------------------------------------------
 .../inb/knowarc/gui/AskUserForPwPopup.java      |  74 --
 .../inb/knowarc/gui/PleaseWaitDialog.java       |  73 --
 .../knowarc/usecases/RuntimeEnvironment.java    | 251 ------
 .../usecases/RuntimeEnvironmentConstraint.java  | 160 ----
 .../inb/knowarc/usecases/ScriptInput.java       | 134 ---
 .../inb/knowarc/usecases/ScriptInputStatic.java |  73 --
 .../inb/knowarc/usecases/ScriptInputUser.java   |  99 --
 .../inb/knowarc/usecases/ScriptOutput.java      |  88 --
 .../knowarc/usecases/UseCaseDescription.java    | 897 -------------------
 .../knowarc/usecases/UseCaseEnumeration.java    | 111 ---
 .../usecases/invocation/AskUserForPw.java       |  32 -
 .../invocation/InvocationException.java         |  36 -
 .../usecases/invocation/UseCaseInvocation.java  | 322 -------
 .../local/LocalUseCaseInvocation.java           | 561 ------------
 .../ssh/SshAutoLoginTrustEveryone.java          |  70 --
 .../usecases/invocation/ssh/SshNode.java        | 157 ----
 .../usecases/invocation/ssh/SshNodeFactory.java |  66 --
 .../usecases/invocation/ssh/SshPool.java        | 158 ----
 .../usecases/invocation/ssh/SshReference.java   | 222 -----
 .../knowarc/usecases/invocation/ssh/SshUrl.java | 163 ----
 .../invocation/ssh/SshUrlToSshReference.java    |  54 --
 .../invocation/ssh/SshUseCaseInvocation.java    | 561 ------------
 .../externaltool/ExternalToolActivity.java      |  13 +-
 .../ExternalToolActivityConfigurationBean.java  |   2 +-
 .../ExternalToolActivityMimeTypeChecker.java    |   5 +-
 .../externaltool/InvocationCreator.java         |   5 +-
 .../externaltool/RetrieveLoginFromTaverna.java  |   2 +-
 .../externaltool/desc/RuntimeEnvironment.java   | 251 ++++++
 .../desc/RuntimeEnvironmentConstraint.java      | 160 ++++
 .../externaltool/desc/ScriptInput.java          | 134 +++
 .../externaltool/desc/ScriptInputStatic.java    |  73 ++
 .../externaltool/desc/ScriptInputUser.java      |  99 ++
 .../externaltool/desc/ScriptOutput.java         |  88 ++
 .../externaltool/desc/UseCaseDescription.java   | 897 +++++++++++++++++++
 .../externaltool/desc/UseCaseEnumeration.java   | 111 +++
 .../externaltool/gui/AskUserForPwPopup.java     |  74 ++
 .../externaltool/gui/PleaseWaitDialog.java      |  73 ++
 .../externaltool/invocation/AskUserForPw.java   |  32 +
 .../invocation/InvocationException.java         |  36 +
 .../invocation/UseCaseInvocation.java           | 321 +++++++
 .../ExternalToolLocalInvocationMechanism.java   |   2 -
 .../local/LocalInvocationCreator.java           |   6 +-
 .../local/LocalInvocationPersister.java         |   2 -
 .../local/LocalMechanismCreator.java            |   2 -
 .../local/LocalUseCaseInvocation.java           | 560 ++++++++++++
 .../ssh/ExternalToolSshInvocationMechanism.java |   5 -
 .../ssh/SshAutoLoginTrustEveryone.java          |  69 ++
 .../externaltool/ssh/SshInvocationCreator.java  |  11 +-
 .../ssh/SshInvocationPersister.java             |   4 +-
 .../externaltool/ssh/SshMechanismCreator.java   |   4 -
 .../activities/externaltool/ssh/SshNode.java    | 157 ++++
 .../externaltool/ssh/SshNodeFactory.java        |  66 ++
 .../activities/externaltool/ssh/SshPool.java    | 157 ++++
 .../externaltool/ssh/SshReference.java          | 222 +++++
 .../activities/externaltool/ssh/SshUrl.java     | 163 ++++
 .../externaltool/ssh/SshUrlToSshReference.java  |  54 ++
 .../externaltool/ssh/SshUseCaseInvocation.java  | 560 ++++++++++++
 ...pache.taverna.reference.ExternalReferenceSPI |   2 +-
 ...verna.reference.ValueToReferenceConverterSPI |   2 +-
 .../spring/external-tool-activity-context.xml   |   4 +-
 .../invocation/ssh/SshReference.hbm.xml         |   2 +-
 61 files changed, 4379 insertions(+), 4413 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
deleted file mode 100644
index 0ce0460..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/AskUserForPwPopup.java
+++ /dev/null
@@ -1,74 +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.gui;
-
-import javax.swing.JOptionPane;
-
-import de.uni_luebeck.inb.knowarc.usecases.invocation.AskUserForPw;
-import de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshNode;
-
-public final class AskUserForPwPopup implements AskUserForPw {
-	private SshNode ret;
-	private String pw, pp, kf, us;
-
-	public static String ask(String message, String title) {
-		return (String) JOptionPane.showInputDialog(null, message, title, JOptionPane.QUESTION_MESSAGE, null, null, "");
-	}
-
-	public static boolean askYN(String message, String title) {
-		return JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION;
-	}
-
-	public String getPassword() {
-		getUsername();
-		if (pw != null)
-			return pw;
-		pw = ask("Please enter your password for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
-		return pw;
-	}
-
-	public String getPassphrase() {
-		getUsername();
-		if (pp != null)
-			return pp;
-		pp = ask("Please enter your passphrase for " + kf + " used for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
-		return pp;
-	}
-
-	public String getKeyfile() {
-		getUsername();
-		if (kf != null)
-			return kf;
-		kf = ask("Please enter the keyfile for " + us + " @ " + ret.getHost(), us + " @ " + ret.getHost());
-		return kf;
-	}
-
-	public String getUsername() {
-		if (us != null)
-			return us;
-		us = ask("Please enter the username for " + ret.getHost(), "Username for " + ret.getHost());
-		return us;
-	}
-
-	public void setSshNode(SshNode sshNode) {
-		this.ret = sshNode;
-	}
-
-	public void authenticationSucceeded() {
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
deleted file mode 100755
index 2a643eb..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/gui/PleaseWaitDialog.java
+++ /dev/null
@@ -1,73 +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.gui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-
-public class PleaseWaitDialog extends JDialog {
-	private static final long serialVersionUID = 1L;
-
-	static PleaseWaitDialog instance = new PleaseWaitDialog();
-
-	public class WaitMessage{
-		public WaitMessage() {
-		}
-		
-		String str;
-		public void set(String newstr) {
-			synchronized (PleaseWaitDialog.instance) {
-				if(this.str != null && this.str.equals(newstr)) return;
-				if(this.str != null) messages.remove(this.str);
-				this.str = newstr;
-				if(this.str != null) messages.add(this.str);
-			}
-			updateDialog();
-		}
-		public void done() {
-			set(null);
-		}
-	}
-
-	private void updateDialog() {
-		synchronized (PleaseWaitDialog.instance) {
-			if(messages.size() > 0) this.setVisible(true);
-			else this.setVisible(false);
-			String t = "";
-			for (String  cur : messages) {
-				t += cur + "<br>";
-			}
-			l.setText("<html>"+t+"</html>");
-		}
-	}
-	
-	List<String> messages = new ArrayList<String>();
-	
-	JLabel l;
-	private PleaseWaitDialog() {
-		this.setAlwaysOnTop(true);
-		this.setTitle("Please wait");
-		l = new JLabel("");
-		this.add(l);
-		this.setSize(400, 100);
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
deleted file mode 100644
index c7fd889..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironment.java
+++ /dev/null
@@ -1,251 +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;
-
-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] + "'");
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
deleted file mode 100644
index ce7e055..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/RuntimeEnvironmentConstraint.java
+++ /dev/null
@@ -1,160 +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;
- 
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.log4j.Logger;
-
-
-/**
- * When use cases present a runtime environment, then they don't want to express
- * that these would provide such, but that these request such, i.e. they constrain
- * lists of potentially eligible queues. 
- * @author Steffen Moeller
- * @since 2008
- */
-public class RuntimeEnvironmentConstraint extends RuntimeEnvironment {
-	
-	private static Logger logger = Logger.getLogger(RuntimeEnvironmentConstraint.class);
-
-	private static String[] ACCEPTED_RELATIONS = new String[] {"=", ">=", "<=", ">", "<"};
-	/**
-	 * If there is no relation specified, presume >=
-	 */
-	private static String DEFAULT_RELATION = ">=";
-	
-	public static String[] getAcceptedRelations() {
-		return ACCEPTED_RELATIONS;
-	}
-
-	public static String getDefaultRelation() {
-		return DEFAULT_RELATION;
-	}
-
-	/**
-	 *  Identifies the relation between runtime environments to be tested
-	 */
-	protected String relation;
-	
-	/**
-	 * Accessor function for relation
-	 */
-	public String getRelation() {
-		return this.relation;
-	}
-	
-	/**
-	 * Tests of a relation is supported
-	 * @param relation
-	 * @return true iff in <, > , <=, >=, =
-	 */
-	public static boolean acceptedRelation(String relation) {
-		if ((null == relation) || relation.equals("")) {
-			return false;
-		}
-		return relation.equals("=")||relation.equals(">=")||relation.equals("<=")||relation.equals(">")||relation.equals("<");
-	}
-	
-	/**
-	 * Constructor
-	 * @param id - expects the name of the runtime environment together with the version to which the
-	 * @param relation - relates to (">","<","=",">=","<=")
-	 */
-	public RuntimeEnvironmentConstraint(String id, String relation) {
-		super(id);
-		if (null == relation || relation.equals("")) {
-			relation=RuntimeEnvironmentConstraint.getDefaultRelation();
-		}
-		if (relation.equals("==")) {
-			relation="=";
-		}
-		else if (relation.equals("=<")) {
-			relation="<=";
-		}
-		else if (!RuntimeEnvironmentConstraint.acceptedRelation(relation)) {
-			logger.warn("Unknown relation '"+relation+"', presuming '"+RuntimeEnvironmentConstraint.getDefaultRelation()+"'");
-			relation=RuntimeEnvironmentConstraint.getDefaultRelation();
-		}
-		this.relation=relation;
-	}
-	
-	/**
-	 * Perfoms test if the RuntimeEnvironment (RE) passed as argument fulfills the requirements set by the constraint.
-	 * @param re - RE to test
-	 * @return true iff the RE fulfills this REconstraint.
-	 */
-	public boolean isFulfilledBy(RuntimeEnvironment re) {
-		logger.info(re.getID()+" " + this.getRelation() + " "+this.getID() + " ?");
-		if (this.getRelation().equals("=")) {
-			logger.info("=");
-			return re.getID().equals(this.getID());
-		}
-		if (!re.getName().equals(this.getName())) {
-			logger.warn("Name match failed");
-			return false;
-		}
-		int c = RuntimeEnvironment.compareVersions(re.getVersion(),this.getVersion());
-		logger.info("c="+c);
-		if (this.getRelation().equals(">")) return c>0;
-		if (this.getRelation().equals(">=")) return c>=0;
-		if (this.getRelation().equals("<=")) return c<=0;
-		if (this.getRelation().equals("<")) return c<0;
-		throw new RuntimeException("Unknown/untreated releation '"+this.getRelation()+"'");
-	}
-	
-	/**
-	 * Iterates over all the RuntimeEnvironments passed as argument.
-	 * @param REs - list of RuntimeEnvironments, mostly those offered at a particular queue
-	 * @return true iff any RE among the REs passed as argument are fulfilling the constraint
-	 */
-	public boolean isFulfilledByAtLeastOneIn(Collection<RuntimeEnvironment> REs) {
-		boolean fulfilled = false;
-		Iterator<RuntimeEnvironment> i = REs.iterator();
-		while(i.hasNext() && !fulfilled) {
-			RuntimeEnvironment r = i.next();
-			fulfilled = this.isFulfilledBy(r);
-		}
-		return fulfilled;
-	}
-	/**
-	 * For testing purposes
-	 */
-	public static void main(String argv[]) {
-		try {
-			if (argv[0].equals("--help") || argv.length != 3) {
-				logger.error("Expecting arguments (<|>|=|<=|>=) runtime1-version runtime2-version");
-			}
-			else {
-				RuntimeEnvironmentConstraint r1 = new RuntimeEnvironmentConstraint(argv[1], argv[0]);
-				RuntimeEnvironment r2 = new RuntimeEnvironment(argv[2]);
-				logger.info("r1.getName(): "+r1.getName());
-				logger.info("r1.getVersion(): "+r1.getVersion());
-				logger.info("r1.getRelation(): "+r1.getRelation());
-				logger.info("r2.getName(): "+r2.getName());
-				logger.info("r2.getVersion(): "+r2.getVersion());
-				logger.info("r1.isFulfilledBy(r2): "+String.valueOf(r1.isFulfilledBy(r2)));
-			}
-		}
-		catch (Exception e) {
-			logger.error(e);
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
deleted file mode 100644
index 50747b5..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInput.java
+++ /dev/null
@@ -1,134 +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;
-
-import java.nio.charset.Charset;
-
-import org.apache.taverna.activities.externaltool.ExternalToolActivity;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * Integrates inputs to the grid that come from the use case descriptions
- * with those that are fed through the workflow.
- *
- * this class controls name and data storage of one input,
- * no matter where the data comes from
- */
-@ConfigurationBean(uri = ExternalToolActivity.URI + "#AbstractScriptInput")
-public abstract class ScriptInput {
-	/**
-	 * This input can be referenced under the name 'tag'.
-	 */
-	private String tag = null;
-	/**
-	 * In most cases, the data will be stored under a specific
-	 * filename.
-	 */
-	private boolean file = false;
-	/**
-	 * Set, if the name of the file to be executed is not
-	 * explicitly set but prepared by some automatism and referenced
-	 * via the tagging principle.
-	 */
-	private boolean tempFile = false;
-	/**
-	 * True if (!) the data is binary. (Text otherwise)
-	 */
-	private boolean binary = false;
-
-	private String charsetName = Charset.defaultCharset().name();
-	private boolean forceCopy = false;
-
-	/**
-	 * @return the tag
-	 */
-	public final String getTag() {
-		return tag;
-	}
-	/**
-	 * @param tag the tag to set
-	 */
-	@ConfigurationProperty(name = "tag", label = "Tag")
-	public final void setTag(String tag) {
-		this.tag = tag;
-	}
-	/**
-	 * @return the file
-	 */
-	public final boolean isFile() {
-		return file;
-	}
-	/**
-	 * @param file the file to set
-	 */
-	@ConfigurationProperty(name = "file", label = "File")
-	public final void setFile(boolean file) {
-		this.file = file;
-	}
-	/**
-	 * @return the tempFile
-	 */
-	public final boolean isTempFile() {
-		return tempFile;
-	}
-	/**
-	 * @param tempFile the tempFile to set
-	 */
-	@ConfigurationProperty(name = "tempFile", label = "Temporary File")
-	public final void setTempFile(boolean tempFile) {
-		this.tempFile = tempFile;
-	}
-	/**
-	 * @return the binary
-	 */
-	public final boolean isBinary() {
-		return binary;
-	}
-	/**
-	 * @param binary the binary to set
-	 */
-	@ConfigurationProperty(name = "binary", label = "Binary")
-	public final void setBinary(boolean binary) {
-		this.binary = binary;
-	}
-
-	public String getCharsetName() {
-		return this.charsetName;
-	}
-	/**
-	 * @param charsetName the charsetName to set
-	 */
-	@ConfigurationProperty(name = "charsetName", label = "Chararter Set")
-	public void setCharsetName(String charsetName) {
-		this.charsetName = charsetName;
-	}
-
-	@ConfigurationProperty(name = "forceCopy", label = "Force Copy")
-	public final void setForceCopy(boolean forceCopy) {
-		this.forceCopy = forceCopy;
-
-	}
-	/**
-	 * @return the forceCopy
-	 */
-	public boolean isForceCopy() {
-		return forceCopy;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
deleted file mode 100644
index 749e104..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputStatic.java
+++ /dev/null
@@ -1,73 +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;
-
-import org.apache.taverna.activities.externaltool.ExternalToolActivity;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * This subclass of script input is used to manage static content
- * which is embedded into the use case description.
- */
-@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptInputStatic")
-public class ScriptInputStatic extends ScriptInput {
-
-	public ScriptInputStatic() {
-	}
-
-	private String url = null;  //if this is set, load content from remote URL
-	private String content = null;
-
-	@Override
-	public String toString() {
-		return "InputStatic[tag: " +
-			getTag() + (isFile() ? ", file" : "") + (isTempFile() ? ", tempfile" : "") + (isBinary() ? ", binary" : "") + ", content: " + content + "]";
-	}
-
-	/**
-	 * @return the url
-	 */
-	public final String getUrl() {
-		return url;
-	}
-
-	/**
-	 * @param url the url to set
-	 */
-	@ConfigurationProperty(name = "url", label = "URL", required=false)
-	public final void setUrl(String url) {
-		this.url = url;
-	}
-
-	/**
-	 * @return the content
-	 */
-	public final String getContent() {
-		return content;
-	}
-
-	/**
-	 * @param content the content to set
-	 */
-	@ConfigurationProperty(name = "content", label = "Content", required=false)
-	public final void setContent(String content) {
-		this.content = content;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
deleted file mode 100644
index 715c13e..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptInputUser.java
+++ /dev/null
@@ -1,99 +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;
-import java.util.ArrayList;
-
-import org.apache.taverna.activities.externaltool.ExternalToolActivity;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * Internal description of output
- */
-@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptInput")
-public class ScriptInputUser extends ScriptInput {
-
-	/**
-	 * This input may be fed from multiple ouputs.
-	 */
-	private boolean list = false;
-	/**
-	 * True if the data from a list input in taverna is concatenated into one single input file.
-	 */
-	private boolean concatenate = false;
-
-	private ArrayList<String> mime = new ArrayList<String>();
-
-	@Override
-	public String toString() {
-		return "Input[tag: " + getTag() + (isFile() ? ", file" : "")
-				+ (isTempFile() ? ", tempfile" : "")
-				+ (isBinary() ? ", binary" : "") + (list ? ", list" : "")
-				+ (concatenate ? ", concatenate" : "")
-				+ " mime: " + mime.toString() + "]";
-	}
-
-	/**
-	 * @return the list
-	 */
-	public final boolean isList() {
-		return list;
-	}
-
-	/**
-	 * @param list the list to set
-	 */
-	@ConfigurationProperty(name = "list", label = "List")
-	public final void setList(boolean list) {
-		this.list = list;
-	}
-
-	/**
-	 * @return the concatenate
-	 */
-	public final boolean isConcatenate() {
-		return concatenate;
-	}
-
-	/**
-	 * @param concatenate the concatenate to set
-	 */
-	@ConfigurationProperty(name = "concatenate", label = "Concatenate")
-	public final void setConcatenate(boolean concatenate) {
-		this.concatenate = concatenate;
-	}
-
-	/**
-	 * @return the mime
-	 */
-	public final ArrayList<String> getMime() {
-		if (mime == null) {
-			mime = new ArrayList<String>();
-		}
-		return mime;
-	}
-
-	/**
-	 * @param mime the mime to set
-	 */
-	@ConfigurationProperty(name = "mime", label = "Mime Types", required=false)
-	public final void setMime(ArrayList<String> mime) {
-		this.mime = mime;
-	}
-};

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
deleted file mode 100644
index d824ad4..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/ScriptOutput.java
+++ /dev/null
@@ -1,88 +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;
-import java.util.ArrayList;
-
-import org.apache.taverna.activities.externaltool.ExternalToolActivity;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * Internal description of input
- */
-@ConfigurationBean(uri = ExternalToolActivity.URI + "#ScriptOutput")
-public class ScriptOutput {
-	private String path;
-	private boolean binary;
-	private ArrayList<String> mime = new ArrayList<String>();
-
-	@Override
-	public String toString() {
-		return "Output[path: " + path + (binary ? ", binary" : "")
-				+ " mime: " + mime.toString() + "]";
-	}
-
-	/**
-	 * @return the path
-	 */
-	public final String getPath() {
-		return path;
-	}
-
-	/**
-	 * @param path the path to set
-	 */
-	@ConfigurationProperty(name = "path", label = "Path")
-	public final void setPath(String path) {
-		this.path = path;
-	}
-
-	/**
-	 * @return the binary
-	 */
-	public final boolean isBinary() {
-		return binary;
-	}
-
-	/**
-	 * @param binary the binary to set
-	 */
-	@ConfigurationProperty(name = "binary", label = "Binary")
-	public final void setBinary(boolean binary) {
-		this.binary = binary;
-	}
-
-	/**
-	 * @return the mime
-	 */
-	public final ArrayList<String> getMime() {
-		if (mime == null) {
-			mime = new ArrayList<String>();
-		}
-		return mime;
-	}
-
-	/**
-	 * @param mime the mime to set
-	 */
-	@ConfigurationProperty(name = "mime", label = "Mime Types", required=false)
-	public final void setMime(ArrayList<String> mime) {
-		this.mime = mime;
-	}
-};

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
deleted file mode 100644
index 1c5914e..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseDescription.java
+++ /dev/null
@@ -1,897 +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;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.swing.ImageIcon;
-
-import org.apache.taverna.activities.externaltool.ExternalToolActivity;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationBean;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty;
-import org.apache.taverna.workflowmodel.processor.config.ConfigurationProperty.OrderPolicy;
-import org.apache.taverna.workflowmodel.serialization.DeserializationException;
-import org.apache.taverna.workflowmodel.utils.Tools;
-
-import org.apache.log4j.Logger;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.JDOMException;
-import org.jdom.input.SAXBuilder;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Class representation of XML-description of UseCases
- */
-@ConfigurationBean(uri = ExternalToolActivity.URI + "#ToolDescription")
-public class UseCaseDescription {
-
-	private static Logger logger = Logger.getLogger(UseCaseDescription.class);
-
-	/**
-	 * Identifier for the retrieval of this UseCase in the sharedRepository
-	 * database, respectively its XML export.
-	 */
-	private String usecaseid = "";
-	/**
-	 * Workflow Elements now can get a group identifier. There may be subgroups
-	 * divided by :
-	 */
-	private String group = "";
-	/**
-	 * Textual description of the use case itself. This description is very
-	 * short to fit on the single line that is prepared for such descriptions in
-	 * the Taverna workflow element list.
-	 */
-	private String description = "";
-	/**
-	 * What is actually executed on the shell.
-	 */
-	private String command = "";
-
-	/**
-	 * Accessor function of command
-	 *
-	 * @return shell-executable series of commands
-	 */
-	public String getCommand() {
-		if (null == command) {
-			// FIXME: Is this possible?
-			return "";
-		} else {
-			return command;
-		}
-	}
-
-	/**
-	 * Routine that may be executed as a first check if the program is indeed
-	 * installed.
-	 */
-	private String test_local = null;
-
-	/**
-	 * URL of an icon that would help users to recognise the use case
-	 */
-	private String icon_url = null;
-
-	private int preparingTimeoutInSeconds = 20 * 60; // 20 minutes
-	private int executionTimeoutInSeconds = 30 * 60; // 30 minutes
-
-	private List<String> tags = new ArrayList<String>();
-	private List<RuntimeEnvironmentConstraint> REs = new ArrayList<RuntimeEnvironmentConstraint>();
-	private ArrayList<String> queue_preferred = new ArrayList<String>();
-	private ArrayList<String> queue_deny = new ArrayList<String>();
-
-	private List<ScriptInputStatic> static_inputs = new ArrayList<ScriptInputStatic>();
-	private Map<String, ScriptInput> inputs = new HashMap<String, ScriptInput>();
-	private Map<String, ScriptOutput> outputs = new HashMap<String, ScriptOutput>();
-
-	private boolean includeStdIn = false;
-	private boolean includeStdOut = true;
-	private boolean includeStdErr = true;
-
-	private List<Integer> validReturnCodes = new ArrayList<Integer>();
-	
-	/**
-	 * Default constructor to make xstream happy
-	 */
-	public UseCaseDescription() {
-		
-	}
-
-	/**
-	 * Constructor, for special purpose usecases.
-	 *
-	 * @param usecaseid
-	 */
-	public UseCaseDescription(String usecaseid) {
-		this.setUsecaseid(usecaseid);
-	}
-
-	/**
-	 * Constructor, expects an input stream containing the xml. for example, use
-	 * getClass().getClassLoader().getResourceAsStream("..") to load a usecase
-	 * from your program jar
-	 */
-	public UseCaseDescription(InputStream programAsStream) throws DeserializationException {
-		SAXBuilder builder = new SAXBuilder();
-		Document doc;
-		try {
-			doc = builder.build(programAsStream);
-			programAsStream.close();
-		} catch (JDOMException e) {
-			throw new DeserializationException("Error deserializing usecase", e);
-		} catch (IOException e) {
-			throw new DeserializationException("Error deserializing usecase", e);
-		}
-		readFromXmlElement(doc.getRootElement());
-	}
-
-	/**
-	 * Constructor, expects an XML-root to dissect.
-	 */
-	public UseCaseDescription(Element programNode) throws DeserializationException {
-		readFromXmlElement(programNode);
-	}
-
-/**
- * Produce an XML description of the UseCaseDescription
- */
-	public Element writeToXMLElement() {
-		Element programNode = new Element("program");
-		programNode.setAttribute("name", getUsecaseid());
-		programNode.setAttribute("description", getDescription());
-		// Always use element version of command
-//		programNode.setAttribute("command", getCommand());
-		Element commandNode = new Element("command");
-		commandNode.addContent(getCommand());
-		programNode.addContent(commandNode);
-		programNode.setAttribute("timeout", Integer.toString(getExecutionTimeoutInSeconds()));
-		programNode.setAttribute("preparing_timeout", Integer.toString(getPreparingTimeoutInSeconds()));
-		programNode.setAttribute("includeStdIn", Boolean.toString(isIncludeStdIn()));
-		programNode.setAttribute("includeStdOut", Boolean.toString(isIncludeStdOut()));
-		programNode.setAttribute("includeStdErr", Boolean.toString(isIncludeStdErr()));
-		for (ScriptInputStatic si : getStatic_inputs()) {
-			Element staticNode = new Element("static");
-			if (si.isBinary()) {
-				staticNode.setAttribute("binary", "true");
-			}
-			if (si.isForceCopy()) {
-				staticNode.setAttribute("forceCopy", "true");
-			}
-			if (si.isFile()) {
-				Element fileNode = new Element("file");
-				fileNode.setAttribute("path", si.getTag());
-				staticNode.addContent(fileNode);
-			} else if (si.isTempFile()) {
-				Element tempfileNode = new Element("tempfile");
-				tempfileNode.setAttribute("tag", si.getTag());
-				staticNode.addContent(tempfileNode);
-			} else {
-				Element replaceNode = new Element("replace");
-				replaceNode.setAttribute("tag", si.getTag());
-				staticNode.addContent(replaceNode);
-			}
-			if (si.getUrl() != null) {
-				Element contentNode = new Element("content");
-				contentNode.setAttribute("url", si.getUrl());
-				staticNode.addContent(contentNode);
-			} else {
-				Element contentNode = new Element("content");
-				contentNode.addContent((String) si.getContent());
-				staticNode.addContent(contentNode);
-			}
-			programNode.addContent(staticNode);
-		}
-		for (Entry<String, ScriptInput> entry : getInputs().entrySet()) {
-			String name = entry.getKey();
-			ScriptInputUser si = (ScriptInputUser) entry.getValue();
-			Element inputNode = new Element("input");
-			inputNode.setAttribute("name", name);
-			if (si.isBinary()) {
-				inputNode.setAttribute("binary", "true");
-			}
-			if (si.isForceCopy()) {
-				inputNode.setAttribute("forceCopy", "true");
-			}
-			if (si.isConcatenate()) {
-				inputNode.setAttribute("concatenate", "true");
-			}
-			if (si.isList()) {
-				inputNode.setAttribute("list", "true");
-			}
-			if (si.isFile()) {
-				Element fileNode = new Element("file");
-				fileNode.setAttribute("path", si.getTag());
-				inputNode.addContent(fileNode);
-			} else if (si.isTempFile()) {
-				Element tempfileNode = new Element("tempfile");
-				tempfileNode.setAttribute("tag", si.getTag());
-				inputNode.addContent(tempfileNode);
-			} else {
-				Element replaceNode = new Element("replace");
-				replaceNode.setAttribute("tag", si.getTag());
-				inputNode.addContent(replaceNode);
-			}
-			for (String mime : si.getMime()) {
-				Element mimeNode = new Element("mime");
-				mimeNode.setAttribute("type", mime);
-				inputNode.addContent(mimeNode);
-			}
-			programNode.addContent(inputNode);
-		}
-		for (Entry<String, ScriptOutput> entry : getOutputs().entrySet()) {
-			String name = entry.getKey();
-			ScriptOutput so = entry.getValue();
-			Element outputNode = new Element("output");
-			outputNode.setAttribute("name", name);
-			if (so.isBinary()) {
-				outputNode.setAttribute("binary", "true");
-			}
-			Element fromfileNode = new Element("fromfile");
-			fromfileNode.setAttribute("path", so.getPath());
-			outputNode.addContent(fromfileNode);
-			for (String mime : so.getMime()) {
-				Element mimeNode = new Element("mime");
-				mimeNode.setAttribute("type", mime);
-				outputNode.addContent(mimeNode);
-			}
-			programNode.addContent(outputNode);
-		}
-		for (RuntimeEnvironmentConstraint rec : getREs()) {
-			Element rteNode = new Element("rte");
-			rteNode.setAttribute("name", rec.getID());
-			rteNode.setAttribute("relation", rec.getRelation());
-			programNode.addContent(rteNode);
-		}
-		if ((group != null) && !group.isEmpty()) {
-			Element groupNode = new Element("group");
-			groupNode.setAttribute("name", group);
-			programNode.addContent(groupNode);
-		}
-		if ((test_local != null) && !test_local.isEmpty()) {
-			Element testNode = new Element("test");
-			testNode.setAttribute("local", test_local);
-			programNode.addContent(testNode);
-		}
-		if ((icon_url != null) && !icon_url.isEmpty()) {
-			Element iconNode = new Element("icon");
-			iconNode.setAttribute("url", icon_url);
-			programNode.addContent(iconNode);
-		}
-		if (!getQueue_preferred().isEmpty() || !getQueue_deny().isEmpty()) {
-			Element queueNode = new Element("queue");
-			for (String url : getQueue_preferred()) {
-				Element preferredNode = new Element("prefer");
-				preferredNode.setAttribute("url", url);
-				queueNode.addContent(preferredNode);
-			}
-			for (String url : getQueue_deny()) {
-				Element denyNode = new Element("deny");
-				denyNode.setAttribute("url", url);
-				queueNode.addContent(denyNode);
-			}
-			programNode.addContent(queueNode);
-		}
-			Element validReturnCodesNode = new Element("validReturnCodes");
-			validReturnCodesNode.setAttribute("codes", getReturnCodesAsText());
-			programNode.addContent(validReturnCodesNode);
-
-		return programNode;
-	}
-	/**
-	 * Specifies the UseCaseDescription from the root of an XML description
-	 * which is accessible online.
-	 *
-	 * @param programNode
-	 * @throws DeserializationException
-	 */
-	private void readFromXmlElement(Element programNode) throws DeserializationException {
-		if (programNode.getName().compareToIgnoreCase("program") != 0)
-			throw new DeserializationException("Expected <program>, read '" + programNode.getName() + "'");
-
-		setUsecaseid(programNode.getAttributeValue("name"));
-		setDescription(programNode.getAttributeValue("description"));
-		setCommand(programNode.getAttributeValue("command"));
-		String timeoutStr = programNode.getAttributeValue("timeout");
-		if (timeoutStr != null)
-			setExecutionTimeoutInSeconds(Integer.parseInt(timeoutStr));
-		timeoutStr = programNode.getAttributeValue("preparing_timeout");
-		if (timeoutStr != null)
-			setPreparingTimeoutInSeconds(Integer.parseInt(timeoutStr));
-
-		String includeStdInStr = programNode.getAttributeValue("includeStdIn");
-		if (includeStdInStr != null && !includeStdInStr.isEmpty()) {
-			setIncludeStdIn(includeStdInStr.equals("true"));
-		}
-
-		String includeStdOutStr = programNode.getAttributeValue("includeStdOut");
-		if (includeStdOutStr != null && !includeStdOutStr.isEmpty()) {
-			setIncludeStdOut(includeStdOutStr.equals("true"));
-		}
-
-		String includeStdErrStr = programNode.getAttributeValue("includeStdErr");
-		if (includeStdErrStr != null && !includeStdErrStr.isEmpty()) {
-			setIncludeStdErr(includeStdErrStr.equals("true"));
-		}
-
-		for (Object cur_ob : programNode.getChildren()) {
-			Element cur = (Element) cur_ob;
-
-			String name = cur.getAttributeValue("name");
-
-			String type = cur.getName();
-			boolean binary = false;
-			if (null != cur.getAttributeValue("binary") && cur.getAttributeValue("binary").equalsIgnoreCase("true")) {
-				binary = true;
-			}
-			boolean list = false;
-			if (null != cur.getAttributeValue("list") && cur.getAttributeValue("list").equalsIgnoreCase("true")) {
-				list = true;
-			}
-			boolean concatenate = false;
-			if (null != cur.getAttributeValue("concatenate") && cur.getAttributeValue("concatenate").equalsIgnoreCase("true")) {
-				concatenate = true;
-			}
-			boolean forceCopy = false;
-			if (null != cur.getAttributeValue("forceCopy") && cur.getAttributeValue("forceCopy").equalsIgnoreCase("true")) {
-				forceCopy = true;
-			}
-
-			Element inner = null;
-			String innerType = null, tag = null, path = null;
-			if (cur.getChildren().size() > 0) {
-				inner = (Element) cur.getChildren().get(0);
-				innerType = inner.getName();
-				tag = inner.getAttributeValue("tag");
-				path = inner.getAttributeValue("path");
-			}
-			// build mime type declaration list
-			ArrayList<String> mime = new ArrayList<String>();
-			for (Object child : cur.getChildren()) {
-				Element curChild = (Element) child;
-				if (curChild.getName().equalsIgnoreCase("mime")) {
-					mime.add(curChild.getAttributeValue("type"));
-				}
-			}
-			if (type.equalsIgnoreCase("static")) {
-				ScriptInputStatic si = new ScriptInputStatic();
-				Element content = cur.getChild("content");
-				if (content == null)
-					throw new DeserializationException("FIXME: script tag without embedded content tag");
-				si.setUrl(content.getAttributeValue("url"));
-				if (si.getUrl() == null)
-					si.setContent(content.getText());
-				fillInputDescription(si, binary, forceCopy, innerType, tag, path);
-				getStatic_inputs().add(si);
-			} else if (type.equalsIgnoreCase("input")) {
-				ScriptInputUser indesc = new ScriptInputUser();
-				indesc.setList(list);
-				indesc.setMime(mime);
-				indesc.setConcatenate(concatenate);
-				fillInputDescription(indesc, binary, forceCopy, innerType, tag, path);
-				getInputs().put(Tools.sanitiseName(name), indesc);
-			} else if (type.equalsIgnoreCase("output")) {
-				ScriptOutput outdesc = new ScriptOutput();
-				outdesc.setMime(mime);
-
-				boolean ok = true;
-				if (null == innerType) {
-					// don't know what to do
-					throw new DeserializationException("FIXME: Found null == innerType for output, is this the bug?");
-				} else if (innerType.equalsIgnoreCase("fromfile")) {
-					outdesc.setPath(path);
-					outdesc.setBinary(binary);
-				} else {
-					throw new DeserializationException("Problem reading output port: unknown innerType '" + innerType + "'");
-				}
-				if (ok) {
-					getOutputs().put(Tools.sanitiseName(name), outdesc);
-				}
-			} else if (type.equalsIgnoreCase("rte") || type.equalsIgnoreCase("re")) {
-				getREs().add(new RuntimeEnvironmentConstraint(name, cur.getAttributeValue("relation")));
-			} else if (type.equalsIgnoreCase("group")) {
-				group = name;
-			} else if (type.equalsIgnoreCase("test")) {
-				test_local = cur.getAttributeValue("local");
-			} else if (type.equalsIgnoreCase("icon")) {
-				icon_url = cur.getAttributeValue("url");
-			} else if (type.equalsIgnoreCase("queue")) {
-				for (Object child_ob : cur.getChildren()) {
-					Element child = (Element) child_ob;
-					if (child.getName().equalsIgnoreCase("prefer"))
-						getQueue_preferred().add(child.getAttributeValue("url"));
-					else if (child.getName().equalsIgnoreCase("deny"))
-						getQueue_deny().add(child.getAttributeValue("url"));
-					else
-						throw new DeserializationException("Error while reading usecase " + this.getUsecaseid() + ": invalid queue entry");
-				}
-			} else if (type.equalsIgnoreCase("command")) {
-				// i like to have the ability to inject complete shell script
-				// fragments into the use case,
-				// so this should be replace and should allow multiple lines
-				if ((getCommand() != null) && !getCommand().isEmpty()) {
-					throw new DeserializationException("You have specified both command attribute and command tag.");
-				}
-				setCommand(cur.getText());
-			} else if (type.equalsIgnoreCase("validReturnCodes")) {
-					String codeString = cur.getAttributeValue("codes");
-					if (codeString != null) {
-						setReturnCodesAsText(codeString);
-					}
-			}
-			else {
-				throw new DeserializationException("Unexpected and uninterpreted attribute " + type);
-			}
-		}
-	}
-
-	private void fillInputDescription(ScriptInput fillMe, boolean binary, boolean forceCopy, String innerType, String tag, String path) throws DeserializationException {
-		fillMe.setBinary(binary);
-		fillMe.setForceCopy(forceCopy);
-		if (null == innerType) {
-			// don't know what to do
-			throw new DeserializationException("FIXME: Found null == innerType for input, is this the bug?");
-		} else if (innerType.equalsIgnoreCase("replace")) {
-			fillMe.setTag(tag);
-			fillMe.setTempFile(false);
-			fillMe.setFile(false);
-			getTags().add(tag);
-		} else if (innerType.equalsIgnoreCase("tempfile")) {
-			fillMe.setTag(tag);
-			fillMe.setTempFile(true);
-			fillMe.setFile(false);
-			getTags().add(tag);
-		} else if (innerType.equalsIgnoreCase("file")) {
-			fillMe.setTag(path);
-			fillMe.setTempFile(false);
-			fillMe.setFile(true);
-		} else {
-			throw new DeserializationException("Problem reading input port: unknown innerType '" + innerType + "'");
-		}
-	}
-
-	/**
-	 * returns icon that is referenced in use case description
-	 */
-	public ImageIcon getImageIcon() {
-		if (null == icon_url) return null;
-		try {
-			URL u = new URL(icon_url);
-			return new ImageIcon(u, getUsecaseid());
-		} catch (Exception e) {
-			logger.error(e);
-			return null;
-		}
-	}
-
-	/**
-	 * String representation of the use case. It also contains interesting
-	 * information on the availability of resources in the grid to actually
-	 * execute that workflow element.
-	 *
-	 * @return String
-	 */
-	@Override
-	public String toString() {
-		List<String> hlp = new ArrayList<String>();
-		hlp.add("usecaseid: " + getUsecaseid());
-		hlp.add("description: " + getDescription());
-		hlp.add("group: " + group);
-		hlp.add("test: " + test_local);
-		hlp.add("tags: " + getTags());
-		for (Map.Entry<String, ScriptInput> cur : getInputs().entrySet()) {
-			hlp.add(">" + cur.getKey() + ">: " + cur.getValue().toString());
-		}
-		for (Map.Entry<String, ScriptOutput> cur : getOutputs().entrySet()) {
-			hlp.add("<" + cur.getKey() + "<: " + cur.getValue().toString());
-		}
-		hlp.add("RE: " + getREs().toString());
-		hlp.add("preferred queues: " + getQueue_preferred());
-		hlp.add("denied queues: " + getQueue_deny());
-		String tos = super.toString() + "[";
-		for (int i = 0; i < hlp.size(); i++) {
-			if (i != 0)
-				tos += ", ";
-			tos += hlp.get(i);
-		}
-		return tos + " ]";
-	}
-
-	/**
-	 * hajo's test just pass an url or file url to an xml file
-	 *
-	 * @throws IOException
-	 * @throws MalformedURLException
-	 * @throws DeserializationException
-	 */
-	public static void main(String[] argv) throws MalformedURLException, IOException, DeserializationException {
-		UseCaseDescription d = new UseCaseDescription(new URL(argv[0]).openStream());
-		logger.info(d.getCommand());
-	}
-
-	/**
-	 * @param command the command to set
-	 */
-	@ConfigurationProperty(name = "command", label = "Command", description="What is actually executed on the shell")
-	public void setCommand(String command) {
-		this.command = command;
-	}
-
-	/**
-	 * @param description the description to set
-	 */
-	@ConfigurationProperty(name = "description", label = "Description", description="Textual description of the tool", required=false, uri="http://purl.org/dc/elements/1.1/description")
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	/**
-	 * @return the description
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * @param executionTimeoutInSeconds the executionTimeoutInSeconds to set
-	 */
-	@ConfigurationProperty(name = "executionTimeoutInSeconds", label = "Execution Timeout In Seconds")
-	public void setExecutionTimeoutInSeconds(int executionTimeoutInSeconds) {
-		this.executionTimeoutInSeconds = executionTimeoutInSeconds;
-	}
-
-	/**
-	 * @return the executionTimeoutInSeconds
-	 */
-	public int getExecutionTimeoutInSeconds() {
-		return executionTimeoutInSeconds;
-	}
-
-	/**
-	 * @param inputs the inputs to set
-	 */
-	public void setInputs(Map<String, ScriptInput> inputs) {
-		this.inputs = inputs;
-	}
-
-	@ConfigurationProperty(name = "inputs", label = "Inputs", required=false)
-	public void setInputs(Set<InputMap> inputs) {
-		if (inputs != null) {
-			this.inputs = new HashMap<String, ScriptInput>();
-			for (InputMap inputMap : inputs) {
-				this.inputs.put(inputMap.getPort(), inputMap.getInput());
-			}
-		} else {
-			this.inputs = null;
-		}
-	}
-
-	/**
-	 * @return the inputs
-	 */
-	public Map<String, ScriptInput> getInputs() {
-		if (inputs == null) {
-			inputs = new HashMap<String, ScriptInput>();
-		}
-		return inputs;
-	}
-
-	/**
-	 * @param outputs the outputs to set
-	 */
-	public void setOutputs(Map<String, ScriptOutput> outputs) {
-		this.outputs = outputs;
-	}
-
-	@ConfigurationProperty(name = "outputs", label = "Outputs", required=false)
-	public void setOutputs(Set<OutputMap> outputs) {
-		if (outputs != null) {
-			this.outputs = new HashMap<String, ScriptOutput>();
-			for (OutputMap outputMap : outputs) {
-				this.outputs.put(outputMap.getPort(), outputMap.getOutput());
-			}
-		} else {
-			this.outputs = null;
-		}
-	}
-
-	/**
-	 * @return the outputs
-	 */
-	public Map<String, ScriptOutput> getOutputs() {
-		if (outputs == null) {
-			outputs = new HashMap<String, ScriptOutput>();
-		}
-		return outputs;
-	}
-
-	/**
-	 * @param preparingTimeoutInSeconds the preparingTimeoutInSeconds to set
-	 */
-	@ConfigurationProperty(name = "preparingTimeoutInSeconds", label = "Preparing Timeout In Seconds")
-	public void setPreparingTimeoutInSeconds(int preparingTimeoutInSeconds) {
-		this.preparingTimeoutInSeconds = preparingTimeoutInSeconds;
-	}
-
-	/**
-	 * @return the preparingTimeoutInSeconds
-	 */
-	public int getPreparingTimeoutInSeconds() {
-		return preparingTimeoutInSeconds;
-	}
-
-	/**
-	 * @param queue_deny the queue_deny to set
-	 */
-	public void setQueue_deny(ArrayList<String> queue_deny) {
-		this.queue_deny = queue_deny;
-	}
-
-	/**
-	 * @return the queue_deny
-	 */
-	public ArrayList<String> getQueue_deny() {
-		if (queue_deny == null) {
-			queue_deny = new ArrayList<String>();
-		}
-		return queue_deny;
-	}
-
-	/**
-	 * @param queue_preferred the queue_preferred to set
-	 */
-	public void setQueue_preferred(ArrayList<String> queue_preferred) {
-		this.queue_preferred = queue_preferred;
-	}
-
-	/**
-	 * @return the queue_preferred
-	 */
-	public ArrayList<String> getQueue_preferred() {
-		if (queue_preferred == null) {
-			queue_preferred = new ArrayList<String>();
-		}
-		return queue_preferred;
-	}
-
-	/**
-	 * @param rEs the rEs to set
-	 */
-	public void setREs(List<RuntimeEnvironmentConstraint> rEs) {
-		REs = rEs;
-	}
-
-	/**
-	 * @return the rEs
-	 */
-	public List<RuntimeEnvironmentConstraint> getREs() {
-		if (REs == null) {
-			REs = new ArrayList<RuntimeEnvironmentConstraint>();
-		}
-		return REs;
-	}
-
-	/**
-	 * @param static_inputs the static_inputs to set
-	 */
-	@ConfigurationProperty(name = "staticInputs", label = "Static Inputs", ordering=OrderPolicy.NON_ORDERED, required=false)
-	public void setStatic_inputs(List<ScriptInputStatic> static_inputs) {
-		this.static_inputs = static_inputs;
-	}
-
-	/**
-	 * @return the static_inputs
-	 */
-	public List<ScriptInputStatic> getStatic_inputs() {
-		if (static_inputs == null) {
-			static_inputs = new ArrayList<ScriptInputStatic>();
-		}
-		return static_inputs;
-	}
-
-	/**
-	 * @param tags the tags to set
-	 */
-	public void setTags(List<String> tags) {
-		this.tags = tags;
-	}
-
-	/**
-	 * @return the tags
-	 */
-	public List<String> getTags() {
-		if (tags == null) {
-			tags = new ArrayList<String>();
-		}
-		return tags;
-	}
-
-	/**
-	 * @param usecaseid the usecaseid to set
-	 */
-	@ConfigurationProperty(name = "usecaseid", label = "Title", uri="http://purl.org/dc/elements/1.1/title", required=false)
-	public void setUsecaseid(String usecaseid) {
-		this.usecaseid = usecaseid;
-	}
-
-	/**
-	 * @return the usecaseid
-	 */
-	public String getUsecaseid() {
-		return usecaseid;
-	}
-
-	public boolean isIncludeStdIn() {
-		return includeStdIn;
-	}
-
-	@ConfigurationProperty(name = "includeStdIn", label = "Include STDIN")
-	public void setIncludeStdIn(boolean includeStdIn) {
-		this.includeStdIn = includeStdIn;
-	}
-
-	public boolean isIncludeStdOut() {
-		return includeStdOut;
-	}
-
-	@ConfigurationProperty(name = "includeStdOut", label = "Include STDOUT")
-	public void setIncludeStdOut(boolean includeStdOut) {
-		this.includeStdOut = includeStdOut;
-	}
-
-	public boolean isIncludeStdErr() {
-		return includeStdErr;
-	}
-
-	@ConfigurationProperty(name = "includeStdErr", label = "Include STDERR")
-	public void setIncludeStdErr(boolean includeStdErr) {
-		this.includeStdErr = includeStdErr;
-	}
-
-	/**
-	 * @return the validReturnCodes
-	 */
-	public List<Integer> getValidReturnCodes() {
-		if (validReturnCodes == null) {
-			validReturnCodes = new ArrayList<Integer>();
-		}
-		if (validReturnCodes.isEmpty()) {
-			validReturnCodes.add(0);
-		}
-		return validReturnCodes;
-	}
-
-	/**
-	 * @param validReturnCodes the validReturnCodes to set
-	 */
-	public void setValidReturnCodes(List<Integer> validReturnCodes) {
-		this.validReturnCodes = validReturnCodes;
-	}
-
-	public String getReturnCodesAsText() {
-		return StringUtils.join(getValidReturnCodes(), ",");
-	}
-
-	public void setReturnCodesAsText(String text) {
-		if (getValidReturnCodes() == null) {
-			validReturnCodes = new ArrayList<Integer>();
-		}
-		validReturnCodes.clear();
-		String[] codes = text.split(",");
-		for (String code : codes) {
-			try {
-				Integer codeInt = new Integer(code);
-				if (!validReturnCodes.contains(codeInt)) {
-					validReturnCodes.add(codeInt);
-				}
-			}
-			catch (NumberFormatException e) {
-				logger.error(e);
-			}
-		}
-		if (validReturnCodes.isEmpty()) {
-			validReturnCodes.add(0);
-		}
-		Collections.sort(validReturnCodes);
-	}
-
-	/**
-	 * @return the group
-	 */
-	public String getGroup() {
-		return group;
-	}
-
-	/**
-	 * @param group the group to set
-	 */
-	public void setGroup(String group) {
-		this.group = group;
-	}
-
-	/**
-	 * @return the icon_url
-	 */
-	public String getIcon_url() {
-		return icon_url;
-	}
-
-	@ConfigurationBean(uri = ExternalToolActivity.URI + "#OutputMap")
-	public static class OutputMap {
-		private String port;
-
-		private ScriptOutput output;
-
-		public String getPort() {
-			return port;
-		}
-
-		@ConfigurationProperty(name = "port", label = "Port")
-		public void setPort(String port) {
-			this.port = port;
-		}
-
-		public ScriptOutput getOutput() {
-			return output;
-		}
-
-		@ConfigurationProperty(name = "output", label = "Output")
-		public void setOutput(ScriptOutput output) {
-			this.output = output;
-		}
-	}
-
-	@ConfigurationBean(uri = ExternalToolActivity.URI + "#InputMap")
-	public static class InputMap {
-		private String port;
-
-		private ScriptInputUser input;
-
-		public String getPort() {
-			return port;
-		}
-
-		@ConfigurationProperty(name = "port", label = "Port")
-		public void setPort(String port) {
-			this.port = port;
-		}
-
-		public ScriptInputUser getInput() {
-			return input;
-		}
-
-		@ConfigurationProperty(name = "input", label = "Input")
-		public void setInput(ScriptInputUser input) {
-			this.input = input;
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
deleted file mode 100644
index d5c5d2c..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/UseCaseEnumeration.java
+++ /dev/null
@@ -1,111 +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;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.taverna.workflowmodel.serialization.DeserializationException;
-
-import org.apache.log4j.Logger;
-import org.jdom.Document;
-import org.jdom.Element;
-import org.jdom.JDOMException;
-import org.jdom.input.SAXBuilder;
-
-public class UseCaseEnumeration {
-
-	private static Logger logger = Logger.getLogger(UseCaseEnumeration.class);
-
-	public static List<UseCaseDescription> readDescriptionsFromUrl(String xmlFileUrl) throws IOException {
-
-		List<UseCaseDescription> ret = new ArrayList<UseCaseDescription>();
-		URLConnection con = null;
-		try {
-			URL url = new URL(xmlFileUrl);
-
-			con = url.openConnection();
-			con.setConnectTimeout(4000);
-			ret = readDescriptionsFromStream(con.getInputStream());
-			
-		} catch (IOException ioe) {
-			logger.error("Problem retrieving from " + xmlFileUrl);
-			logger.error(ioe);
-			throw ioe;
-		}
-		finally {
-
-		}
-
-		return ret;
-
-	}
-	
-	public static List<UseCaseDescription> readDescriptionsFromStream(InputStream is) {
-		
-		List<UseCaseDescription> ret = new ArrayList<UseCaseDescription>();
-
-		SAXBuilder builder = new SAXBuilder();
-		Document doc = null;
-		try {
-			doc = builder.build(is);
-			is.close();
-		} catch (JDOMException e1) {
-			logger.error(e1);
-			return ret;
-		} catch (IOException e1) {
-			logger.error(e1);
-			return ret;
-		} finally {
-			try {
-				is.close();
-			} catch (IOException e) {
-				logger.error(e);
-			}
-		}
-
-		Element usecases = doc.getRootElement();
-		for (Object ochild : usecases.getChildren()) {
-			Element child = (Element) ochild;
-			if (child.getName().equalsIgnoreCase("program")) {
-					try {
-						ret.add(new UseCaseDescription(child));
-					} catch (DeserializationException e) {
-						logger.error(e);
-					}
-			}
-		}
-		return ret;
-	}
-
-	public static UseCaseDescription readDescriptionFromUrl(
-			String repositoryUrl, String id) throws IOException {
-		List<UseCaseDescription> descriptions = readDescriptionsFromUrl(repositoryUrl);
-		for (UseCaseDescription usecase : descriptions) {
-			if (usecase.getUsecaseid().equals(id)) {
-				return usecase;
-			}
-		}
-		return null;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
deleted file mode 100644
index e912db1..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/AskUserForPw.java
+++ /dev/null
@@ -1,32 +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;
-
-public interface AskUserForPw {
-
-	// we will try keyfile first
-	public String getKeyfile();
-	public String getPassphrase();
-
-	// then username+password
-	public String getUsername();
-	public String getPassword();
-
-	public void authenticationSucceeded();
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
deleted file mode 100644
index 2f4485f..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/InvocationException.java
+++ /dev/null
@@ -1,36 +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;
-
-public class InvocationException extends Exception {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 437316164959631591L;
-
-	public InvocationException(String string) {
-		super(string);
-	}
-	
-	public InvocationException(Exception e) {
-		super(e);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/1e35285b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
----------------------------------------------------------------------
diff --git a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java b/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
deleted file mode 100644
index d6b2502..0000000
--- a/taverna-external-tool-activity/src/main/java/de/uni_luebeck/inb/knowarc/usecases/invocation/UseCaseInvocation.java
+++ /dev/null
@@ -1,322 +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;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.io.IOUtils;
-
-import org.apache.taverna.invocation.InvocationContext;
-import org.apache.taverna.reference.ExternalReferenceSPI;
-import org.apache.taverna.reference.Identified;
-import org.apache.taverna.reference.IdentifiedList;
-import org.apache.taverna.reference.ReferenceService;
-import org.apache.taverna.reference.ReferenceServiceException;
-import org.apache.taverna.reference.ReferenceSet;
-import org.apache.taverna.reference.T2Reference;
-import org.apache.taverna.reference.impl.external.object.InlineByteArrayReferenceBuilder;
-import org.apache.taverna.reference.impl.external.object.InlineStringReferenceBuilder;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInput;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInputStatic;
-import de.uni_luebeck.inb.knowarc.usecases.ScriptInputUser;
-import de.uni_luebeck.inb.knowarc.usecases.UseCaseDescription;
-
-/**
- * An abstraction of various forms to bring job using the software that is
- * referenced as a use case towards their execution.
- * 
- * @author Hajo Nils Krabbenhoeft with some contribution by
- * @author Steffen Moeller
- */
-public abstract class UseCaseInvocation {
-	
-	private String runId;
-	
-	
-	protected static String getActualOsCommand(String osCommand, String pathToOriginal,
-			String targetName, String pathTarget) {
-				String actualOsCommand = osCommand;
-				actualOsCommand = actualOsCommand.replace("%%PATH_TO_ORIGINAL%%", pathToOriginal);
-				actualOsCommand = actualOsCommand.replace("%%TARGET_NAME%%", targetName);
-				actualOsCommand = actualOsCommand.replace("%%PATH_TO_TARGET%%", pathTarget);
-				return actualOsCommand;
-			}
-
-	protected UseCaseDescription usecase;
-	protected final HashMap<String, String> tags = new HashMap<String, String>();
-	protected int nTempFiles = 0;
-	private static int submissionID = 0;
-	protected static InlineByteArrayReferenceBuilder inlineByteArrayReferenceBuilder = new InlineByteArrayReferenceBuilder();
-	protected static InlineStringReferenceBuilder inlineStringReferenceBuilder = new InlineStringReferenceBuilder();
-	private InvocationContext invocationContext;
-	private boolean retrieveData;
-	
-	/*
-	 * get the class of the data we expect for a given input
-	 */
-	@SuppressWarnings("unchecked")
-	public Class getType(String inputName) {
-		if (!usecase.getInputs().containsKey(inputName))
-			return null;
-		ScriptInputUser input = (ScriptInputUser) usecase.getInputs().get(inputName);
-		if (input.isList()) {
-			if (input.isBinary())
-				return List.class;
-			else
-				return List.class;
-		} else {
-			if (input.isBinary())
-				return byte[].class;
-			else
-				return String.class;
-		}
-	}
-
-	/*
-	 * get a list of all the input port names
-	 */
-	public Set<String> getInputs() {
-		return usecase.getInputs().keySet();
-	}
-
-
-	/*
-	 * get a id, incremented with each job. thus, this should be thread-wide
-	 * unique
-	 */
-	public synchronized int getSubmissionID() {
-		return submissionID++;
-	}
-
-	/*
-	 * set the data for the input port with given name
-	 */
-	@SuppressWarnings("unchecked")
-	public void setInput(String inputName, ReferenceService referenceService, T2Reference t2Reference) throws InvocationException {
-		if (t2Reference == null) {
-			throw new InvocationException("No input specified for " + inputName);
-		}
-		ScriptInputUser input = (ScriptInputUser) usecase.getInputs().get(inputName);
-		if (input.isList()) {
-			IdentifiedList<T2Reference> listOfReferences = (IdentifiedList<T2Reference>) referenceService
-					.getListService().getList(t2Reference);
-
-			if (!input.isConcatenate()) {
-				// this is a list input (not concatenated)
-				// so write every element to its own temporary file
-				// and create a filelist file
-
-				// we need to write the list elements to temporary files
-				ScriptInputUser listElementTemp = new ScriptInputUser();
-				listElementTemp.setBinary(input.isBinary());
-				listElementTemp.setTempFile(true);
-
-				String lineEndChar = "\n";
-				if (!input.isFile() && !input.isTempFile()) {
-					lineEndChar = " ";
-				}
-
-				String listFileContent = "";
-				String filenamesFileContent = "";
-				// create a list of all temp file names
-				for (T2Reference cur : listOfReferences) {
-					String tmp = setOneInput(referenceService, cur,
-							listElementTemp);
-					listFileContent += tmp + lineEndChar;
-					int ind = tmp.lastIndexOf('/');
-					if (ind == -1) {
-						ind = tmp.lastIndexOf('\\');
-					}
-					if (ind != -1) {
-						tmp = tmp.substring(ind + 1);
-					}
-					filenamesFileContent += tmp + lineEndChar;
-				}
-
-				// how do we want the listfile to be stored?
-				ScriptInputUser listFile = new ScriptInputUser();
-				listFile.setBinary(false); // since its a list file
-				listFile.setFile(input.isFile());
-				listFile.setTempFile(input.isTempFile());
-				listFile.setTag(input.getTag());
-				T2Reference listFileContentReference = referenceService
-						.register(listFileContent, 0, true, invocationContext);
-
-				tags.put(listFile.getTag(), setOneInput(referenceService,
-						listFileContentReference, listFile));
-
-				listFile.setTag(input.getTag() + "_NAMES");
-				T2Reference filenamesFileContentReference = referenceService
-						.register(filenamesFileContent, 0, true, null);
-				tags.put(listFile.getTag(), setOneInput(referenceService,
-						filenamesFileContentReference, listFile));
-			} else {
-				try {
-					// first, concatenate all data
-					if (input.isBinary()) {
-						ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-						BufferedWriter outputWriter = new BufferedWriter(
-								new OutputStreamWriter(outputStream));
-						for (T2Reference cur : listOfReferences) {
-							InputStreamReader inputReader = new InputStreamReader(
-									getAsStream(referenceService, cur));
-							IOUtils.copyLarge(inputReader, outputWriter);
-							inputReader.close();
-						}
-						outputWriter.close();
-						T2Reference binaryReference = referenceService
-								.register(outputStream.toByteArray(), 0, true,
-										invocationContext);
-						tags.put(input.getTag(), setOneInput(referenceService,
-								binaryReference, input));
-					} else {
-						ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-						BufferedWriter outputWriter = new BufferedWriter(
-								new OutputStreamWriter(outputStream));
-						for (T2Reference cur : listOfReferences) {
-							InputStreamReader inputReader = new InputStreamReader(
-									getAsStream(referenceService, cur));
-							IOUtils.copyLarge(inputReader, outputWriter);
-							outputWriter.write(" ");
-							inputReader.close();
-						}
-						outputWriter.close();
-						T2Reference binaryReference = referenceService
-								.register(outputStream.toByteArray(), 0, true,
-										invocationContext);
-						tags.put(input.getTag(), setOneInput(referenceService,
-								binaryReference, input));
-					}
-				} catch (IOException e) {
-					throw new InvocationException(e);
-				}
-			}
-		} else {
-			tags.put(input.getTag(), setOneInput(referenceService, t2Reference,
-					input));
-		}
-	}
-
-	/*
-	 * submit a grid job and wait for it to finish, then get the result as
-	 * on-demand downloads or directly as data (in case of local execution)
-	 */
-	public HashMap<String, Object> Submit(ReferenceService referenceService) throws InvocationException {
-		submit_generate_job(referenceService);
-		return submit_wait_fetch_results(referenceService);
-	}
-
-	/*
-	 * just submit the job. useful if you want to wait for it to finish later on
-	 * 
-	 * Can the statics be made more static?
-	 */
-	public void submit_generate_job(ReferenceService referenceService) throws InvocationException {
-		for (ScriptInputStatic input : usecase.getStatic_inputs()) {
-			T2Reference ref;
-			if (input.getUrl() != null) {
-				// Does this work OK with binary
-				try {
-					ref = referenceService.register(new URL(input.getUrl()), 0, true, null);
-				} catch (ReferenceServiceException e) {
-					throw new InvocationException(e);
-				} catch (MalformedURLException e) {
-					throw new InvocationException(e);
-				}
-			} else {
-				ref = referenceService.register((String) input.getContent(), 0, true, null);
-			}
-				tags.put(input.getTag(), setOneInput(referenceService, ref, input));
-			
-		}
-		submit_generate_job_inner();
-	}
-
-	protected abstract void submit_generate_job_inner() throws InvocationException;
-
-	/*
-	 * wait for a submitted job to finish and fetch the results
-	 */
-	public abstract HashMap<String, Object> submit_wait_fetch_results(ReferenceService referenceService) throws InvocationException;
-
-	public abstract String setOneInput(ReferenceService referenceService, T2Reference t2Reference, ScriptInput input) throws InvocationException;
-
-	protected InputStream getAsStream(ReferenceService referenceService, T2Reference t2Reference) {
-		Identified identified = referenceService.resolveIdentifier(t2Reference, null, null);
-		if (identified instanceof ReferenceSet) {
-			ExternalReferenceSPI ref = ((ReferenceSet) identified).getExternalReferences().iterator().next();
-			return ref.openStream(invocationContext);
-		}
-		return null;
-	}
-
-	public void setContext(InvocationContext context) {
-		this.invocationContext = context;
-		
-	}
-	
-	public InvocationContext getContext() {
-		return this.invocationContext;
-	}
-
-	public abstract void setStdIn(ReferenceService referenceService,
-			T2Reference t2Reference);
-
-	public abstract void rememberRun(String runId);
-
-	/**
-	 * @return the runId
-	 */
-	protected String getRunId() {
-		return runId;
-	}
-
-	/**
-	 * @param runId the runId to set
-	 */
-	protected void setRunId(String runId) {
-		this.runId = runId;
-	}
-
-	/**
-	 * @return the retrieveData
-	 */
-	protected boolean isRetrieveData() {
-		return retrieveData;
-	}
-
-	/**
-	 * @param retrieveData the retrieveData to set
-	 */
-	protected void setRetrieveData(boolean retrieveData) {
-		this.retrieveData = retrieveData;
-	}
-	
-
-}


[6/6] incubator-taverna-common-activities git commit: classnames

Posted by st...@apache.org.
classnames


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/4e64abd8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/4e64abd8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/4e64abd8

Branch: refs/heads/cwl-browse
Commit: 4e64abd8e7ad4062427ff8abfa21511523968c9a
Parents: 1e35285
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed May 4 00:56:19 2016 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed May 4 00:56:19 2016 +0100

----------------------------------------------------------------------
 .../externaltool/desc/RuntimeEnvironment.java        | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/4e64abd8/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
index ad58eea..97e946c 100644
--- 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
@@ -29,15 +29,14 @@ import org.apache.log4j.Logger;
  * 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
+ * To experiment/test these functions, run the following:
+ * <pre>
+ * java -cp target/taverna-external-tool-activity-2.1.0-incubating-SNAPSHOT.jar org.apache.taverna.activities.externaltool.desc.RuntimeEnvironment compare bla-1 foo-1 
  * 
- * @author Steffen Moeller
+ * java -cp target/taverna-external-tool-activity-2.1.0-incubating-SNAPSHOT.jar org.apache.taverna.activities.externaltool.desc.RuntimeEnvironment compare bla-1 bla-2 
+ * 
+ * java -cp target/taverna-external-tool-activity-2.1.0-incubating-SNAPSHOT.jar org.apache.taverna.activities.externaltool.desc.RuntimeEnvironment compare bla-1.2 bla-1
+ * </pre>
  */
 @SuppressWarnings("unchecked")
 public class RuntimeEnvironment implements Comparable {