ToolDescription

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/59a0dc12
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/59a0dc12
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/59a0dc12

Branch: refs/heads/docker
Commit: 59a0dc12ca2e3c5fe11e0889b4b50c3aa4b57c43
Parents: b13a0fe
Author: Stian Soiland-Reyes <[email protected]>
Authored: Wed May 4 01:08:03 2016 +0100
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Wed May 4 01:08:03 2016 +0100

----------------------------------------------------------------------
 .../externaltool/ExternalToolActivity.java      |   6 +-
 .../ExternalToolActivityConfigurationBean.java  |   8 +-
 .../externaltool/InvocationCreator.java         |   4 +-
 .../externaltool/desc/ToolDescription.java      | 897 +++++++++++++++++++
 .../externaltool/desc/UseCaseDescription.java   | 897 -------------------
 .../externaltool/desc/UseCaseEnumeration.java   |  16 +-
 .../externaltool/invocation/ToolInvocation.java |   4 +-
 .../local/LocalInvocationCreator.java           |   4 +-
 .../externaltool/local/LocalToolInvocation.java |   4 +-
 .../externaltool/ssh/SshInvocationCreator.java  |   4 +-
 .../externaltool/ssh/SshToolInvocation.java     |   4 +-
 11 files changed, 924 insertions(+), 924 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/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 b2fae4e..99a3c7c 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
@@ -27,7 +27,7 @@ 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.desc.ToolDescription;
 import 
org.apache.taverna.activities.externaltool.invocation.InvocationException;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
@@ -67,7 +67,7 @@ public class ExternalToolActivity extends 
AbstractAsynchronousActivity<ExternalT
        private static Logger logger = 
Logger.getLogger(ExternalToolActivity.class);
 
        private ExternalToolActivityConfigurationBean configurationBean;
-       private UseCaseDescription mydesc;
+       private ToolDescription mydesc;
 
        private List<InvocationCreator> invocationCreators;
 
@@ -280,7 +280,7 @@ public class ExternalToolActivity extends 
AbstractAsynchronousActivity<ExternalT
                this.invocationCreators = invocationCreators;
        }
 
