http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartServiceXMLHandler.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartServiceXMLHandler.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartServiceXMLHandler.java
new file mode 100644
index 0000000..e8a5189
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartServiceXMLHandler.java
@@ -0,0 +1,390 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: MartServiceXMLHandler.java,v $
+ * Revision           $Revision: 1.4 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/12/13 11:38:55 $
+ *               by   $Author: davidwithers $
+ * Created on 28-Apr-2006
+ *****************************************************************/
+package org.biomart.martservice;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.biomart.martservice.query.QueryXMLHandler;
+import org.jdom.Element;
+import org.jdom.Namespace;
+
+/**
+ * Utility class for serializing mart service classes to XML.
+ * 
+ * @author David Withers
+ */
+public class MartServiceXMLHandler {
+       public static final String MART_SERVICE_ELEMENT = "MartService";
+
+       public static final String MART_URL_LOCATION_ELEMENT = 
"MartURLLocation";
+
+       public static final String MART_DATASET_ELEMENT = "MartDataset";
+
+       public static final String MART_QUERY_ELEMENT = "MartQuery";
+
+       public static final String LINKED_DATASETS_ELEMENT = "LinkedDatasets";
+
+       public static final String LINKED_DATASET_ELEMENT = "LinkedDataset";
+
+       public static final String VIRTUAL_SCHEMA_ELEMENT = "virtualSchema";
+
+       public static final String LOCATION_ATTRIBUTE = "location";
+
+       public static final String DATABASE_ATTRIBUTE = "database";
+
+       public static final String DEFAULT_ATTRIBUTE = "default";
+
+       public static final String DEFAULT_VALUE_ATTRIBUTE = "defaultValue";
+
+       public static final String DISPLAY_NAME_ATTRIBUTE = "displayName";
+
+       public static final String HOST_ATTRIBUTE = "host";
+
+       public static final String INCLUDE_DATASETS_ATTRIBUTE = 
"includeDatasets";
+
+       public static final String LINK_ATTRIBUTE = "LINK";
+
+       public static final String MART_USER_ATTRIBUTE = "martUser";
+
+       public static final String NAME_ATTRIBUTE = "name";
+
+       public static final String PATH_ATTRIBUTE = "path";
+
+       public static final String PORT_ATTRIBUTE = "port";
+
+       public static final String TYPE_ATTRIBUTE = "type";
+
+       public static final String INITIAL_BATCH_SIZE_ATTRIBUTE = 
"initialBatchSize";
+
+       public static final String MAXIMUM_BATCH_SIZE_ATTRIBUTE = 
"maximumBatchSize";
+
+       public static final String VIRTUAL_SCHEMA_ATTRIBUTE = "virtualSchema";
+
+       public static final String SERVER_VIRTUAL_SCHEMA_ATTRIBUTE = 
"serverVirtualSchema";
+
+       public static final String VISIBLE_ATTRIBUTE = "visible";
+
+       public static final String REDIRECT_ATTRIBUTE = "redirect";
+
+       public static final String INTERFACE_ATTRIBUTE = "interface";
+
+       public static final String MODIFIED_ATTRIBUTE = "modified";
+
+       /**
+        * Converts a <code>MartService</code> to an XML element.
+        * 
+        * @param martService
+        *            the <code>MartService</code> to serialize
+        * @param namespace
+        *            the <code>Namespace</code> to use when constructing the
+        *            <code>Element</code>
+        * @return an XML serialization of the <code>MartService</code>
+        */
+       public static Element martServiceToElement(MartService martService,
+                       Namespace namespace) {
+               Element element = new Element(MART_SERVICE_ELEMENT, namespace);
+               element.setAttribute(LOCATION_ATTRIBUTE, 
martService.getLocation());
+               return element;
+       }
+
+       /**
+        * Creates a <code>MartService</code> from an XML element.
+        * 
+        * @param element
+        *            the <code>Element</code> to deserialize
+        * @return a deserialized <code>MartService</code>
+        */
+       public static MartService elementToMartService(Element element) {
+               return MartService.getMartService(element
+                               .getAttributeValue(LOCATION_ATTRIBUTE));
+       }
+
+       /**
+        * Converts a <code>MartDataset</code> to an XML element.
+        * 
+        * @param dataset
+        *            the <code>MartDataset</code> to serialize
+        * @param namespace
+        *            the <code>Namespace</code> to use when constructing the
+        *            <code>Element</code>
+        * @return an XML serialization of the <code>MartDataset</code>
+        */
+       public static Element datasetToElement(MartDataset dataset,
+                       Namespace namespace) {
+               Element element = new Element(MART_DATASET_ELEMENT, namespace);
+               element.setAttribute(DISPLAY_NAME_ATTRIBUTE, 
dataset.getDisplayName());
+               element.setAttribute(NAME_ATTRIBUTE, dataset.getName());
+               element.setAttribute(TYPE_ATTRIBUTE, dataset.getType());
+               element.setAttribute(INITIAL_BATCH_SIZE_ATTRIBUTE, String
+                               .valueOf(dataset.getInitialBatchSize()));
+               element.setAttribute(MAXIMUM_BATCH_SIZE_ATTRIBUTE, String
+                               .valueOf(dataset.getMaximumBatchSize()));
+               element.setAttribute(VISIBLE_ATTRIBUTE, String.valueOf(dataset
+                               .isVisible()));
+               if (dataset.getInterface() != null) {
+                       element.setAttribute(INTERFACE_ATTRIBUTE, 
dataset.getInterface());
+               }
+               if (dataset.getModified() != null) {
+                       element.setAttribute(MODIFIED_ATTRIBUTE, 
dataset.getModified());
+               }
+               
element.addContent(locationToElement(dataset.getMartURLLocation(),
+                               namespace));
+               return element;
+       }
+
+       /**
+        * Creates a <code>MartDataset</code> from an XML element.
+        * 
+        * @param element
+        *            the <code>Element</code> to deserialize
+        * @param namespace
+        *            the <code>Namespace</code> containing the
+        *            <code>Element</code>
+        * @return a deserialized <code>MartDataset</code>
+        */
+       public static MartDataset elementToDataset(Element element,
+                       Namespace namespace) {
+               MartDataset dataset = new MartDataset();
+               dataset.setDisplayName(element
+                               .getAttributeValue(DISPLAY_NAME_ATTRIBUTE));
+               dataset.setName(element.getAttributeValue(NAME_ATTRIBUTE));
+               dataset.setType(element.getAttributeValue(TYPE_ATTRIBUTE));
+               dataset.setInitialBatchSize(Long.parseLong(element
+                               
.getAttributeValue(INITIAL_BATCH_SIZE_ATTRIBUTE)));
+               dataset.setMaximumBatchSize(Long.parseLong(element
+                               
.getAttributeValue(MAXIMUM_BATCH_SIZE_ATTRIBUTE)));
+               dataset.setVisible(Boolean.getBoolean(element
+                               .getAttributeValue(VISIBLE_ATTRIBUTE)));
+               
dataset.setInterface(element.getAttributeValue(INTERFACE_ATTRIBUTE));
+               
dataset.setModified(element.getAttributeValue(MODIFIED_ATTRIBUTE));
+               dataset.setMartURLLocation(elementToLocation(element.getChild(
+                               MART_URL_LOCATION_ELEMENT, namespace)));
+               return dataset;
+       }
+
+       /**
+        * Creates a <code>MartRegistry</code> from an XML element.
+        * 
+        * @param element
+        *            the <code>Element</code> to deserialize
+        * @param namespace
+        *            the <code>Namespace</code> containing the
+        *            <code>Element</code>
+        * @return a deserialized <code>MartRegistry</code>
+        */
+       public static MartRegistry elementToRegistry(Element root,
+                       Namespace namespace) {
+               MartRegistry registry = new MartRegistry();
+               List<Element> children = root.getChildren();
+               for (Element childElement : children) {
+                       if (childElement.getNamespace().equals(namespace)) {
+                               if 
(childElement.getName().equals(MART_URL_LOCATION_ELEMENT)) {
+                                       MartURLLocation martURLLocation = 
MartServiceXMLHandler
+                                                       
.elementToLocation(childElement);
+                                       
martURLLocation.setVirtualSchema("default");
+                                       
registry.addMartURLLocation(martURLLocation);
+                               } else if (childElement.getName()
+                                               
.equals(VIRTUAL_SCHEMA_ELEMENT)) {
+                                       String virtualSchema = childElement
+                                                       
.getAttributeValue(NAME_ATTRIBUTE);
+                                       List<Element> locations = 
childElement.getChildren(
+                                                       
MART_URL_LOCATION_ELEMENT, namespace);
+                                       for (Element location : locations) {
+                                               MartURLLocation martURLLocation 
= MartServiceXMLHandler
+                                                               
.elementToLocation(location);
+                                               
martURLLocation.setVirtualSchema(virtualSchema);
+                                               
registry.addMartURLLocation(martURLLocation);
+                                       }
+                               }
+                       }
+               }
+               return registry;
+       }
+
+       /**
+        * Converts a <code>MartURLLocation</code> to an XML element.
+        * 
+        * @param location
+        *            the <code>MartURLLocation</code> to serialize
+        * @param namespace
+        *            the <code>Namespace</code> to use when constructing the
+        *            <code>Element</code>
+        * @return an XML serialization of the <code>MartURLLocation</code>
+        */
+       public static Element locationToElement(MartURLLocation location,
+                       Namespace namespace) {
+               Element element = new Element(MART_URL_LOCATION_ELEMENT, 
namespace);
+               if (location.getDatabase() != null) {
+                       element.setAttribute(DATABASE_ATTRIBUTE, 
location.getDatabase());
+               }
+               element.setAttribute(DEFAULT_ATTRIBUTE, location.isDefault() ? 
"1"
+                               : "0");
+               element.setAttribute(DISPLAY_NAME_ATTRIBUTE, 
location.getDisplayName());
+               element.setAttribute(HOST_ATTRIBUTE, location.getHost());
+               if (location.getIncludeDatasets() != null) {
+                       element.setAttribute(INCLUDE_DATASETS_ATTRIBUTE, 
location
+                                       .getIncludeDatasets());
+               }
+               if (location.getMartUser() != null) {
+                       element.setAttribute(MART_USER_ATTRIBUTE, 
location.getMartUser());
+               }
+               element.setAttribute(NAME_ATTRIBUTE, location.getName());
+               if (location.getPath() != null) {
+                       element.setAttribute(PATH_ATTRIBUTE, 
location.getPath());
+               }
+               element
+                               .setAttribute(PORT_ATTRIBUTE, String
+                                               .valueOf(location.getPort()));
+               element.setAttribute(SERVER_VIRTUAL_SCHEMA_ATTRIBUTE, location
+                               .getServerVirtualSchema());
+               if (location.getVirtualSchema() != null) {
+                       element.setAttribute(VIRTUAL_SCHEMA_ATTRIBUTE, location
+                                       .getVirtualSchema());
+               }
+               element.setAttribute(VISIBLE_ATTRIBUTE, location.isVisible() ? 
"1"
+                               : "0");
+               element.setAttribute(REDIRECT_ATTRIBUTE, location.isRedirect() 
? "1"
+                               : "0");
+               return element;
+       }
+
+       /**
+        * Creates a <code>MartURLLocation</code> from an XML element.
+        * 
+        * @param element
+        *            the <code>Element</code> to deserialize
+        * @return a deserialized <code>MartURLLocation</code>
+        */
+       public static MartURLLocation elementToLocation(Element element) {
+               MartURLLocation location = new MartURLLocation();
+               
location.setDatabase(element.getAttributeValue(DATABASE_ATTRIBUTE));
+               location.setDefault("1".equals(element
+                               .getAttributeValue(DEFAULT_ATTRIBUTE)));
+               location.setDisplayName(element
+                               .getAttributeValue(DISPLAY_NAME_ATTRIBUTE));
+               location.setHost(element.getAttributeValue(HOST_ATTRIBUTE));
+               location.setIncludeDatasets(element
+                               .getAttributeValue(INCLUDE_DATASETS_ATTRIBUTE));
+               
location.setMartUser(element.getAttributeValue(MART_USER_ATTRIBUTE));
+               location.setName(element.getAttributeValue(NAME_ATTRIBUTE));
+               location.setPath(element.getAttributeValue(PATH_ATTRIBUTE));
+               try {
+                       location.setPort(Integer.parseInt(element
+                                       .getAttributeValue(PORT_ATTRIBUTE)));
+               } catch (NumberFormatException e) {
+                       location.setPort(80);
+               }
+               location.setServerVirtualSchema(element
+                               
.getAttributeValue(SERVER_VIRTUAL_SCHEMA_ATTRIBUTE));
+               location.setVirtualSchema(element
+                               .getAttributeValue(VIRTUAL_SCHEMA_ATTRIBUTE));
+               location.setVisible("1".equals(element
+                               .getAttributeValue(VISIBLE_ATTRIBUTE)));
+               location.setRedirect("1".equals(element
+                               .getAttributeValue(REDIRECT_ATTRIBUTE)));
+               return location;
+       }
+
+       /**
+        * Creates a <code>MartQuery</code> from an XML element.
+        * 
+        * @param element
+        *            the <code>Element</code> to deserialize
+        * @param namespace
+        *            the <code>Namespace</code> containing the
+        *            <code>Element</code>
+        * @return a deserialized <code>MartQuery</code>
+        */
+       public static MartQuery elementToMartQuery(Element element,
+                       Namespace namespace) {
+               MartQuery martQuery = new MartQuery();
+               martQuery.setMartService(MartServiceXMLHandler
+                               
.elementToMartService(element.getChild(MART_SERVICE_ELEMENT,
+                                               namespace)));
+               martQuery.setMartDataset(elementToDataset(element.getChild(
+                               MART_DATASET_ELEMENT, namespace), namespace));
+               
martQuery.setQuery(QueryXMLHandler.elementToQuery(element.getChild(
+                               QueryXMLHandler.QUERY_ELEMENT, namespace), 
namespace));
+               Element linksElement = 
element.getChild(LINKED_DATASETS_ELEMENT, namespace);
+               if (linksElement != null) {
+                       List linkedDatasets = 
linksElement.getChildren(LINKED_DATASETS_ELEMENT,
+                                       namespace);
+                       for (Iterator iter = linkedDatasets.iterator(); 
iter.hasNext();) {
+                               Element datasetElement = (Element) iter.next();
+                               String datasetName = 
datasetElement.getAttributeValue(NAME_ATTRIBUTE);
+                               String linkId = 
datasetElement.getAttributeValue(LINK_ATTRIBUTE);
+                               martQuery.addLinkedDataset(datasetName, linkId);
+                       }
+               }
+               return martQuery;
+       }
+
+       /**
+        * Converts a <code>MartQuery</code> to an XML element.
+        * 
+        * @param martQuery
+        *            the <code>MartQuery</code> to serialize
+        * @param namespace
+        *            the <code>Namespace</code> to use when constructing the
+        *            <code>Element</code>
+        * @return an XML serialization of the <code>MartQuery</code>
+        */
+       public static Element martQueryToElement(MartQuery martQuery,
+                       Namespace namespace) {
+               Element element = new Element(MART_QUERY_ELEMENT, namespace);
+               
element.addContent(martServiceToElement(martQuery.getMartService(),
+                               namespace));
+               element.addContent(datasetToElement(martQuery.getMartDataset(),
+                               namespace));
+               
element.addContent(QueryXMLHandler.queryToElement(martQuery.getQuery(),
+                               namespace));
+               Set linkedDatasets = martQuery.getLinkedDatasets();
+               if (linkedDatasets.size() > 0) {
+                       Element linksElement = new 
Element(LINKED_DATASETS_ELEMENT, namespace);
+                       for (Iterator iter = linkedDatasets.iterator(); 
iter.hasNext();) {
+                               String datasetName = (String) iter.next();
+                               Element datasetElement = new 
Element(LINKED_DATASETS_ELEMENT, namespace);
+                               datasetElement.setAttribute(NAME_ATTRIBUTE, 
datasetName);
+                               datasetElement.setAttribute(LINK_ATTRIBUTE, 
martQuery
+                                               .getLink(datasetName));
+                               linksElement.addContent(datasetElement);
+                       }
+                       element.addContent(linksElement);
+               }
+               return element;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartURLLocation.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartURLLocation.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartURLLocation.java
new file mode 100644
index 0000000..476956d
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/MartURLLocation.java
@@ -0,0 +1,422 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: MartURLLocation.java,v $
+ * Revision           $Revision: 1.2 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/10/04 14:15:59 $
+ *               by   $Author: davidwithers $
+ * Created on 17-Mar-2006
+ *****************************************************************/
+package org.biomart.martservice;
+
+import org.ensembl.mart.lib.config.MartLocation;
+
+/**
+ * The MartURLLocation contained by the MartRegistry returned by a BioMart web
+ * service.
+ * 
+ * @author David Withers
+ */
+public class MartURLLocation implements MartLocation {
+       private static final String URL_TYPE = "URL";
+
+       private String database;
+
+       private boolean defaultValue;
+
+       private String displayName;
+
+       private String host;
+
+       private String includeDatasets;
+
+       private String martUser;
+
+       private String name;
+
+       private String path;
+
+       private int port;
+
+       private String serverVirtualSchema;
+
+       private String virtualSchema;
+
+       private boolean visible;
+
+       private boolean redirect;
+
+       /**
+        * Returns the database.
+        *
+        * @return the database
+        */
+       public String getDatabase() {
+               return database;
+       }
+
+       /**
+        * Sets the database.
+        *
+        * @param database the new database
+        */
+       public void setDatabase(String database) {
+               this.database = database;
+       }
+
+       /**
+        * Returns true if the default flag is set.
+        * 
+        * @return true if the default flag is set
+        */
+       public boolean isDefault() {
+               return defaultValue;
+       }
+
+       /**
+        * Sets the default flag.
+        * 
+        * @param defaultValue
+        *            the value of the default flag
+        */
+       public void setDefault(boolean defaultValue) {
+               this.defaultValue = defaultValue;
+       }
+
+       /**
+        * Returns the displayName.
+        * 
+        * @return the displayName.
+        */
+       public String getDisplayName() {
+               return displayName;
+       }
+
+       /**
+        * Sets the displayName.
+        * 
+        * @param displayName
+        *            the displayName to set.
+        */
+       public void setDisplayName(String displayName) {
+               this.displayName = displayName;
+       }
+
+       /**
+        * Returns the host.
+        * 
+        * @return the host.
+        */
+       public String getHost() {
+               return host;
+       }
+
+       /**
+        * Sets the host.
+        * 
+        * @param host
+        *            the host to set.
+        */
+       public void setHost(String host) {
+               this.host = host;
+       }
+
+       /**
+        * Returns the includeDatasets.
+        *
+        * @return the includeDatasets
+        */
+       public String getIncludeDatasets() {
+               return includeDatasets;
+       }
+
+       /**
+        * Sets the includeDatasets.
+        *
+        * @param includeDatasets the new includeDatasets
+        */
+       public void setIncludeDatasets(String includeDatasets) {
+               this.includeDatasets = includeDatasets;
+       }
+
+       /**
+        * Returns the martUser.
+        *
+        * @return the martUser
+        */
+       public String getMartUser() {
+               return martUser;
+       }
+
+       /**
+        * Sets the martUser.
+        *
+        * @param martUser the new martUser
+        */
+       public void setMartUser(String martUser) {
+               this.martUser = martUser;
+       }
+
+       /**
+        * Returns the name
+        * 
+        * @return the name.
+        */
+       public String getName() {
+               return name;
+       }
+
+       /**
+        * Sets the name.
+        * 
+        * @param name
+        *            the name to set.
+        */
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       /**
+        * Returns the path.
+        *
+        * @return the path
+        */
+       public String getPath() {
+               return path;
+       }
+
+       /**
+        * Sets the path.
+        *
+        * @param path the new path
+        */
+       public void setPath(String path) {
+               this.path = path;
+       }
+
+       /**
+        * Returns the port.
+        * 
+        * @return the port.
+        */
+       public int getPort() {
+               return port;
+       }
+
+       /**
+        * Sets the port.
+        * 
+        * @param port
+        *            the port to set.
+        */
+       public void setPort(int port) {
+               this.port = port;
+       }
+
+       /**
+        * Returns the serverVirtualSchema.
+        * 
+        * @return the serverVirtualSchema.
+        */
+       public String getServerVirtualSchema() {
+               return serverVirtualSchema;
+       }
+
+       /**
+        * Sets the serverVirtualSchema.
+        * 
+        * @param serverVirtualSchema
+        *            the serverVirtualSchema to set.
+        */
+       public void setServerVirtualSchema(String serverVirtualSchema) {
+               this.serverVirtualSchema = serverVirtualSchema;
+       }
+
+       /**
+        * Returns the virtualSchema.
+        * 
+        * @return the virtualSchema.
+        */
+       public String getVirtualSchema() {
+               return virtualSchema;
+       }
+
+       /**
+        * Sets the virtualSchema.
+        * 
+        * @param virtualSchema
+        *            the virtualSchema to set.
+        */
+       public void setVirtualSchema(String virtualSchema) {
+               this.virtualSchema = virtualSchema;
+       }
+
+       /**
+        * Returns true if the location is visible.
+        * 
+        * @return Returns the visible.
+        */
+       public boolean isVisible() {
+               return visible;
+       }
+
+       /**
+        * @param visible
+        *            The visible to set.
+        */
+       public void setVisible(boolean visible) {
+               this.visible = visible;
+       }
+
+       /**
+        * Returns true if this location is redirected.
+        * 
+        * @return the redirect
+        */
+       public boolean isRedirect() {
+               return redirect;
+       }
+
+       /**
+        * @param redirect the redirect to set
+        */
+       public void setRedirect(boolean redirect) {
+               this.redirect = redirect;
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.ensembl.mart.lib.config.MartLocation#getType()
+        */
+       public String getType() {
+               return URL_TYPE;
+       }
+
+       /**
+        * Returns the display name.
+        * 
+        * @return the display name
+        */
+       public String toString() {
+               return getDisplayName();
+       }
+
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result
+                               + ((database == null) ? 0 : 
database.hashCode());
+               result = prime * result + (defaultValue ? 1231 : 1237);
+               result = prime * result
+                               + ((displayName == null) ? 0 : 
displayName.hashCode());
+               result = prime * result + ((host == null) ? 0 : 
host.hashCode());
+               result = prime * result
+                               + ((includeDatasets == null) ? 0 : 
includeDatasets.hashCode());
+               result = prime * result
+                               + ((martUser == null) ? 0 : 
martUser.hashCode());
+               result = prime * result + ((name == null) ? 0 : 
name.hashCode());
+               result = prime * result + ((path == null) ? 0 : 
path.hashCode());
+               result = prime * result + port;
+               result = prime * result + (redirect ? 1231 : 1237);
+               result = prime
+                               * result
+                               + ((serverVirtualSchema == null) ? 0 : 
serverVirtualSchema
+                                               .hashCode());
+               result = prime * result
+                               + ((virtualSchema == null) ? 0 : 
virtualSchema.hashCode());
+               result = prime * result + (visible ? 1231 : 1237);
+               return result;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (obj == null)
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               final MartURLLocation other = (MartURLLocation) obj;
+               if (database == null) {
+                       if (other.database != null)
+                               return false;
+               } else if (!database.equals(other.database))
+                       return false;
+               if (defaultValue != other.defaultValue)
+                       return false;
+               if (displayName == null) {
+                       if (other.displayName != null)
+                               return false;
+               } else if (!displayName.equals(other.displayName))
+                       return false;
+               if (host == null) {
+                       if (other.host != null)
+                               return false;
+               } else if (!host.equals(other.host))
+                       return false;
+               if (includeDatasets == null) {
+                       if (other.includeDatasets != null)
+                               return false;
+               } else if (!includeDatasets.equals(other.includeDatasets))
+                       return false;
+               if (martUser == null) {
+                       if (other.martUser != null)
+                               return false;
+               } else if (!martUser.equals(other.martUser))
+                       return false;
+               if (name == null) {
+                       if (other.name != null)
+                               return false;
+               } else if (!name.equals(other.name))
+                       return false;
+               if (path == null) {
+                       if (other.path != null)
+                               return false;
+               } else if (!path.equals(other.path))
+                       return false;
+               if (port != other.port)
+                       return false;
+               if (redirect != other.redirect)
+                       return false;
+               if (serverVirtualSchema == null) {
+                       if (other.serverVirtualSchema != null)
+                               return false;
+               } else if 
(!serverVirtualSchema.equals(other.serverVirtualSchema))
+                       return false;
+               if (virtualSchema == null) {
+                       if (other.virtualSchema != null)
+                               return false;
+               } else if (!virtualSchema.equals(other.virtualSchema))
+                       return false;
+               if (visible != other.visible)
+                       return false;
+               return true;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiver.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiver.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiver.java
new file mode 100644
index 0000000..cc1d062
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiver.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: ResultReceiver.java,v $
+ * Revision           $Revision: 1.2 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2008/07/31 15:06:49 $
+ *               by   $Author: davidwithers $
+ * Created on Jan 18, 2008
+ *****************************************************************/
+package org.biomart.martservice;
+
+/**
+ * An interface for receiving results of a Query.
+ * 
+ * @author David Withers
+ */
+public interface ResultReceiver {
+
+       /**
+        * Receives a single row from the results of executing a Query.
+        * 
+        * This method will be called frequently and should not block.
+        * 
+        * @param resultRow
+        */
+       public void receiveResult(Object[] resultRow, long index) throws 
ResultReceiverException;
+       
+       /**
+        * Receives an error for a single row from the results of executing a 
Query.
+        * 
+        * This method will be called frequently and should not block.
+        * 
+        * @param resultRow
+        */
+       public void receiveError(String errorMessage, long index) throws 
ResultReceiverException;
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiverException.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiverException.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiverException.java
new file mode 100644
index 0000000..c3498e6
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/ResultReceiverException.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: ResultReceiverException.java,v $
+ * Revision           $Revision: 1.1 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2008/03/04 16:47:57 $
+ *               by   $Author: davidwithers $
+ * Created on 05-May-2006
+ *****************************************************************/
+package org.biomart.martservice;
+
+/**
+ * 
+ * @author David Withers
+ */
+public class ResultReceiverException extends Exception {
+       private static final long serialVersionUID = 7151337259555845771L;
+
+       /**
+        * Constructs a new exception with no detail message.
+        * 
+        */
+       public ResultReceiverException() {
+               super();
+       }
+
+       /**
+        * Constructs a new exception with the specified detail message.
+        * 
+        * @param message
+        *            the detail message
+        * @param cause
+        *            the cause (a null value is permitted, and indicates that 
the
+        *            cause is nonexistent or unknown)
+        */
+       public ResultReceiverException(String message, Throwable cause) {
+               super(message, cause);
+       }
+
+       /**
+        * Constructs a new exception with the specified detail message and 
cause.
+        * 
+        * @param message
+        *            the detail message
+        */
+       public ResultReceiverException(String message) {
+               super(message);
+       }
+
+       /**
+        * Constructs a new exception with the specified cause.
+        * 
+        * @param cause
+        *            the cause (a null value is permitted, and indicates that 
the
+        *            cause is nonexistent or unknown)
+        */
+       public ResultReceiverException(Throwable cause) {
+               super(cause);
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigController.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigController.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigController.java
new file mode 100644
index 0000000..450b2ba
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigController.java
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryConfigController.java,v $
+ * Revision           $Revision: 1.4 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/12/13 11:38:57 $
+ *               by   $Author: davidwithers $
+ * Created on 27-Mar-2006
+ *****************************************************************/
+package org.biomart.martservice.config;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.biomart.martservice.MartQuery;
+import org.biomart.martservice.config.event.QueryComponentEvent;
+import org.biomart.martservice.config.event.QueryComponentListener;
+import org.biomart.martservice.config.ui.QueryComponent;
+import org.biomart.martservice.query.Attribute;
+import org.biomart.martservice.query.Dataset;
+import org.biomart.martservice.query.Filter;
+import org.biomart.martservice.query.Query;
+import org.biomart.martservice.query.QueryListener;
+import org.ensembl.mart.lib.config.FilterDescription;
+
+/**
+ * Controls the interaction between graphical <code>QueryComponent</code>s
+ * and <code>Query</code>s.
+ * 
+ * @author David Withers
+ */
+public class QueryConfigController {
+       private static Logger logger = Logger
+                       .getLogger("org.biomart.martservice.config");
+
+       private static QueryListener queryListener = new QueryHandler();
+
+       private MartQuery martQuery;
+
+       private Query query;
+
+       private Map<String, Attribute> initialAttributeMap = new 
HashMap<String, Attribute>();
+
+       private Map<String, Filter> initialFilterMap = new HashMap<String, 
Filter>();
+
+       private Map<String, Attribute> nameToAttributeMap = new HashMap<String, 
Attribute>();
+
+       private Map     <String, Filter> nameToFilterMap = new HashMap<String, 
Filter>();
+
+       private QueryComponentHandler queryComponenHandler = new 
QueryComponentHandler();
+
+       /**
+        * Constructs an instance of a <code>QueryConfigController</code>.
+        * 
+        * @param martQuery
+        */
+       public QueryConfigController(MartQuery martQuery) {
+               this.martQuery = martQuery;
+               query = martQuery.getQuery();
+               query.addQueryListener(queryListener);
+
+               for (Attribute attribute : query.getAttributes()) {
+                       initialAttributeMap.put(attribute.getQualifiedName(), 
attribute);
+                       nameToAttributeMap.put(attribute.getQualifiedName(), 
attribute);
+               }
+               for (Filter filter : query.getFilters()) {
+                       initialFilterMap.put(filter.getQualifiedName(), filter);
+                       nameToFilterMap.put(filter.getQualifiedName(), filter);
+               }
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see java.lang.Object#finalize()
+        */
+       protected void finalize() throws Throwable {
+               super.finalize();
+               query.removeQueryListener(queryListener);
+       }
+
+       /**
+        * Returns the <code>MartQuery</code> under control.
+        * 
+        * @return the <code>MartQuery</code> under control
+        */
+       public MartQuery getMartQuery() {
+               return martQuery;
+       }
+
+       /**
+        * Removes a <code>QueryComponent</code> from the controller.
+        * 
+        * @param queryComponent
+        *            the <code>QueryComponent</code> to remove
+        */
+       public void deregister(QueryComponent queryComponent) {
+               
queryComponent.removeQueryComponentListener(queryComponenHandler);
+       }
+
+       /**
+        * Registers a <code>QueryComponent</code> with the controller.
+        * 
+        * If the <code>Query</code> already contains an <code>Attribute</code>
+        * or <code>Filter</code> with the corresponding name the
+        * <code>QueryComponent</code> is set as selected.
+        * 
+        * @param queryComponent
+        *            the <code>QueryComponent</code> to register
+        */
+       public void register(QueryComponent queryComponent) {
+               if (queryComponent.getType() == QueryComponent.ATTRIBUTE) {
+                       getAttribute(queryComponent);
+
+                       // if query already contains attribute then set the 
component as
+                       // selected
+                       if (initialAttributeMap.containsKey(queryComponent
+                                       .getQualifiedName())) {
+                               queryComponent.setSelected(true);
+                       }
+
+               } else if (queryComponent.getType() == QueryComponent.FILTER) {
+                       Filter filter = getFilter(queryComponent);
+
+                       String value = filter.getValue();
+                       if (value != null) {
+                               if (filter.isBoolean()) {
+                                       if ("excluded".equals(value)) {
+                                               
queryComponent.setValue("excluded");
+                                       } else {
+                                               queryComponent.setValue("only");
+                                       }
+                               } else {
+                                       queryComponent.setValue(value);
+                               }
+                       }
+
+                       if 
(initialFilterMap.containsKey(queryComponent.getQualifiedName())) {
+                               queryComponent.setSelected(true);
+                       }
+               } else if (queryComponent.getType() == QueryComponent.LINK) {
+                       Iterator<String> linkedDatasets = 
martQuery.getLinkedDatasets().iterator();
+                       // only one linked dataset allowed for now
+                       if (linkedDatasets.hasNext()) {
+                               String dataset = linkedDatasets.next();
+                               queryComponent.setName(dataset);
+                               
queryComponent.setValue(martQuery.getLink(dataset));
+                       }
+               }
+
+               queryComponent.addQueryComponentListener(queryComponenHandler);
+
+       }
+
+       /**
+        * Returns the <code>Attribute</code> mapped to the
+        * <code>QueryComponent</code>. If no <code>Attribute</code> is mapped
+        * a new <code>Attribute</code> is created and added to the map.
+        * 
+        * @param queryComponent
+        * @return
+        */
+       private Attribute getAttribute(QueryComponent queryComponent) {
+               String internalName = queryComponent.getQualifiedName();
+               Attribute attribute = null;
+               if (nameToAttributeMap.containsKey(internalName)) {
+                       attribute = (Attribute) 
nameToAttributeMap.get(internalName);
+               } else {
+                       attribute = new Attribute(queryComponent.getName());
+                       if (queryComponent.getValue() != null) {
+                               
attribute.setAttributes(queryComponent.getValue());
+                       }
+                       nameToAttributeMap.put(internalName, attribute);
+               }
+               return attribute;
+       }
+
+       /**
+        * Returns the <code>Filter</code> mapped to the
+        * <code>QueryComponent</code>. If no <code>Filter</code> is mapped a
+        * new <code>Filter</code> is created and added to the map.
+        * 
+        * @param queryComponent
+        * @return
+        */
+       private Filter getFilter(QueryComponent queryComponent) {
+               FilterDescription filterDescription = (FilterDescription) 
queryComponent
+                               .getConfigObject();
+               String internalName = queryComponent.getQualifiedName();
+               Filter filter;
+               if (nameToFilterMap.containsKey(internalName)) {
+                       filter = (Filter) nameToFilterMap.get(internalName);
+               } else {
+                       if ("boolean".equals(filterDescription.getType())) {
+                               if 
("excluded".equals(queryComponent.getValue())) {
+                                       filter = new 
Filter(queryComponent.getName(), "excluded", true);
+                               } else {
+                                       filter = new 
Filter(queryComponent.getName(), "only", true);
+                               }
+                       } else {
+                               String defaultValue = 
filterDescription.getDefaultValue();
+                               if (defaultValue == null
+                                               && 
!QueryConfigUtils.isNestedList(filterDescription)) {
+                                       // if there is no default value but 
there are options then
+                                       // choose the first option as the 
filter value
+//                                     Option[] options = 
filterDescription.getOptions();
+//                                     if (options != null && options.length > 
0) {
+//                                             defaultValue = 
options[0].getValue();
+//                                     } else {
+                                               defaultValue = 
queryComponent.getValue();
+//                                     }
+                               }
+                               filter = new Filter(queryComponent.getName(), 
defaultValue);
+                               if 
("id_list".equals(filterDescription.getType())) {
+                                       filter.setList(true);
+                               }
+                       }
+                       nameToFilterMap.put(internalName, filter);
+               }
+               return filter;
+       }
+
+       class QueryComponentHandler implements QueryComponentListener {
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#attributeAdded(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+                */
+               public void attributeAdded(QueryComponentEvent event) {
+                       Attribute attribute = (Attribute) 
nameToAttributeMap.get(event
+                                       .getDataset().getName()
+                                       + "." + event.getName());
+                       synchronized (query) {
+                               
martQuery.addAttribute(event.getDataset().getName(), attribute);
+                       }
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#attributeRemoved(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+                */
+               public void attributeRemoved(QueryComponentEvent event) {
+                       Attribute attribute = (Attribute) 
nameToAttributeMap.get(event
+                                       .getDataset().getName()
+                                       + "." + event.getName());
+                       synchronized (query) {
+                               martQuery.removeAttribute(attribute);
+                       }
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterAdded(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+                */
+               public void filterAdded(QueryComponentEvent event) {
+                       Filter filter = (Filter) 
nameToFilterMap.get(event.getDataset()
+                                       .getName()
+                                       + "." + event.getName());
+                       synchronized (query) {
+                               
martQuery.addFilter(event.getDataset().getName(), filter);
+                       }
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterRemoved(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+                */
+               public void filterRemoved(QueryComponentEvent event) {
+                       Filter filter = (Filter) 
nameToFilterMap.get(event.getDataset()
+                                       .getName()
+                                       + "." + event.getName());
+                       synchronized (query) {
+                               martQuery.removeFilter(filter);
+                       }
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterChanged(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+                */
+               public void filterChanged(QueryComponentEvent event) {
+                       Filter filter = (Filter) 
nameToFilterMap.get(event.getDataset()
+                                       .getName()
+                                       + "." + event.getName());
+                       synchronized (query) {
+                               filter.setValue(event.getValue());
+                       }
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.biomart.martservice.config.event.QueryComponentListener#linkAdded(org.biomart.martservice.config.event.QueryComponentEvent)
+                */
+               public void linkAdded(QueryComponentEvent event) {
+                       martQuery.addLinkedDataset(event.getName(), 
event.getValue());
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.biomart.martservice.config.event.QueryComponentListener#linkRemoved(org.biomart.martservice.config.event.QueryComponentEvent)
+                */
+               public void linkRemoved(QueryComponentEvent event) {
+                       martQuery.removeLinkedDataset(event.getName());
+               }
+
+               /*
+                * (non-Javadoc)
+                * 
+                * @see 
org.biomart.martservice.config.QueryComponentListener#linkChanged(org.biomart.martservice.config.QueryComponentEvent)
+                */
+               public void linkChanged(QueryComponentEvent event) {
+                       martQuery.changeLinkedDataset(event.getName(), 
event.getValue());
+               }
+
+       }
+
+       static class QueryHandler implements QueryListener {
+
+               public void attributeAdded(Attribute attribute, Dataset 
dataset) {
+                       logger.info("Attribute Added " + 
attribute.getQualifiedName());
+               }
+
+               public void attributeRemoved(Attribute attribute, Dataset 
dataset) {
+                       logger.info("Attribute Removed " + 
attribute.getQualifiedName());
+               }
+
+               public void filterAdded(Filter filter, Dataset dataset) {
+                       logger.info("Filter Added " + filter.getQualifiedName() 
+ " "
+                                       + filter.getValue());
+               }
+
+               public void filterRemoved(Filter filter, Dataset dataset) {
+                       logger.info("Filter Removed " + 
filter.getQualifiedName());
+               }
+
+               public void filterChanged(Filter filter, Dataset dataset) {
+                       logger.info("Filter Changed " + 
filter.getQualifiedName() + " "
+                                       + filter.getValue());
+               }
+
+               public void formatterAdded(String formatter) {
+                       logger.info("Formatter Added " + formatter);
+               }
+
+               public void formatterRemoved(String formatter) {
+                       logger.info("Formatter Removed " + formatter);
+               }
+
+               public void formatterChanged(String formatter) {
+                       logger.info("Formatter Changed to " + formatter);
+               }
+
+       }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigUtils.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigUtils.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigUtils.java
new file mode 100644
index 0000000..2bc7d71
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/QueryConfigUtils.java
@@ -0,0 +1,598 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryConfigUtils.java,v $
+ * Revision           $Revision: 1.3 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/12/13 11:38:57 $
+ *               by   $Author: davidwithers $
+ * Created on 30-Mar-2006
+ *****************************************************************/
+package org.biomart.martservice.config;
+
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.border.EtchedBorder;
+
+import org.biomart.martservice.MartDataset;
+import org.biomart.martservice.MartService;
+import org.biomart.martservice.MartServiceException;
+import org.biomart.martservice.config.ui.QueryComponent;
+import org.ensembl.mart.lib.config.AttributeDescription;
+import org.ensembl.mart.lib.config.AttributePage;
+import org.ensembl.mart.lib.config.BaseNamedConfigurationObject;
+import org.ensembl.mart.lib.config.DatasetConfig;
+import org.ensembl.mart.lib.config.FilterDescription;
+import org.ensembl.mart.lib.config.Option;
+
+/**
+ * Utility class for configuration objects.
+ * 
+ * @author David Withers
+ */
+public abstract class QueryConfigUtils {
+       public static final String LINE_END = 
System.getProperty("line.separator");
+
+       private static int DISPLAY_WIDTH = 35;
+       
+       public static String splitSentence(String sentence) {
+               return splitSentence(sentence, DISPLAY_WIDTH);
+       }
+
+       public static String splitSentence(String sentence, int limit) {
+               StringBuffer sb = new StringBuffer();
+               sb.append("<html>");
+
+               int width = 0;
+               String[] split = sentence.split(" ");
+               for (int i = 0; i < split.length; i++) {
+                       if (width == 0) {
+                               sb.append(split[i]);
+                               width += split[i].length();
+                       } else if (width + split[i].length() + 1 > limit) {
+                               sb.append("<br>");
+                               sb.append(split[i]);
+                               width = split[i].length();
+                       } else {
+                               sb.append(" ");
+                               sb.append(split[i]);
+                               width += split[i].length() + 1;
+                       }
+               }
+
+               return sb.toString();
+       }
+
+       /**
+        * Returns name truncated to DISPLAY_WIDTH.
+        * 
+        * @param name
+        * @return
+        */
+       public static String truncateName(String name) {
+               if (name.length() > DISPLAY_WIDTH) {
+                       return name.substring(0, DISPLAY_WIDTH);
+               } else {
+                       return name;
+               }
+       }
+
+       public static List<String> getOutputFormats(AttributePage 
attributePage) {
+               List<String> outputFormats = new ArrayList<String>();
+               
+               String[] formats = attributePage.getOutFormats().split(",");
+               for (int i = 0; i < formats.length; i++) {
+                       outputFormats.add(formats[i]);
+               }
+               return outputFormats;
+       }
+       
+       /**
+        * Returns true if filterDescription has no options.
+        * 
+        * @param filterDescription
+        * @return true if filterDescription has no options
+        */
+       public static boolean isList(FilterDescription filterDescription) {
+               return filterDescription.getOptions().length > 0;
+       }
+
+       /**
+        * Returns true if filterDescription has options and at least one option
+        * also has options.
+        * 
+        * @param filterDescription
+        * @return true if filterDescription has options and at least one option
+        *         also has options
+        */
+       public static boolean isNestedList(FilterDescription filterDescription) 
{
+               Option[] options = filterDescription.getOptions();
+               for (int i = 0; i < options.length; i++) {
+                       if (options[i].getOptions().length > 0) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Returns true if filterDescription has options and the first option 
has a
+        * type equal to "boolean".
+        * 
+        * @param filterDescription
+        * @return true if filterDescription has options and the first option 
has a
+        *         type equal to "boolean"
+        */
+       public static boolean isBooleanList(FilterDescription 
filterDescription) {
+               Option[] options = filterDescription.getOptions();
+               if (options.length > 0) {
+                       if ("boolean".equals(options[0].getType())) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Returns true if filterDescription has options and the first option 
has a
+        * value equal to null.
+        * 
+        * @param filterDescription
+        * @return true if filterDescription has options and the first option 
has a
+        *         value equal to null
+        */
+       public static boolean isIdList(FilterDescription filterDescription) {
+               Option[] options = filterDescription.getOptions();
+               if (options.length > 0) {
+                       if (options[0].getValue() == null) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       public static Option[] fixOptionLength(Option[] options, int length) {
+               if (options.length > length) {
+                       Option[] firstOptions = new Option[length];
+                       Option[] otherOptions = new Option[options.length - 
(length - 1)];
+                       for (int i = 0; i < length - 1; i++) {
+                               firstOptions[i] = options[i];
+                               fixOptionLength(options[i].getOptions(), 
length);
+                       }
+                       for (int i = length - 1; i < options.length; i++) {
+                               otherOptions[i - (length - 1)] = options[i];
+                       }
+                       Option newOption = new Option();
+                       newOption.setInternalName("more");
+                       newOption.setDisplayName("more");
+                       newOption.addOptions(fixOptionLength(otherOptions, 
length));
+                       firstOptions[length - 1] = newOption;
+                       return firstOptions;
+               } else {
+                       return options;
+               }
+       }
+
+       public static Component getOptionButton(
+                       FilterDescription filterDescription, QueryComponent 
queryComponent) {
+               JMenuBar menuBar = new JMenuBar();
+               menuBar.setBorder(new EtchedBorder());
+               JMenu menu = new JMenu("browse");
+               menu.setFont(menu.getFont().deriveFont(Font.PLAIN));
+               menuBar.add(menu);
+               Option[] options = 
fixOptionLength(filterDescription.getOptions(), 20);
+               for (int i = 0; i < options.length; i++) {
+                       menu.add(getMenuItem(options[i], queryComponent));
+               }
+               return menuBar;
+       }
+
+       public static JMenuItem getMenuItem(final Option option,
+                       final QueryComponent queryComponent) {
+               JMenuItem menuItem;
+
+               Option[] options = option.getOptions();
+               if (options.length > 0) {
+                       JMenu menu = new JMenu(option.getDisplayName());
+                       menu.setFont(menu.getFont().deriveFont(Font.PLAIN));
+                       for (int i = 0; i < options.length; i++) {
+                               menu.add(getMenuItem(options[i], 
queryComponent));
+                       }
+                       menuItem = menu;
+               } else {
+                       menuItem = new JMenuItem(option.getDisplayName());
+                       
menuItem.setFont(menuItem.getFont().deriveFont(Font.PLAIN));
+                       menuItem.addActionListener(new ActionListener() {
+
+                               public void actionPerformed(ActionEvent e) {
+                                       
queryComponent.setValue(option.getValue());
+                               }
+
+                       });
+               }
+
+               return menuItem;
+       }
+
+       /**
+        * Returns the dataset referenced by a configuration object or null if 
the
+        * configuration object does not reference a dataset.
+        * 
+        * @param martService
+        *            the MartService to fetch the referenced dataset from
+        * @param referencedFromDataset
+        *            the datset containing the configuration object
+        * @param bnco
+        *            the configuration object
+        * @return the dataset referenced by a configuration object or null if 
the
+        *         configuration object does not reference a dataset.
+        * @throws MartServiceException
+        *             if and exception occurs while fetching the dataset
+        */
+       public static MartDataset getReferencedDataset(MartService martService,
+                       MartDataset referencedFromDataset,
+                       BaseNamedConfigurationObject bnco, String 
softwareVersion)
+                       throws MartServiceException {
+               if ("0.5".equals(softwareVersion)) {
+                       String pointerDataset = 
bnco.getAttribute("pointerDataset");
+                       if (pointerDataset != null) {
+                               return 
martService.getDataset(referencedFromDataset
+                                               .getVirtualSchema(), 
pointerDataset);
+                       } else {
+                               return null;
+                       }
+               } else {
+                       String[] splitName = 
bnco.getInternalName().split("\\.");
+                       if (splitName.length > 1) {
+                               return 
martService.getDataset(referencedFromDataset
+                                               .getVirtualSchema(), 
splitName[0]);
+                       } else {
+                               return null;
+                       }
+               }
+       }
+
+       /**
+        * Returns the filter description referenced by the filter description.
+        * 
+        * @param martService
+        *            the MartService to fetch the referenced filter description
+        *            from
+        * @param dataset
+        *            the datset containing the referenced filter description
+        * @param filterDescription
+        *            the filter description
+        * @return the filter description referenced by the filter description
+        * @throws MartServiceException
+        *             if and exception occurs while fetching the filter 
description
+        */
+       public static FilterDescription getReferencedFilterDescription(
+                       MartService martService, MartDataset dataset,
+                       FilterDescription filterDescription, String 
softwareVersion)
+                       throws MartServiceException {
+               if ("0.5".equals(softwareVersion)) {
+                       String pointerFilter = filterDescription
+                                       .getAttribute("pointerFilter");
+                       if (pointerFilter != null) {
+                               return 
getReferencedFilterDescription(martService, dataset,
+                                               pointerFilter);
+                       } else {
+                               return null;
+                       }
+               } else {
+                       String[] splitName = 
filterDescription.getInternalName().split(
+                                       "\\.");
+                       FilterDescription ref = 
getReferencedFilterDescription(martService,
+                                       dataset, splitName[1]);
+                       return ref;
+               }
+       }
+
+       /**
+        * Returns the filter description referenced by the attribute 
description.
+        * 
+        * @param martService
+        *            the MartService to fetch the referenced filter description
+        *            from
+        * @param dataset
+        *            the datset containing the referenced filter description
+        * @param attributeDescription
+        *            the attribute description
+        * @return the filter description referenced by the attribute 
description
+        * @throws MartServiceException
+        *             if and exception occurs while fetching the filter 
description
+        */
+       public static FilterDescription getReferencedFilterDescription(
+                       MartService martService, MartDataset dataset,
+                       AttributeDescription attributeDescription, String 
softwareVersion)
+                       throws MartServiceException {
+               if ("0.5".equals(softwareVersion)) {
+                       String pointerFilter = attributeDescription
+                                       .getAttribute("pointerFilter");
+                       if (pointerFilter != null) {
+                               return 
getReferencedFilterDescription(martService, dataset,
+                                               pointerFilter);
+                       } else {
+                               return null;
+                       }
+               } else {
+                       String[] splitName = 
attributeDescription.getInternalName().split(
+                                       "\\.");
+                       return getReferencedFilterDescription(martService, 
dataset,
+                                       splitName[2]);
+               }
+       }
+
+       public static FilterDescription getReferencedFilterDescription(
+                       MartService martService, MartDataset dataset, String 
filterName)
+                       throws MartServiceException {
+               FilterDescription referencedFilter = null;
+               DatasetConfig datasetConfig = 
martService.getDatasetConfig(dataset);
+               List<FilterDescription> filterDescriptions = 
datasetConfig.getAllFilterDescriptions();
+               for (FilterDescription filterDescription : filterDescriptions) {
+                       if 
(filterName.equals(filterDescription.getInternalName())) {
+                               if 
(!"true".equals(filterDescription.getHidden())) {
+                                       referencedFilter = filterDescription;
+                                       break;
+                               }
+                       }
+               }
+               return referencedFilter;
+       }
+
+       public static FilterDescription getReferencedFilterDescription(
+                       AttributeDescription attributeDescription, String 
softwareVersion) {
+               FilterDescription filterDescription = new FilterDescription();
+               if ("0.5".equals(softwareVersion)) {
+                       filterDescription.setInternalName(attributeDescription
+                                       .getInternalName());
+                       filterDescription.setAttribute(attributeDescription
+                                       .getAttribute("pointerDataset"));
+                       filterDescription.setAttribute(attributeDescription
+                                       .getAttribute("pointerFilter"));
+                       filterDescription.setAttribute(attributeDescription
+                                       .getAttribute("pointerInterface"));
+               } else {
+                       String[] splitName = 
attributeDescription.getInternalName().split(
+                                       "\\.");
+                       filterDescription
+                                       .setInternalName(splitName[0] + "." + 
splitName[2]);
+               }
+               return filterDescription;
+       }
+
+       public static AttributeDescription getReferencedAttributeDescription(
+                       MartService martService, MartDataset dataset,
+                       AttributeDescription attributeDescription, String 
softwareVersion)
+                       throws MartServiceException {
+               AttributeDescription referencedAttributeDescription = null;
+               String attributeName = null;
+               if ("0.5".equals(softwareVersion)) {
+                       attributeName = attributeDescription
+                                       .getAttribute("pointerAttribute");
+               } else {
+                       String internalName = 
attributeDescription.getInternalName();
+                       String[] splitName = internalName.split("\\.");
+                       if (splitName.length == 2) {
+                               attributeName = splitName[1];
+                       }
+               }
+               if (attributeName != null) {
+                       DatasetConfig datasetConfig = 
martService.getDatasetConfig(dataset);
+                       if 
(datasetConfig.containsAttributeDescription(attributeName)) {
+                               referencedAttributeDescription = datasetConfig
+                                               
.getAttributeDescriptionByInternalName(attributeName);
+                       }
+               }
+               return referencedAttributeDescription;
+       }
+
+       /**
+        * Returns true if the internal name of the configuration object 
contains a
+        * '.' character.
+        * 
+        * @param bnco
+        *            the configuration object
+        * @return true if the internal name of the configuration object 
contains a
+        *         '.' character
+        */
+       public static boolean isReference(BaseNamedConfigurationObject bnco,
+                       String softwareVersion) {
+               if ("0.5".equals(softwareVersion)) {
+                       return bnco.getAttribute("pointerDataset") != null 
+                       && (bnco.getAttribute("pointerAttribute") != null || 
bnco.getAttribute("pointerFilter") != null);
+               } else {
+                       return bnco.getInternalName().indexOf(".") != -1;
+               }
+       }
+
+       /**
+        * Returns true if the internal name of the AttributeDescription has the
+        * format "[datasetName].[attributeName]".
+        * 
+        * @param attributeDescription
+        * @return true if the internal name of the AttributeDescription has the
+        *         format "[datasetName].[attributeName]"
+        */
+       public static boolean isAttributeReference(
+                       AttributeDescription attributeDescription, String 
softwareVersion) {
+               if ("0.5".equals(softwareVersion)) {
+                       return 
attributeDescription.getAttribute("pointerAttribute") != null;
+               } else {
+                       return 
attributeDescription.getInternalName().split("\\.").length == 2;
+               }
+       }
+
+       /**
+        * Returns true if the internal name of the AttributeDescription has the
+        * format "[datasetName].filter.[filterName]".
+        * 
+        * @param attributeDescription
+        * @return true if the internal name of the AttributeDescription has the
+        *         format "[datasetName].filter.[filterName]"
+        */
+       public static boolean isFilterReference(
+                       AttributeDescription attributeDescription, String 
softwareVersion) {
+               if ("0.5".equals(softwareVersion)) {
+                       return 
attributeDescription.getAttribute("pointerFilter") != null;
+               } else {
+                       return 
attributeDescription.getInternalName().split("\\.").length == 3;
+               }
+       }
+
+//     /**
+//      * Returns the qualified name of the AttributeDescription in the format
+//      * "[datasetName].[attributeName]".
+//      * 
+//      * @param dataset
+//      * @param attributeDescription
+//      * @return true if the qualified name of the AttributeDescription in the
+//      *         format "[datasetName].[attributeName]"
+//      */
+//     public static String getQualifiedName(MartDataset dataset,
+//                     AttributeDescription attributeDescription, String 
softwareVersion) {
+//             if ("0.5".equals(softwareVersion)) {
+//                     if (isAttributeReference(attributeDescription, 
softwareVersion)) {
+//                             return 
attributeDescription.getAttribute("pointerDataset")
+//                                             + "."
+//                                             + 
attributeDescription.getAttribute("pointerAttribute");
+//                     } else if (isFilterReference(attributeDescription, 
softwareVersion)) {
+//                             return 
attributeDescription.getAttribute("pointerDataset")
+//                                             + "."
+//                                             + 
attributeDescription.getAttribute("pointerFilter");
+//                     } else {
+//                             return dataset.getName()
+//                                             + 
attributeDescription.getInternalName();
+//                     }
+//             } else {
+//                     if (isAttributeReference(attributeDescription, 
softwareVersion)) {
+//                             return attributeDescription.getInternalName();
+//                     } else if (isFilterReference(attributeDescription, 
softwareVersion)) {
+//                             String[] splitName = 
attributeDescription.getInternalName()
+//                                             .split("\\.");
+//                             return splitName[0] + "." + splitName[2];
+//                     } else {
+//                             return dataset.getName()
+//                                             + 
attributeDescription.getInternalName();
+//                     }
+//             }
+//     }
+
+       public static String csvToValuePerLine(String csv) {
+               StringBuffer list = new StringBuffer();
+
+               String[] splitString = csv.split(",");
+               for (int i = 0; i < splitString.length; i++) {
+                       if (i > 0) {
+                               list.append(LINE_END);
+                       }
+                       list.append(splitString[i].trim());
+               }
+
+               return list.toString();
+       }
+
+       public static String valuePerLineToCsv(String list) {
+               return list.trim().replaceAll("\\s", ",");
+       }
+
+       public static List<String> csvToList(String csv) {
+               List<String> list = new ArrayList<String>();
+
+               String[] splitString = csv.split(",");
+               for (int i = 0; i < splitString.length; i++) {
+                       list.add(splitString[i].trim());
+               }
+
+               return list;
+       }
+
+       /**
+        * Converts a List of objects to a comma separated string of the 
objects'
+        * string representations in the order given by the List's iterator. For
+        * example:
+        * 
+        * <blockquote>
+        * 
+        * <pre>
+        *          List list = Arrays.toList(new String[] {&quot;one&quot;, 
&quot;two&quot;, &quot;three&quot;};
+        *          System.out.println(listToCsv(list));
+        * </pre>
+        * 
+        * </blockquote> would return the string "one,two,three".
+        * 
+        * @param list
+        * @return a List of objects to a comma separated string of the object's
+        *         string representations
+        */
+       public static String listToCsv(List<?> list) {
+               StringBuffer sb = new StringBuffer();
+               for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
+                       sb.append(iter.next().toString());
+                       if (iter.hasNext()) {
+                               sb.append(',');
+                       }
+               }
+               return sb.toString();
+       }
+
+       /**
+        * Returns true iff the 'display' or 'hidden' value of the configuration
+        * object is not "true".
+        * 
+        * @param bnco
+        *            the configuration object
+        * @return true iff the 'display' or 'hidden' value of configuration 
object
+        *         is "true"
+        */
+       public static boolean display(BaseNamedConfigurationObject bnco) {
+               boolean display = true;
+               String hideDisplay = bnco.getDisplay();
+               if (hideDisplay != null) {
+                       if (hideDisplay.equals("true")) {
+                               display = false;
+                       }
+               } else {
+                       String hidden = bnco.getHidden();
+                       if (hidden != null) {
+                               if (hidden.equals("true")) {
+                                       display = false;
+                               }
+                       }
+               }
+               return display;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentAdapter.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentAdapter.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentAdapter.java
new file mode 100644
index 0000000..201cc1d
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentAdapter.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryComponentAdapter.java,v $
+ * Revision           $Revision: 1.1 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/01/31 14:12:06 $
+ *               by   $Author: davidwithers $
+ * Created on 04-Apr-2006
+ *****************************************************************/
+package org.biomart.martservice.config.event;
+
+/**
+ * An abstract adapter class for receiving <code>QueryComponent</code> events.
+ * The methods in this class are empty. This class exists as convenience for
+ * creating listener objects.
+ * 
+ * @author David Withers
+ */
+public class QueryComponentAdapter implements QueryComponentListener {
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#attributeAdded(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+        */
+       public void attributeAdded(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#attributeRemoved(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+        */
+       public void attributeRemoved(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterAdded(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+        */
+       public void filterAdded(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterRemoved(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+        */
+       public void filterRemoved(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentListener#filterChanged(org.embl.ebi.escience.scuflworkers.biomartservice.config.QueryComponentEvent)
+        */
+       public void filterChanged(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.biomart.martservice.config.event.QueryComponentListener#linkAdded(org.biomart.martservice.config.event.QueryComponentEvent)
+        */
+       public void linkAdded(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.biomart.martservice.config.event.QueryComponentListener#linkRemoved(org.biomart.martservice.config.event.QueryComponentEvent)
+        */
+       public void linkRemoved(QueryComponentEvent event) {
+       }
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see 
org.biomart.martservice.config.QueryComponentListener#linkChanged(org.biomart.martservice.config.QueryComponentEvent)
+        */
+       public void linkChanged(QueryComponentEvent event) {
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentEvent.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentEvent.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentEvent.java
new file mode 100644
index 0000000..6fc5d18
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentEvent.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryComponentEvent.java,v $
+ * Revision           $Revision: 1.1 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/01/31 14:12:06 $
+ *               by   $Author: davidwithers $
+ * Created on 03-Apr-2006
+ *****************************************************************/
+package org.biomart.martservice.config.event;
+
+import java.util.EventObject;
+
+import org.biomart.martservice.MartDataset;
+
+/**
+ * An event which indicates that a <code>QueryComponent</code> has been
+ * selected, deselected or its value has been modified.
+ * 
+ * @author David Withers
+ */
+public class QueryComponentEvent extends EventObject {
+       private static final long serialVersionUID = -7576317475836030298L;
+
+       private String name;
+
+       private MartDataset dataset;
+
+       private String value;
+
+       /**
+        * Constructs a new <code>QueryComponentEvent</code> instance.
+        * 
+        * @param source
+        *            the source of the event
+        * @param name
+        *            the name of the attribute or filter affected by this event
+        * @param dataset
+        *            the dataset containing the attribute or filter affected by
+        *            this event
+        */
+       public QueryComponentEvent(Object source, String name, MartDataset 
dataset) {
+               this(source, name, dataset, null);
+       }
+
+       /**
+        * Constructs a new <code>QueryComponentEvent</code> instance.
+        * 
+        * @param source
+        *            the source of the event
+        * @param name
+        *            the name of the attribute or filter affected by this event
+        * @param dataset
+        *            the dataset containing the attribute or filter affected by
+        *            this event
+        * @param value
+        *            the value of the filter affected by this event
+        */
+       public QueryComponentEvent(Object source, String name, MartDataset 
dataset,
+                       String value) {
+               super(source);
+               this.name = name;
+               this.dataset = dataset;
+               this.value = value;
+       }
+
+       /**
+        * Returns the name of the attribute or filter affected by this event.
+        * 
+        * @return the name of the attribute or filter affected by this event.
+        */
+       public String getName() {
+               return name;
+       }
+
+       /**
+        * Returns the dataset containing the attribute or filter affected by 
this
+        * event.
+        * 
+        * @return the dataset containing the attribute or filter affected by 
this
+        *         event.
+        */
+       public MartDataset getDataset() {
+               return dataset;
+       }
+
+       /**
+        * Returns the value of the filter affected by this event.
+        * 
+        * @return the value of the filter affected by this event.
+        */
+       public String getValue() {
+               return value;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentListener.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentListener.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentListener.java
new file mode 100644
index 0000000..af63326
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/event/QueryComponentListener.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: QueryComponentListener.java,v $
+ * Revision           $Revision: 1.1 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/01/31 14:12:06 $
+ *               by   $Author: davidwithers $
+ * Created on 03-Apr-2006
+ *****************************************************************/
+package org.biomart.martservice.config.event;
+
+import java.util.EventListener;
+
+/**
+ * The listener interface for receiving QueryComponent events.
+ * 
+ * @author David Withers
+ */
+public interface QueryComponentListener extends EventListener {
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for an attribute is
+        * selected.
+        * 
+        * @param event the query component event
+        */
+       public void attributeAdded(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for an attribute is
+        * deselected.
+        * 
+        * @param event the query component event
+        */
+       public void attributeRemoved(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a filter is selected.
+        * 
+        * @param event the query component event
+        */
+       public void filterAdded(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a filter is 
deselected.
+        * 
+        * @param event the query component event
+        */
+       public void filterRemoved(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a filter is changed.
+        * 
+        * @param event the query component event
+        */
+       public void filterChanged(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a link is selected.
+        * 
+        * @param event the query component event
+        */
+       public void linkAdded(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a link is deselected.
+        * 
+        * @param event the query component event
+        */
+       public void linkRemoved(QueryComponentEvent event);
+
+       /**
+        * Invoked when a <code>QueryComponent</code> for a dataset link id is
+        * changed.
+        * 
+        * @param event the query component event
+        */
+       public void linkChanged(QueryComponentEvent event);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-bioinformatics/blob/9e08cac0/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/ui/ConfigDisplayObject.java
----------------------------------------------------------------------
diff --git 
a/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/ui/ConfigDisplayObject.java
 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/ui/ConfigDisplayObject.java
new file mode 100644
index 0000000..89820d3
--- /dev/null
+++ 
b/taverna-biomart-martservice/src/main/java/org/biomart/martservice/config/ui/ConfigDisplayObject.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2003 The University of Manchester 
+ *
+ * Modifications to the initial code base are copyright of their
+ * respective authors, or their employers as appropriate.  Authorship
+ * of the modifications may be determined from the ChangeLog placed at
+ * the end of this file.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ *
+ ****************************************************************
+ * Source code information
+ * -----------------------
+ * Filename           $RCSfile: ConfigDisplayObject.java,v $
+ * Revision           $Revision: 1.1 $
+ * Release status     $State: Exp $
+ * Last modified on   $Date: 2007/01/31 14:12:09 $
+ *               by   $Author: davidwithers $
+ * Created on 17-Mar-2006
+ *****************************************************************/
+package org.biomart.martservice.config.ui;
+
+import java.awt.Component;
+
+import org.ensembl.mart.lib.config.BaseNamedConfigurationObject;
+
+/**
+ * An object containing a configuration object and it's graphical component.
+ * 
+ * @author David Withers
+ */
+public class ConfigDisplayObject {
+       private BaseNamedConfigurationObject configObject;
+
+       private Component component;
+
+       /**
+        * Constructs an instance of a <code>ConfigDisplayObject</code> with the
+        * specified configuration object and a <code>null</code> component.
+        * 
+        * @param configObject
+        *            the configuration object; must not be <code>null</code>
+        */
+       public ConfigDisplayObject(BaseNamedConfigurationObject configObject) {
+               this(configObject, null);
+       }
+
+       /**
+        * Constructs an instance of a <code>ConfigDisplayObject</code> with the
+        * specified configuration object and component.
+        * 
+        * @param configObject
+        *            the configuration object; must not be <code>null</code>
+        * @param component
+        *            the component
+        */
+       public ConfigDisplayObject(BaseNamedConfigurationObject configObject,
+                       Component component) {
+               if (configObject == null) {
+                       throw new IllegalArgumentException(
+                                       "Parameter 'configObject' must not be 
null");
+               }
+               this.configObject = configObject;
+               this.component = component;
+       }
+
+       /**
+        * Returns the display name.
+        * 
+        * @return the display name
+        */
+       public String getDisplayName() {
+               return configObject.getDisplayName();
+       }
+
+       /**
+        * Returns the internal name.
+        * 
+        * @return the internal name
+        */
+       public String getInternalName() {
+               return configObject.getInternalName();
+       }
+
+       /**
+        * Returns the display name.
+        * 
+        * @return the display name
+        */
+       public String toString() {
+               return getDisplayName();
+       }
+
+       /**
+        * Returns the configuration object.
+        * 
+        * @return the configuration object
+        */
+       public BaseNamedConfigurationObject getConfigObject() {
+               return configObject;
+       }
+
+       /**
+        * Returns the component.
+        * 
+        * @return the component.
+        */
+       public Component getComponent() {
+               return component;
+       }
+
+}

Reply via email to