-       private ToolInvocation getInvocation(InvocationMechanism mechanism, 
UseCaseDescription description, Map<String, T2Reference> data, ReferenceService 
referenceService) {
+       private ToolInvocation getInvocation(InvocationMechanism mechanism, 
ToolDescription description, Map<String, T2Reference> data, ReferenceService 
referenceService) {
                ToolInvocation result = null;
                InvocationCreator creator = null;
                for (InvocationCreator c : invocationCreators) {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/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 74c9070..7c4f479 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,7 +21,7 @@ package org.apache.taverna.activities.externaltool;
 
 import java.util.List;
 
-import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.desc.ToolDescription;
 import org.apache.taverna.activities.externaltool.manager.InvocationGroup;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.activities.externaltool.manager.MechanismCreator;
@@ -43,7 +43,7 @@ public final class ExternalToolActivityConfigurationBean {
 
        protected String repositoryUrl;
        protected String externaltoolid;
-       protected UseCaseDescription useCaseDescription = null;
+       protected ToolDescription useCaseDescription = null;
        private boolean edited = false;
 
        private List<MechanismCreator> mechanismCreators;
@@ -106,7 +106,7 @@ public final class ExternalToolActivityConfigurationBean {
        /**
         * @return the useCaseDescription
         */
-       public UseCaseDescription getUseCaseDescription() {
+       public ToolDescription getUseCaseDescription() {
                return useCaseDescription;
        }
 
@@ -114,7 +114,7 @@ public final class ExternalToolActivityConfigurationBean {
         * @param useCaseDescription the useCaseDescription to set
         */
        @ConfigurationProperty(name = "toolDescription", label = "Tool 
Description")
-       public void setUseCaseDescription(UseCaseDescription 
useCaseDescription) {
+       public void setUseCaseDescription(ToolDescription useCaseDescription) {
                this.useCaseDescription = useCaseDescription;
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/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 b5394c4..9893728 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,7 +21,7 @@ package org.apache.taverna.activities.externaltool;
 
 import java.util.Map;
 
-import org.apache.taverna.activities.externaltool.desc.UseCaseDescription;
+import org.apache.taverna.activities.externaltool.desc.ToolDescription;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.reference.ReferenceService;
@@ -35,6 +35,6 @@ public interface InvocationCreator {
        
        public boolean canHandle(String mechanismType);
        
-       public ToolInvocation convert(InvocationMechanism mechanism, 
UseCaseDescription description, Map<String, T2Reference> data, ReferenceService 
referenceService);
+       public ToolInvocation convert(InvocationMechanism mechanism, 
ToolDescription description, Map<String, T2Reference> data, ReferenceService 
referenceService);
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ToolDescription.java
----------------------------------------------------------------------
diff --git 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ToolDescription.java
 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ToolDescription.java
new file mode 100644
index 0000000..5e2dde0
--- /dev/null
+++ 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/ToolDescription.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 ToolDescription {
+
+       private static Logger logger = Logger.getLogger(ToolDescription.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 ToolDescription() {
+               
+       }
+
+       /**
+        * Constructor, for special purpose usecases.
+        *
+        * @param usecaseid
+        */
+       public ToolDescription(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 ToolDescription(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 ToolDescription(Element programNode) throws 
DeserializationException {
+               readFromXmlElement(programNode);
+       }
+
+/**
+ * Produce an XML description of the ToolDescription
+ */
+       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 ToolDescription 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 {
+               ToolDescription d = new ToolDescription(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/59a0dc12/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
deleted file mode 100644
index 934330f..0000000
--- 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/desc/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 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/59a0dc12/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
index 1a43461..949ae93 100644
--- 
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
@@ -37,9 +37,9 @@ public class UseCaseEnumeration {
 
        private static Logger logger = 
Logger.getLogger(UseCaseEnumeration.class);
 
-       public static List<UseCaseDescription> readDescriptionsFromUrl(String 
xmlFileUrl) throws IOException {
+       public static List<ToolDescription> readDescriptionsFromUrl(String 
xmlFileUrl) throws IOException {
 
-               List<UseCaseDescription> ret = new 
ArrayList<UseCaseDescription>();
+               List<ToolDescription> ret = new ArrayList<ToolDescription>();
                URLConnection con = null;
                try {
                        URL url = new URL(xmlFileUrl);
@@ -61,9 +61,9 @@ public class UseCaseEnumeration {
 
        }
        
-       public static List<UseCaseDescription> 
readDescriptionsFromStream(InputStream is) {
+       public static List<ToolDescription> 
readDescriptionsFromStream(InputStream is) {
                
-               List<UseCaseDescription> ret = new 
ArrayList<UseCaseDescription>();
+               List<ToolDescription> ret = new ArrayList<ToolDescription>();
 
                SAXBuilder builder = new SAXBuilder();
                Document doc = null;
@@ -89,7 +89,7 @@ public class UseCaseEnumeration {
                        Element child = (Element) ochild;
                        if (child.getName().equalsIgnoreCase("program")) {
                                        try {
-                                               ret.add(new 
UseCaseDescription(child));
+                                               ret.add(new 
ToolDescription(child));
                                        } catch (DeserializationException e) {
                                                logger.error(e);
                                        }
@@ -98,10 +98,10 @@ public class UseCaseEnumeration {
                return ret;
        }
 
-       public static UseCaseDescription readDescriptionFromUrl(
+       public static ToolDescription readDescriptionFromUrl(
                        String repositoryUrl, String id) throws IOException {
-               List<UseCaseDescription> descriptions = 
readDescriptionsFromUrl(repositoryUrl);
-               for (UseCaseDescription usecase : descriptions) {
+               List<ToolDescription> descriptions = 
readDescriptionsFromUrl(repositoryUrl);
+               for (ToolDescription usecase : descriptions) {
                        if (usecase.getUsecaseid().equals(id)) {
                                return usecase;
                        }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java
----------------------------------------------------------------------
diff --git 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java
 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java
index 485f613..2fc56a9 100644
--- 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java
+++ 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/invocation/ToolInvocation.java
@@ -34,7 +34,7 @@ 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.activities.externaltool.desc.ToolDescription;
 import org.apache.taverna.invocation.InvocationContext;
 import org.apache.taverna.reference.ExternalReferenceSPI;
 import org.apache.taverna.reference.Identified;
@@ -67,7 +67,7 @@ public abstract class ToolInvocation {
                                return actualOsCommand;
                        }
 
-       protected UseCaseDescription usecase;
+       protected ToolDescription usecase;
        protected final HashMap<String, String> tags = new HashMap<String, 
String>();
        protected int nTempFiles = 0;
        private static int submissionID = 0;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/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 13154d9..f127049 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,7 +23,7 @@ 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.desc.ToolDescription;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
 import org.apache.taverna.activities.externaltool.manager.InvocationMechanism;
 import org.apache.taverna.reference.ReferenceService;
@@ -50,7 +50,7 @@ public final class LocalInvocationCreator implements
        }
 
        @Override
-       public ToolInvocation convert(InvocationMechanism m, UseCaseDescription 
description, Map<String, T2Reference> data, ReferenceService referenceService) {
+       public ToolInvocation convert(InvocationMechanism m, ToolDescription 
description, Map<String, T2Reference> data, ReferenceService referenceService) {
            ExternalToolLocalInvocationMechanism mechanism = 
(ExternalToolLocalInvocationMechanism) m;
                ToolInvocation result = null;
                try {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalToolInvocation.java
----------------------------------------------------------------------
diff --git 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalToolInvocation.java
 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalToolInvocation.java
index c88f7c8..a6a8d47 100755
--- 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalToolInvocation.java
+++ 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/local/LocalToolInvocation.java
@@ -49,7 +49,7 @@ 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.desc.ToolDescription;
 import 
org.apache.taverna.activities.externaltool.invocation.InvocationException;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
 import org.apache.taverna.activities.externaltool.ssh.SshNode;
@@ -93,7 +93,7 @@ public class LocalToolInvocation extends ToolInvocation {
        
        private static String LOCAL_INVOCATION_FILE = "localInvocations";
 
-       public LocalToolInvocation(UseCaseDescription desc, boolean 
retrieveData, String mainTempDirectory, String shellPrefix, String linkCommand) 
throws IOException {
+       public LocalToolInvocation(ToolDescription desc, boolean retrieveData, 
String mainTempDirectory, String shellPrefix, String linkCommand) throws 
IOException {
 
                usecase = desc;
                setRetrieveData(retrieveData);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/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 8f1950e..8ebc656 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,7 +25,7 @@ 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.desc.ToolDescription;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
 import org.apache.log4j.Logger;
 
@@ -58,7 +58,7 @@ public final class SshInvocationCreator implements 
InvocationCreator {
        }
 
        @Override
-       public ToolInvocation convert(InvocationMechanism m, UseCaseDescription 
description, Map<String, T2Reference> data, ReferenceService referenceService) {
+       public ToolInvocation convert(InvocationMechanism m, ToolDescription 
description, Map<String, T2Reference> data, ReferenceService referenceService) {
            ExternalToolSshInvocationMechanism mechanism = 
(ExternalToolSshInvocationMechanism) m;
                SshToolInvocation result = null;
                try {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/59a0dc12/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshToolInvocation.java
----------------------------------------------------------------------
diff --git 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshToolInvocation.java
 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshToolInvocation.java
index edf9698..a363f8d 100755
--- 
a/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshToolInvocation.java
+++ 
b/taverna-external-tool-activity/src/main/java/org/apache/taverna/activities/externaltool/ssh/SshToolInvocation.java
@@ -45,7 +45,7 @@ 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.desc.ToolDescription;
 import org.apache.taverna.activities.externaltool.invocation.AskUserForPw;
 import 
org.apache.taverna.activities.externaltool.invocation.InvocationException;
 import org.apache.taverna.activities.externaltool.invocation.ToolInvocation;
@@ -124,7 +124,7 @@ public class SshToolInvocation extends ToolInvocation {
                return null;
        }
 
-       public SshToolInvocation(UseCaseDescription desc, SshNode workerNodeA,
+       public SshToolInvocation(ToolDescription desc, SshNode workerNodeA,
                        AskUserForPw askUserForPwA, CredentialManager 
credentialManager)
                        throws JSchException, SftpException {
                this.workerNode = workerNodeA;

Reply via email to