You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 21:45:45 UTC

[14/51] [partial] incubator-taverna-workbench git commit: temporarily empty repository

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/BioCatalogueClient.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/BioCatalogueClient.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/BioCatalogueClient.java
deleted file mode 100644
index 0e033cc..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/BioCatalogueClient.java
+++ /dev/null
@@ -1,785 +0,0 @@
-package net.sf.taverna.biocatalogue.model.connectivity;
-
-import java.io.*;
-import java.net.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import net.sf.taverna.biocatalogue.model.BioCataloguePluginConstants;
-import net.sf.taverna.biocatalogue.model.Pair;
-import net.sf.taverna.biocatalogue.model.Resource.TYPE;
-import net.sf.taverna.biocatalogue.model.SoapOperationIdentity;
-import net.sf.taverna.biocatalogue.model.SoapOperationPortIdentity;
-import net.sf.taverna.biocatalogue.model.Util;
-import net.sf.taverna.biocatalogue.model.connectivity.BeansForJSONLiteAPI.ResourceIndex;
-import net.sf.taverna.t2.ui.perspectives.biocatalogue.integration.config.BioCataloguePluginConfiguration;
-
-import org.apache.log4j.Logger;
-import org.biocatalogue.x2009.xml.rest.Annotations;
-import org.biocatalogue.x2009.xml.rest.AnnotationsDocument;
-import org.biocatalogue.x2009.xml.rest.CollectionCoreStatistics;
-import org.biocatalogue.x2009.xml.rest.Filters;
-import org.biocatalogue.x2009.xml.rest.FiltersDocument;
-import org.biocatalogue.x2009.xml.rest.ResourceLink;
-import org.biocatalogue.x2009.xml.rest.RestMethod;
-import org.biocatalogue.x2009.xml.rest.RestMethodDocument;
-import org.biocatalogue.x2009.xml.rest.RestMethods;
-import org.biocatalogue.x2009.xml.rest.RestMethodsDocument;
-import org.biocatalogue.x2009.xml.rest.Search;
-import org.biocatalogue.x2009.xml.rest.SearchDocument;
-import org.biocatalogue.x2009.xml.rest.Service;
-import org.biocatalogue.x2009.xml.rest.ServiceDocument;
-import org.biocatalogue.x2009.xml.rest.ServiceProvider;
-import org.biocatalogue.x2009.xml.rest.ServiceProviderDocument;
-import org.biocatalogue.x2009.xml.rest.ServiceProviders;
-import org.biocatalogue.x2009.xml.rest.ServiceProvidersDocument;
-import org.biocatalogue.x2009.xml.rest.Services;
-import org.biocatalogue.x2009.xml.rest.ServicesDocument;
-import org.biocatalogue.x2009.xml.rest.SoapInput;
-import org.biocatalogue.x2009.xml.rest.SoapInputDocument;
-import org.biocatalogue.x2009.xml.rest.SoapOperation;
-import org.biocatalogue.x2009.xml.rest.SoapOperationDocument;
-import org.biocatalogue.x2009.xml.rest.SoapOperations;
-import org.biocatalogue.x2009.xml.rest.SoapOperationsDocument;
-import org.biocatalogue.x2009.xml.rest.SoapOutput;
-import org.biocatalogue.x2009.xml.rest.SoapOutputDocument;
-import org.biocatalogue.x2009.xml.rest.SoapService;
-import org.biocatalogue.x2009.xml.rest.SoapServiceDocument;
-import org.biocatalogue.x2009.xml.rest.Tag;
-import org.biocatalogue.x2009.xml.rest.TagDocument;
-import org.biocatalogue.x2009.xml.rest.Tags;
-import org.biocatalogue.x2009.xml.rest.TagsDocument;
-import org.biocatalogue.x2009.xml.rest.User;
-import org.biocatalogue.x2009.xml.rest.UserDocument;
-import org.biocatalogue.x2009.xml.rest.Users;
-import org.biocatalogue.x2009.xml.rest.UsersDocument;
-
-import com.google.gson.Gson;
-
-
-/**
- * @author Sergejs Aleksejevs
- */
-public class BioCatalogueClient
-{
-  // ******* CONSTANTS *******
-  // plugin details
-  public static final String PLUGIN_VERSION = "0.1.1";
-  public static final String PLUGIN_USER_AGENT = "Taverna2-ServiceCatalogue-plugin/" +
-                                                 PLUGIN_VERSION +
-                                                 " Java/" + System.getProperty("java.version");
-  
-  public static final String XML_MIME_TYPE = "application/xml";
-  public static final String JSON_MIME_TYPE = "application/json";
-  public static final String LITE_JSON_MIME_TYPE = "application/biocat-lite+json";
-  
-  public static final String XML_DATA_FORMAT = ".xml";
-  public static final String JSON_DATA_FORMAT = ".json";
-  public static final String LITE_JSON_DATA_FORMAT = ".bljson";
-  
-  
-  
-  // API URLs
-  public static final String DEFAULT_API_SANDBOX_BASE_URL = "http://sandbox.biocatalogue.org";
-  public static final String DEFAULT_API_TEST_SERVER_BASE_URL = "http://test.biocatalogue.org";
-  public static final String DEFAULT_API_LIVE_SERVER_BASE_URL = "http://www.biocatalogue.org";
-  
-  private static String BASE_URL;    // BioCatalogue base URL to use (can be updated at runtime)
-  
-  public static String API_REGISTRIES_URL;
-  public static String API_SERVICE_PROVIDERS_URL;
-  public static String API_USERS_URL;
-  public static String API_USER_FILTERS_URL;
-  public static String API_SERVICES_URL;
-  public static String API_SERVICE_FILTERS_URL;
-  public static String API_SOAP_OPERATIONS_URL;
-  public static String API_SOAP_OPERATION_FILTERS_URL;
-  public static String API_REST_METHODS_URL;
-  public static String API_REST_METHOD_FILTERS_URL;
-  public static String API_TAG_CLOUD_URL;
-  public static String API_SEARCH_URL;
-  public static String API_LOOKUP_URL;
-  
-  // URL modifiers
-  public static final Map<String,String> API_INCLUDE_SUMMARY = Collections.singletonMap("include","summary");          // for fetching Service
-  public static final Map<String,String> API_INCLUDE_ANCESTORS = Collections.singletonMap("include", "ancestors,inputs,outputs");     // for fetching SOAP Operations and REST Methods
-  public static final String[] API_SORT_BY_NAME = {"sort","name"};                   // for tag cloud
-  public static final String[] API_SORT_BY_COUNTS = {"sort","counts"};               // for tag cloud
-  public static final String[] API_ALSO_INPUTS_OUTPUTS = {"also","inputs,outputs"};  // for annotations on SOAP operation
-  
-  public static final String API_PER_PAGE_PARAMETER = "per_page";
-  public static final String API_PAGE_PARAMETER = "page";
-  public static final String API_LIMIT_PARAMETER = "limit";
-  public static final String API_SERVICE_MONITORING_URL_SUFFIX = "/monitoring";
-  public static final String API_FILTERED_INDEX_SUFFIX = "/filtered_index";
-  
-  // API Request scope
-  public static final String API_SCOPE_PARAMETER = "scope";
-  public static final String API_SCOPE_SOAP_OPERATIONS = "soap_operations";
-  public static final String API_SCOPE_REST_METHODS = "rest_methods";
-  public static final String API_SCOPE_SERVICES = "services";
-  public static final String API_SCOPE_SERVICE_PROVIDERS = "service_providers";
-  public static final String API_SCOPE_REGISTRIES = "registries";
-  public static final String API_SCOPE_USERS = "users";
-  
-  public static final String API_TAG_PARAMETER = "tag";
-  
-  public static final String API_LOOKUP_WSDL_LOCATION_PARAMETER = "wsdl_location";
-  public static final String API_LOOKUP_OPERATION_NAME_PARAMETER = "operation_name";
-  public static final String API_LOOKUP_SOAP_INPUT_NAME_PARAMETER = "input_name";
-  public static final String API_LOOKUP_SOAP_OUTPUT_NAME_PARAMETER = "output_name";
-  
-  
-  // *************************
-  
-  // universal date formatters
-  private static final DateFormat DATE_FORMATTER = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
-  private static final DateFormat SHORT_DATE_FORMATTER = new SimpleDateFormat("HH:mm 'on' dd/MM/yyyy");
-  private static final DateFormat API_LOGGING_TIMESTAMP_FORMATTER = DateFormat.getDateTimeInstance();
-  
-  
-  // SETTINGS
-  private Properties iniSettings;    // settings that are read/stored from/to INI file
-  
-  private File fAPIOperationLog;
-  private PrintWriter pwAPILogWriter;
-  
-  // the logger
-  private Logger logger = Logger.getLogger(BioCatalogueClient.class);
-  
-  private static BioCatalogueClient INSTANCE;
-  
-  // default constructor
-  private BioCatalogueClient()
-  {
-    // TODO: load any config settings (if necessary)
-    
-    // load the BioCatalogue API base URL from the plugin's configuration settings
-    this.setBaseURL(BioCataloguePluginConfiguration.getInstance().
-            getProperty(BioCataloguePluginConfiguration.SERVICE_CATALOGUE_BASE_URL));
-    
-    // open API operation log file, if necessary
-    if (BioCataloguePluginConstants.PERFORM_API_RESPONSE_TIME_LOGGING || 
-        BioCataloguePluginConstants.PERFORM_API_XML_DATA_BINDING_TIME_LOGGING )
-    {
-      try {
-        BioCataloguePluginConstants.LOG_FILE_FOLDER.mkdirs(); // just in case this log file was never written - create the folder as well
-        fAPIOperationLog = new File(BioCataloguePluginConstants.LOG_FILE_FOLDER, 
-                                    BioCataloguePluginConstants.API_OPERATION_LOG_FILENAME);
-        pwAPILogWriter = new PrintWriter(new FileOutputStream(fAPIOperationLog, true), true);  // auto-flush makes sure that even if app crashes, log will not be lost
-      }
-      catch (NullPointerException e) {
-        pwAPILogWriter = new PrintWriter(System.out, true);
-        logger.error("ERROR: Folder to log API operation details is unknown (using System.out instead)... Details:", e);
-      }
-      catch (FileNotFoundException e) {
-        logger.error("ERROR: Couldn't open API operation log file... Details:", e);
-      }
-    }
-  }
-  
-  public static synchronized BioCatalogueClient getInstance() {
-	  if (INSTANCE == null) {
-		  INSTANCE = new BioCatalogueClient();
-	  }
-	  return INSTANCE;
-  }
-  
-  
-  public String getBaseURL() {
-    return this.BASE_URL;
-  }
-  
-  /**
-   * Updates the base API URL and also
-   * updates derived URLs of sub-URLs
-   * (e.g. BASE_URL + /services, etc)
-   * 
-   * @param baseURL The new value for the BioCatalogue API base URL.
-   */
-  public void setBaseURL(String baseURL)
-  {
-    // make sure the base URL doesn't have a slash at the end
-    // (otherwise double slashes may occur during URL manipulation)
-    while (baseURL.endsWith("/")) { baseURL = baseURL.substring(0, baseURL.length() - 1); }
-    
-    this.BASE_URL = baseURL;
-    
-    API_REGISTRIES_URL = BASE_URL + "/registries";
-    API_SERVICE_PROVIDERS_URL = BASE_URL + "/service_providers";
-    API_USERS_URL = BASE_URL + "/users";
-    API_USER_FILTERS_URL = API_USERS_URL + "/filters";
-    API_SERVICES_URL = BASE_URL + "/services";
-    API_SERVICE_FILTERS_URL = API_SERVICES_URL + "/filters";
-    API_SOAP_OPERATIONS_URL = BASE_URL + "/soap_operations";
-    API_SOAP_OPERATION_FILTERS_URL = API_SOAP_OPERATIONS_URL + "/filters";
-    API_REST_METHODS_URL = BASE_URL + "/rest_methods";
-    API_REST_METHOD_FILTERS_URL = API_REST_METHODS_URL + "/filters";
-    API_TAG_CLOUD_URL = BASE_URL + "/tags";
-    API_SEARCH_URL = BASE_URL + "/search";
-    API_LOOKUP_URL = BASE_URL + "/lookup";
-  }
-  
-  public File getAPIOperationLog() {
-    return fAPIOperationLog;
-  }
-  
-  public PrintWriter getAPILogWriter() {
-    return pwAPILogWriter;
-  }
-  
-  
-  // ************ METHODS FOR RETRIEVAL OF SPECIALISED OBJECT FROM THE API VIA XML ************
-  
-  public Annotations getBioCatalogueAnnotations(String strAnnotationsURL) throws Exception {
-    return (parseAPIResponseStream(Annotations.class, doBioCatalogueGET(strAnnotationsURL)));
-  }
-  
-  public Filters getBioCatalogueFilters(String strURL) throws Exception {
-    return (parseAPIResponseStream(Filters.class, doBioCatalogueGET(strURL)));
-  }
-  
-  public Services getBioCatalogueServices(String strURL) throws Exception {
-    return (parseAPIResponseStream(Services.class, doBioCatalogueGET(strURL)));
-  }
-  
-  public Service getBioCatalogueService(String serviceURL) throws Exception {
-    return (parseAPIResponseStream(Service.class, doBioCatalogueGET(serviceURL)));
-  }
-  
-  public Service getBioCatalogueServiceSummary(String serviceURL) throws Exception {
-    return (parseAPIResponseStream(Service.class, doBioCatalogueGET(Util.appendAllURLParameters(serviceURL, API_INCLUDE_SUMMARY))));
-  }
-  
-  public Service getBioCatalogueServiceMonitoringData(String serviceURL) throws Exception
-  {
-    return (parseAPIResponseStream(Service.class,
-                                   doBioCatalogueGET(serviceURL + API_SERVICE_MONITORING_URL_SUFFIX))
-           );
-  }
-  
-  public SoapService getBioCatalogueSoapService(String soapServiceURL) throws Exception {
-    return (parseAPIResponseStream(SoapService.class, doBioCatalogueGET(soapServiceURL)));
-  }
-  
-  public SoapOperation getBioCatalogueSoapOperation(String soapOperationURL) throws Exception {
-    return (parseAPIResponseStream(SoapOperation.class, doBioCatalogueGET(soapOperationURL)));
-  }
-  
-  public RestMethod getBioCatalogueRestMethod(String restMethodURL) throws Exception {
-    return (parseAPIResponseStream(RestMethod.class, doBioCatalogueGET(restMethodURL)));
-  }
-  
-  public Search getBioCatalogueSearchData(String searchURL) throws Exception {
-    return (parseAPIResponseStream(Search.class, doBioCatalogueGET(searchURL)));
-  }
-  
-  public Tag getBioCatalogueTag(String searchByTagURL) throws Exception {
-    return (parseAPIResponseStream(Tag.class, doBioCatalogueGET(searchByTagURL)));
-  }
-  
-  public Tags getBioCatalogueTags(String tagsURL) throws Exception {
-    return (parseAPIResponseStream(Tags.class, doBioCatalogueGET(tagsURL)));
-  }
-  
-  
-  public ResourceLink getBioCatalogueResource(Class<? extends ResourceLink> classOfResourceToFetch, String resourceURL) throws Exception {
-    return (parseAPIResponseStream(classOfResourceToFetch, doBioCatalogueGET(resourceURL)));
-  }
-  
-  
-  public <T extends ResourceLink> Pair<CollectionCoreStatistics, List<T>> getListOfItemsFromResourceCollectionIndex(
-      Class<T> classOfCollectionOfRequiredReturnedObjects, BioCatalogueAPIRequest filteringRequest) throws Exception
-  {
-    ResourceLink matchingItems = null;
-    if (filteringRequest.getRequestType() == BioCatalogueAPIRequest.TYPE.GET) {
-      matchingItems = parseAPIResponseStream(classOfCollectionOfRequiredReturnedObjects, doBioCatalogueGET(filteringRequest.getURL()));
-    }
-    else {
-      matchingItems = parseAPIResponseStream(classOfCollectionOfRequiredReturnedObjects,
-                           doBioCataloguePOST_SendJSON_AcceptXML(filteringRequest.getURL(), filteringRequest.getData()));
-    }
-    
-    CollectionCoreStatistics statistics = null;
-    
-    List<T> matchingItemList = new ArrayList<T>();
-    
-    // SOAP Operations
-    if (classOfCollectionOfRequiredReturnedObjects.equals(SoapOperations.class)) {
-      SoapOperations soapOperations = (SoapOperations)matchingItems;
-      matchingItemList.addAll((Collection<? extends T>)(soapOperations.getResults().getSoapOperationList()));
-      statistics = soapOperations.getStatistics();
-    }
-    
-    // REST Methods
-    else if (classOfCollectionOfRequiredReturnedObjects.equals(RestMethods.class)) {
-      RestMethods restMethods = (RestMethods)matchingItems;
-      matchingItemList.addAll((Collection<? extends T>)(restMethods.getResults().getRestMethodList()));
-      statistics = restMethods.getStatistics();
-    }
-    
-    // Services
-    else if (classOfCollectionOfRequiredReturnedObjects.equals(Services.class)) {
-      Services services = (Services)matchingItems;
-      matchingItemList.addAll((Collection<? extends T>)(services.getResults().getServiceList()));
-      statistics = services.getStatistics();
-    }
-    
-    // Service Providers
-    else if (classOfCollectionOfRequiredReturnedObjects.equals(ServiceProviders.class)) {
-      ServiceProviders serviceProviders = (ServiceProviders)matchingItems;
-      matchingItemList.addAll((Collection<? extends T>)(serviceProviders.getResults().getServiceProviderList()));
-      statistics = serviceProviders.getStatistics();
-    }
-    
-    // Users
-    else if (classOfCollectionOfRequiredReturnedObjects.equals(Users.class)) {
-      Users users = (Users)matchingItems;
-      matchingItemList.addAll((Collection<? extends T>)(users.getResults().getUserList()));
-      statistics = users.getStatistics();
-    }
-    
-    // no such option - error
-    else {
-      return null;
-    }
-    
-    return new Pair<CollectionCoreStatistics, List<T>>(statistics, matchingItemList);
-  }
-  
-  
-  
-  
-  /**
-   * @param wsdlLocation
-   * @param operationName
-   * @return SoapOperation instance or <code>null</code> if nothing was found (or error occurred).
-   * @throws Exception
-   */
-  public SoapOperation lookupSoapOperation(SoapOperationIdentity soapOperationDetails) throws Exception
-  {
-    // first of all check for any problems with input data
-    if (soapOperationDetails == null || soapOperationDetails.hasError() ||
-        soapOperationDetails.getWsdlLocation() == null || soapOperationDetails.getWsdlLocation().length() == 0 ||
-        soapOperationDetails.getOperationName() == null || soapOperationDetails.getOperationName().length() == 0)
-    {
-      // something's not right - return null
-      return (null);
-    }
-    
-    String lookupURL = Util.appendURLParameter(API_LOOKUP_URL, API_LOOKUP_WSDL_LOCATION_PARAMETER, soapOperationDetails.getWsdlLocation());
-    lookupURL = Util.appendURLParameter(lookupURL, API_LOOKUP_OPERATION_NAME_PARAMETER, soapOperationDetails.getOperationName());
-    
-    ServerResponseStream lookupResponse = doBioCatalogueGET(lookupURL);
-    if (lookupResponse.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
-      return null;
-    }
-    return (parseAPIResponseStream(SoapOperation.class, lookupResponse));
-  }
-  
-  
-  public <T extends ResourceLink> T lookupSoapOperationPort(Class<T> requiredResultClass, SoapOperationPortIdentity portDetails) throws Exception
-  {
-    // first of all check for any problems with port details
-    if (portDetails == null || portDetails.hasError() ||
-        portDetails.getWsdlLocation() == null || portDetails.getWsdlLocation().length() == 0 ||
-        portDetails.getOperationName() == null || portDetails.getOperationName().length() == 0 ||
-        portDetails.getPortName() == null || portDetails.getPortName().length() == 0)
-    {
-      // something's not right - return null
-      return (null);
-    }
-    
-    // now check that specified class matches the port type
-    if (portDetails.isInput() && !requiredResultClass.equals(SoapInput.class) ||
-        !portDetails.isInput() && !requiredResultClass.equals(SoapOutput.class))
-    {
-      return (null);
-    }
-    
-    String lookupURL = Util.appendURLParameter(API_LOOKUP_URL, API_LOOKUP_WSDL_LOCATION_PARAMETER, portDetails.getWsdlLocation());
-    lookupURL = Util.appendURLParameter(lookupURL, API_LOOKUP_OPERATION_NAME_PARAMETER, portDetails.getOperationName());
-    if (portDetails.isInput()) {
-      lookupURL = Util.appendURLParameter(lookupURL, API_LOOKUP_SOAP_INPUT_NAME_PARAMETER, portDetails.getPortName());
-    }
-    else {
-      lookupURL = Util.appendURLParameter(lookupURL, API_LOOKUP_SOAP_OUTPUT_NAME_PARAMETER, portDetails.getPortName());
-    }
-    
-    ServerResponseStream lookupResponse = doBioCatalogueGET(lookupURL);
-    if (lookupResponse.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
-      return null;
-    }
-    return (parseAPIResponseStream(requiredResultClass, lookupResponse));
-  }
-  
-  
-  public Service lookupParentService(SoapOperationIdentity soapOperationDetails) throws Exception
-  {
-    SoapOperation soapOperation = this.lookupSoapOperation(soapOperationDetails);
-    if (soapOperation != null) {
-      return (getBioCatalogueService(soapOperation.getAncestors().getService().getHref()));
-    }
-    else {
-      // lookup didn't find the SOAP operation or there
-      // was some problem with the input data
-      return (null);
-    }
-  }
-  
-  
-  public Service lookupParentServiceMonitoringData(SoapOperationIdentity soapOperationDetails) throws Exception
-  {
-    SoapOperation soapOperation = this.lookupSoapOperation(soapOperationDetails);
-    if (soapOperation != null) {
-      return (getBioCatalogueServiceMonitoringData(soapOperation.getAncestors().getService().getHref()));
-    }
-    else {
-      // lookup didn't find the SOAP operation or there
-      // was some problem with the input data
-      return (null);
-    }
-  }
-  
-  
-  // ************ METHODS FOR RETRIEVAL OF SPECIALISED OBJECT FROM THE API VIA LITE JSON ************
-  
-  public BeansForJSONLiteAPI.ResourceIndex getBioCatalogueResourceLiteIndex(TYPE resourceType, String resourceIndexURL) throws Exception
-  {
-    ServerResponseStream response = doBioCatalogueGET_LITE_JSON(resourceIndexURL);
-    
-    Gson gson = new Gson();
-    return (ResourceIndex)(gson.fromJson(new InputStreamReader(response.getResponseStream()), resourceType.getJsonLiteAPIBindingBeanClass()));
-  }
-  
-  
-  public BeansForJSONLiteAPI.ResourceIndex postBioCatalogueResourceLiteIndex(TYPE resourceType, String resourceIndexURL, String postData) throws Exception
-  {
-    ServerResponseStream response = doBioCataloguePOST_SendJSON_AcceptLITEJSON(resourceIndexURL, postData);
-    
-    Gson gson = new Gson();
-    return (ResourceIndex)(gson.fromJson(new InputStreamReader(response.getResponseStream()), resourceType.getJsonLiteAPIBindingBeanClass()));
-  }
-  
-  
-  // ************ GENERIC API CONNECTIVITY METHODS ************
-  
-  /**
-   * Generic method to issue GET requests to BioCatalogue server.
-   * 
-   * This is a convenience method to be used instead of {@link BioCatalogueClient#doBioCatalogueGET_XML(String)}.
-   * 
-   * @param strURL The URL on BioCatalogue to issue GET request to.
-   * @return TODO
-   * @throws Exception
-   */
-  public ServerResponseStream doBioCatalogueGET(String strURL) throws Exception {
-    return (doBioCatalogueGET_XML(strURL));
-  }
-  
-  public ServerResponseStream doBioCatalogueGET_XML(String strURL) throws Exception {
-    return (doBioCatalogueGET(strURL, XML_MIME_TYPE, XML_DATA_FORMAT));
-  }
-  
-  public ServerResponseStream doBioCatalogueGET_JSON(String strURL) throws Exception {
-    return (doBioCatalogueGET(strURL, JSON_MIME_TYPE, JSON_DATA_FORMAT));
-  }
-  
-  public ServerResponseStream doBioCatalogueGET_LITE_JSON(String strURL) throws Exception {
-    return (doBioCatalogueGET(strURL, LITE_JSON_MIME_TYPE, LITE_JSON_DATA_FORMAT));
-  }
-  
-  
-  public ServerResponseStream doBioCatalogueGET(String strURL, String ACCEPT_HEADER, String REQUESTED_DATA_FORMAT) throws Exception
-  {
-    // TODO - HACK to speed up processing append .xml / .json / .bljson to all URLs to avoid LinkedData content negotiation
-    strURL = Util.appendStringBeforeParametersOfURL(strURL, REQUESTED_DATA_FORMAT);
-    
-    // open server connection using provided URL (with no further modifications to it)
-    URL url = new URL(strURL);
-    
-    Calendar requestStartedAt = Calendar.getInstance();
-    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-    conn.setRequestProperty("User-Agent", PLUGIN_USER_AGENT);
-    conn.setRequestProperty("Accept", ACCEPT_HEADER);
-    
-//    if(LOGGED_IN) {
-//      // if the user has "logged in", also add authentication details
-//      conn.setRequestProperty("Authorization", "Basic " + AUTH_STRING);
-//    }
-    
-    // fetch server's response
-    ServerResponseStream serverResponse = doBioCatalogueReceiveServerResponse(conn, strURL, true);
-    
-    if (BioCataloguePluginConstants.PERFORM_API_RESPONSE_TIME_LOGGING) {
-      logAPIOperation(requestStartedAt, "GET", serverResponse);
-    }
-    return (serverResponse);
-  }
-  
-  
-  
-  public ServerResponseStream doBioCataloguePOST_SendJSON_AcceptXML(String strURL, String strDataBody) throws Exception {
-    return (doBioCataloguePOST(strURL, strDataBody, JSON_MIME_TYPE, XML_MIME_TYPE, XML_DATA_FORMAT));
-  }
-  
-  public ServerResponseStream doBioCataloguePOST_SendJSON_AcceptLITEJSON(String strURL, String strDataBody) throws Exception {
-    return (doBioCataloguePOST(strURL, strDataBody, JSON_MIME_TYPE, LITE_JSON_MIME_TYPE, LITE_JSON_DATA_FORMAT));
-  }
-  
-  
-  /**
-   * Generic method to execute POST requests to BioCatalogue server.
-   * 
-   * @param strURL The URL on BioCatalogue to POST to. 
-   * @param strDataBody Body of the message to be POSTed to <code>strURL</code>. 
-   * @return An object containing server's response body as an InputStream and
-   *         a response code.
-   * @param CONTENT_TYPE_HEADER MIME type of the sent data.
-   * @param ACCEPT_HEADER MIME type of the data to be received.
-   * @param REQUESTED_DATA_FORMAT
-   * @throws Exception
-   */
-  public ServerResponseStream doBioCataloguePOST(String strURL, String strDataBody, String CONTENT_TYPE_HEADER,
-                                                 String ACCEPT_HEADER, String REQUESTED_DATA_FORMAT) throws Exception
-  {
-    // TODO - HACK to speed up processing append .xml / .json / .bljson to all URLs to avoid LinkedData content negotiation
-    strURL = Util.appendStringBeforeParametersOfURL(strURL, REQUESTED_DATA_FORMAT);
-    
-    // open server connection using provided URL (with no further modifications to it)
-    URL url = new URL (strURL);
-    
-    Calendar requestStartedAt = Calendar.getInstance();
-    HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
-    urlConn.setRequestMethod("POST");
-    urlConn.setDoOutput(true);
-    urlConn.setRequestProperty("User-Agent", PLUGIN_USER_AGENT);
-    urlConn.setRequestProperty("Content-Type", CONTENT_TYPE_HEADER);
-    urlConn.setRequestProperty("Accept", ACCEPT_HEADER);
-    
-    // prepare and POST XML data
-    OutputStreamWriter out = new OutputStreamWriter(urlConn.getOutputStream());
-    out.write(strDataBody);
-    out.close();
-    
-    
-    // fetch server's response
-    ServerResponseStream serverResponse = doBioCatalogueReceiveServerResponse(urlConn, strURL, false);
-    
-    if (BioCataloguePluginConstants.PERFORM_API_RESPONSE_TIME_LOGGING) {
-      logAPIOperation(requestStartedAt, "POST", serverResponse);
-    }
-    return (serverResponse);
-  }
-  
-  
-  /**
-   * Generic method to execute DELETE requests to myExperiment server.
-   * This is only to be called when a user is logged in. 
-   * 
-   * @param strURL The URL on myExperiment to direct DELETE request to.
-   * @return An object containing XML Document with server's response body and
-   *         a response code. Response body XML document might be null if there
-   *         was an error or the user wasn't authorised to perform a certain action.
-   *         Response code will always be set.
-   * @throws Exception
-   */
-  /*public ServerResponse doMyExperimentDELETE(String strURL) throws Exception
-  {
-    // open server connection using provided URL (with no modifications to it)
-    URL url = new URL(strURL);
-    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-    
-    // "tune" the connection
-    conn.setRequestMethod("DELETE");
-    conn.setRequestProperty("User-Agent", PLUGIN_USER_AGENT);
-    conn.setRequestProperty("Authorization", "Basic " + AUTH_STRING);
-    
-    // check server's response
-    return (doMyExperimentReceiveServerResponse(conn, strURL, true));
-  }*/
-  
-  
-  /**
-   * A common method for retrieving BioCatalogue server's response for both
-   * GET and POST requests.
-   * 
-   * @param conn Instance of the established URL connection to poll for server's response.
-   * @param strURL The URL on BioCatalogue with which the connection is established.
-   * @param bIsGetRequest Flag for identifying type of the request. True when the current 
-   *        connection executes GET request; false when it executes a POST / DELETE request.
-   * @return TODO
-   */
-  @SuppressWarnings("unchecked")
-  private ServerResponseStream doBioCatalogueReceiveServerResponse(HttpURLConnection conn, String strURL, boolean bIsGETRequest) throws Exception
-  {
-    int iResponseCode = conn.getResponseCode();
-    
-    switch (iResponseCode)
-    {
-      case HttpURLConnection.HTTP_OK:
-        // regular operation path - simply return the reference to the data input stream
-        return (new ServerResponseStream(iResponseCode, conn.getInputStream(), strURL));
-        
-      case HttpURLConnection.HTTP_BAD_REQUEST:
-        // this was a bad XML request - need full XML response to retrieve the error message from it;
-        // Java throws IOException if getInputStream() is used when non HTTP_OK response code was received -
-        // hence can use getErrorStream() straight away to fetch the error document
-        return (new ServerResponseStream(iResponseCode, conn.getErrorStream(), strURL));
-        
-      case HttpURLConnection.HTTP_UNAUTHORIZED:
-        // this content is not authorised for current user
-        return (new ServerResponseStream(iResponseCode, null, strURL));
-      
-      case HttpURLConnection.HTTP_NOT_FOUND:
-        // nothing was found at the provided URL
-        return (new ServerResponseStream(iResponseCode, conn.getErrorStream(), strURL));
-      
-      default:
-        // unexpected response code - raise an exception
-        throw new IOException("Received unexpected HTTP response code (" + iResponseCode + ") while " +
-            (bIsGETRequest ? "fetching data at " : "posting data to ") + strURL);
-    }
-  }
-  
-  
-  /**
-   * This method is here to make sure that *all* parsing of received input stream data
-   * from the API is parsed ("bound") into Java objects in a central place - so it's
-   * possible to measure performance of XmlBeans for various inputs.
-   * 
-   * NB! There is a serious limitation in Java's generics. Generic methods cannot
-   *     access any of the static context of the classes of type parameters, because
-   *     it wasn't designed for this. The only purpose of type parameters is compile-time
-   *     type-checking.
-   *     This means that even though all classes that could potentially be supplied as a
-   *     type-parameter would have certain static functionality, it's not possible to access
-   *     that through using the type-parameter like it's done in normal polymorhic situations.
-   *     Therefore, some switching based on the class of the type-parameter for this method is
-   *     done...
-   * 
-   * @param <T>
-   * @param classOfRequiredReturnedObject Class of the object that the caller expects to receive
-   *                                      after parsing provided server's response. For example,
-   *                                      a call to /tags.xml return the <pre>[tags]...[/tags]</pre>
-   *                                      document. <code>TagsDocument</code> should be used to access
-   *                                      its static factory and parse the input stream - the return
-   *                                      value will have type <code>Tags</code> -- <code>Tags.class</code>
-   *                                      is the required input value for this parameter in this situation then.
-   * @param serverResponse This object should contain the input stream obtained from the API in return
-   *                       to the call on some URL.
-   * @return               InputStream data parsed into the Java object of the supplied type [T].
-   * @throws Exception
-   */
-  @SuppressWarnings("unchecked")
-  private <T extends ResourceLink> T parseAPIResponseStream(Class<T> classOfRequiredReturnedObject, ServerResponseStream serverResponse) throws Exception
-  {
-    T parsedObject = null;
-    InputStream xmlInputStream = serverResponse.getResponseStream();
-    
-    // choose a factory to parse the response and perform parsing
-    Calendar parsingStartedAt = Calendar.getInstance();
-    if (classOfRequiredReturnedObject.equals(Annotations.class)) {
-      parsedObject = (T)AnnotationsDocument.Factory.parse(xmlInputStream).getAnnotations();
-    }
-    else if (classOfRequiredReturnedObject.equals(Filters.class)) {
-      parsedObject = (T)FiltersDocument.Factory.parse(xmlInputStream).getFilters();
-    }
-    else if (classOfRequiredReturnedObject.equals(RestMethods.class)) {
-      parsedObject = (T)RestMethodsDocument.Factory.parse(xmlInputStream).getRestMethods();
-    }
-    else if (classOfRequiredReturnedObject.equals(RestMethod.class)) {
-      parsedObject = (T)RestMethodDocument.Factory.parse(xmlInputStream).getRestMethod();
-    }
-    else if (classOfRequiredReturnedObject.equals(Search.class)) {
-      parsedObject = (T)SearchDocument.Factory.parse(xmlInputStream).getSearch();
-    }
-    else if (classOfRequiredReturnedObject.equals(Services.class)) {
-      parsedObject = (T)ServicesDocument.Factory.parse(xmlInputStream).getServices();
-    }
-    else if (classOfRequiredReturnedObject.equals(Service.class)) {
-      parsedObject = (T)ServiceDocument.Factory.parse(xmlInputStream).getService();
-    }
-    else if (classOfRequiredReturnedObject.equals(ServiceProviders.class)) {
-      parsedObject = (T)ServiceProvidersDocument.Factory.parse(xmlInputStream).getServiceProviders();
-    }
-    else if (classOfRequiredReturnedObject.equals(ServiceProvider.class)) {
-      parsedObject = (T)ServiceProviderDocument.Factory.parse(xmlInputStream).getServiceProvider();
-    }
-    else if (classOfRequiredReturnedObject.equals(SoapOperations.class)) {
-      parsedObject = (T)SoapOperationsDocument.Factory.parse(xmlInputStream).getSoapOperations();
-    }
-    else if (classOfRequiredReturnedObject.equals(SoapOperation.class)) {
-      parsedObject = (T)SoapOperationDocument.Factory.parse(xmlInputStream).getSoapOperation();
-    }
-    else if (classOfRequiredReturnedObject.equals(SoapService.class)) {
-      parsedObject = (T)SoapServiceDocument.Factory.parse(xmlInputStream).getSoapService();
-    }
-    else if (classOfRequiredReturnedObject.equals(SoapInput.class)) {
-      parsedObject = (T)SoapInputDocument.Factory.parse(xmlInputStream).getSoapInput();
-    }
-    else if (classOfRequiredReturnedObject.equals(SoapOutput.class)) {
-      parsedObject = (T)SoapOutputDocument.Factory.parse(xmlInputStream).getSoapOutput();
-    }
-    else if (classOfRequiredReturnedObject.equals(Tags.class)) {
-      parsedObject = (T)TagsDocument.Factory.parse(xmlInputStream).getTags();
-    }
-    else if (classOfRequiredReturnedObject.equals(Tag.class)) {
-      parsedObject = (T)TagDocument.Factory.parse(xmlInputStream).getTag();
-    }
-    else if (classOfRequiredReturnedObject.equals(Users.class)) {
-      parsedObject = (T)UsersDocument.Factory.parse(xmlInputStream).getUsers();
-    }
-    else if (classOfRequiredReturnedObject.equals(User.class)) {
-      parsedObject = (T)UserDocument.Factory.parse(xmlInputStream).getUser();
-    }
-    
-     
-    // log the operation if necessary
-    if (BioCataloguePluginConstants.PERFORM_API_XML_DATA_BINDING_TIME_LOGGING) {
-      logAPIOperation(parsingStartedAt, null, serverResponse);
-    }
-    
-    return (parsedObject);
-  }
-  
-  
-  // ************ HELPERS ************
-  
-  public static DateFormat getDateFormatter() {
-    return(BioCatalogueClient.DATE_FORMATTER);
-  }
-  
-  public static DateFormat getShortDateFormatter() {
-    return(BioCatalogueClient.SHORT_DATE_FORMATTER);
-  }
-  
-  
-  /**
-   * This is a helper to facilitate performance monitoring of the API usage.
-   * 
-   * @param opearationStartedAt Instance of Calendar initialised with the date/time value of
-   *                            when the logged operation was started.
-   * @param requestType "GET" or "POST" to indicate that this was the actual URL connection with the BioCatalogue server
-   *                    to fetch some data; <code>null</code> to indicate an xml-binding operation using XmlBeans.
-   * @param serverResponse Will be used to extract the request URL.
-   */
-  private void logAPIOperation(Calendar opearationStartedAt, String requestType, ServerResponseStream serverResponse)
-  {
-    // just in case check that the writer was initialised
-    if (pwAPILogWriter != null) {
-      pwAPILogWriter.println(API_LOGGING_TIMESTAMP_FORMATTER.format(opearationStartedAt.getTime()) + ", " +
-                             (System.currentTimeMillis() - opearationStartedAt.getTimeInMillis()) + ", " +
-                             (requestType == null ? "xml_parsing" : requestType) + ", " +
-                             serverResponse.getRequestURL());
-    }
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponse.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponse.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponse.java
deleted file mode 100644
index d79235d..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponse.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package net.sf.taverna.biocatalogue.model.connectivity;
-
-import net.sf.taverna.biocatalogue.model.Util;
-
-/**
- * @author Sergejs Aleksejevs
- */
-public abstract class ServerResponse
-{
-  // this code is to be used when a local failure is encountered and the
-  // server response is a blank / invalid one
-  public static int LOCAL_FAILURE_CODE = -1;
-  
-  // server response code - in theory should correspond to HTTP response codes 
-  private int iResponseCode;
-  
-  // URL that was used to make the request
-  private String requestURL;
-  
-  
-  public ServerResponse() {
-    // do nothing - empty constructor
-  }
-  
-  public ServerResponse(int responseCode, String requestURL) {
-    super();
-    this.iResponseCode = responseCode;
-    this.requestURL = Util.urlDecodeQuery(requestURL);
-  }
-  
-  
-  public int getResponseCode() {
-    return (this.iResponseCode);
-  }
-  
-  public String getRequestURL() {
-    return requestURL;
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponseStream.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponseStream.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponseStream.java
deleted file mode 100644
index d4ebb56..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/connectivity/ServerResponseStream.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.sf.taverna.biocatalogue.model.connectivity;
-
-import java.io.InputStream;
-
-/**
- * This class is a custom version of ServerResponse which contains the
- * InputStream with the the actual server response data.
- * 
- * @author Sergejs Aleksejevs
- */
-public class ServerResponseStream extends ServerResponse
-{
-  private InputStream responseStream;
-  
-  public ServerResponseStream(int responseCode, InputStream serverResponseStream, String requestURL)
-  {
-    super(responseCode, requestURL);
-    this.setResponseStream(serverResponseStream);
-  }
-  
-  public void setResponseStream(InputStream responseStream)
-  {
-    this.responseStream = responseStream;
-  }
-  
-  public InputStream getResponseStream()
-  {
-    return responseStream;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchEngine.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchEngine.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchEngine.java
deleted file mode 100644
index 0c4018a..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchEngine.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package net.sf.taverna.biocatalogue.model.search;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-
-//import javax.annotation.Resource;
-
-import org.apache.log4j.Logger;
-import org.biocatalogue.x2009.xml.rest.CollectionCoreStatistics;
-import org.biocatalogue.x2009.xml.rest.ResourceLink;
-
-import com.google.gson.Gson;
-
-import net.sf.taverna.biocatalogue.model.Pair;
-import net.sf.taverna.biocatalogue.model.Tag;
-import net.sf.taverna.biocatalogue.model.Util;
-import net.sf.taverna.biocatalogue.model.connectivity.BeanForPOSTToFilteredIndex;
-import net.sf.taverna.biocatalogue.model.connectivity.BioCatalogueAPIRequest;
-import net.sf.taverna.biocatalogue.model.connectivity.BioCatalogueClient;
-import net.sf.taverna.biocatalogue.model.connectivity.BeansForJSONLiteAPI.ResourceIndex;
-import net.sf.taverna.biocatalogue.model.search.SearchInstance.TYPE;
-import net.sf.taverna.biocatalogue.ui.search_results.SearchResultsRenderer;
-import net.sf.taverna.t2.ui.perspectives.biocatalogue.MainComponentFactory;
-
-import net.sf.taverna.biocatalogue.model.Resource;
-
-/**
- * @author Sergejs Aleksejevs
- */
-public class SearchEngine
-{
-  private static Logger logger = Logger.getLogger(SearchEngine.class);
-  
-  protected SearchInstance searchInstance;
-  protected final BioCatalogueClient client;
-  protected final SearchInstanceTracker activeSearchInstanceTracker;
-  protected final CountDownLatch doneSignal;
-  protected final SearchResultsRenderer renderer;
-  
-  
-  public SearchEngine(SearchInstance searchInstance, 
-                              SearchInstanceTracker activeSearchInstanceTracker,
-                              CountDownLatch doneSignal,
-                              SearchResultsRenderer renderer)
-  {
-    
-    this.searchInstance = searchInstance;
-    this.client = BioCatalogueClient.getInstance();
-    this.activeSearchInstanceTracker = activeSearchInstanceTracker;
-    this.doneSignal = doneSignal;
-    this.renderer = renderer;
-  }
-  
-  
-  
-  /**
-   * @return <code>true</code> if the thread launched by this search engine is still
-   *         the one treated as 'active' in the context of the user actions in the plugin;<br/>
-   *         <code>false</code> - otherwise.
-   */
-  protected boolean isCurrentSearch() {
-    return (activeSearchInstanceTracker.isCurrentSearchInstance(
-              this.searchInstance.getResourceTypeToSearchFor(), searchInstance));
-  }
-  
-  
-  
-  /**
-   * Primary API request is the one that is *generated* when the search is first executed --
-   * for further requests (like fetching more data) it won't be fully generated, but rather
-   * will be derived from this primary one.
-   */
-  protected BioCatalogueAPIRequest generateSearchRequest() {
-    return (generateSearchRequest(searchInstance.getSearchType()));
-  }
-  
-  protected BioCatalogueAPIRequest generateSearchRequest(TYPE searchType)
-  {
-    // construct search request to execute on BioCatalogue server
-    BioCatalogueAPIRequest.TYPE requestType = BioCatalogueAPIRequest.TYPE.GET;
-    String requestURL = null;
-    String requestData = null;
-    
-    switch (searchType) {
-      case QuerySearch:
-        requestURL = Util.appendURLParameter(searchInstance.getResourceTypeToSearchFor().getAPIResourceCollectionIndex(), "q", searchInstance.getSearchString());
-        break;
-        
-      case TagSearch:
-        List<String> tags = new ArrayList<String>();
-        for (Tag t : searchInstance.getSearchTags()) {
-          tags.add(t.getFullTagName());
-        }
-        String tagParamValue = Util.join(tags, "[", "]", ",");
-        requestURL = Util.appendURLParameter(searchInstance.getResourceTypeToSearchFor().getAPIResourceCollectionIndex(), "tag", tagParamValue);
-        break;
-      
-      case Filtering:
-        requestType = BioCatalogueAPIRequest.TYPE.POST;
-        
-        // get search URL for the 'base' search upon which the filtering is based
-        requestURL = generateSearchRequest(searchInstance.getServiceFilteringBasedOn()).getURL();
-        requestURL = Util.appendStringBeforeParametersOfURL(requestURL, BioCatalogueClient.API_FILTERED_INDEX_SUFFIX, true);
-        
-        // the base URL was prepared, now prepare filtering parameters as POST data
-        BeanForPOSTToFilteredIndex dataBean = new BeanForPOSTToFilteredIndex();
-        dataBean.filters = searchInstance.getFilteringSettings().getFilteringURLParameters();
-        Gson gson = new Gson();
-        requestData = gson.toJson(dataBean);
-        break;
-    }
-    
-    // make sure that the URL was generated
-    if (requestURL == null) {
-      logger.error("Primary search URL couldn't be generated; Search engine must have encountered " +
-          "an unexpected search instance type: " + searchInstance.getSearchType());
-      return (null);
-    }
-    
-    // Sort by name (for REST and SOAP only at the moment. Parent Web services do not have the sort by name facility yet.)
-//    if (!searchInstance.getResourceTypeToSearchFor().equals(net.sf.taverna.biocatalogue.model.Resource.TYPE.Service)){
-        requestURL = Util.appendURLParameter(requestURL, "sort_by", "name");
-        requestURL = Util.appendURLParameter(requestURL, "sort_order", "asc");
-        requestURL = Util.appendURLParameter(requestURL, "include", "ancestors");
-//    }
-    logger.info("Service Catalogue Plugin: Request URL for search: " + requestURL);
-    
-    // append some search-type-independent parameters and return the URL
-    requestURL = Util.appendAllURLParameters(requestURL, searchInstance.getResourceTypeToSearchFor().getAPIResourceCollectionIndexAdditionalParameters());
-    return (new BioCatalogueAPIRequest(requestType, requestURL, requestData));
-  }
-  
-  
-
-  public void startNewSearch()
-  {
-    // construct API request for this search
-    BioCatalogueAPIRequest searchRequest = generateSearchRequest();
-    
-    // perform the actual search operation
-    try
-    {
-      ResourceIndex resourceIndex = null;
-      if (searchRequest.getRequestType() == BioCatalogueAPIRequest.TYPE.GET) {
-        resourceIndex = client.getBioCatalogueResourceLiteIndex(searchInstance.getResourceTypeToSearchFor(), searchRequest.getURL());
-      }
-      else {
-        // can only be POST then!
-        resourceIndex = client.postBioCatalogueResourceLiteIndex(searchInstance.getResourceTypeToSearchFor(), searchRequest.getURL(), searchRequest.getData());
-      }
-      SearchResults searchResults = new SearchResults(searchInstance.getResourceTypeToSearchFor(), resourceIndex);
-      
-      // only update search results of the associated search instance if the caller thread of
-      // this operation is still active - synchronisation helps to make sure that the results
-      // will definitely only be rendered if the current search instance is definitely active:
-      // this way searches finishing in quick succession will 'flash' the results for a short
-      // while before being updated, but that will happen in the correct order
-      synchronized (activeSearchInstanceTracker) {
-        if (isCurrentSearch()) {
-          searchInstance.setSearchResults(searchResults);
-          renderer.renderInitialResults(searchInstance);
-        }
-      }
-    }
-    catch (Exception e) {
-      logger.error("ERROR: Couldn't execute initial phase of a search by query, details below:", e);
-    }
-    
-    // no matter if search was completed or interrupted by a new search, notify the caller  // FIXME - is this needed?
-    searchCompleteNotifyCaller();
-  }
-  
-  
-  @SuppressWarnings("unchecked")
-  public void fetchMoreResults(int resultPageNumber)
-  {
-    if (resultPageNumber < 1 || resultPageNumber > searchInstance.getSearchResults().getTotalResultPageNumber()) {
-      logger.error("Prevented attempt to fetch an invalid result page: " + resultPageNumber + ". Returning...");
-      return;
-    }
-    
-    // construct search URL to hit on BioCatalogue server --
-    // it is exactly as the one for the initial search, but with a page number
-    // parameter being added
-    BioCatalogueAPIRequest searchRequest = generateSearchRequest();
-    searchRequest.setURL(Util.appendURLParameter(searchRequest.getURL(), BioCatalogueClient.API_PAGE_PARAMETER, ""+resultPageNumber));
-    
-    // fetch required result page
-    try 
-    {
-      Pair<CollectionCoreStatistics,List<ResourceLink>> newResultBatch = client.getListOfItemsFromResourceCollectionIndex(
-          searchInstance.getResourceTypeToSearchFor().getXmlBeansGeneratedCollectionClass(), searchRequest);
-      
-      int firstNewEntryIndex = searchInstance.getSearchResults().getFirstItemIndexOn(resultPageNumber);
-      searchInstance.getSearchResults().addSearchResults(newResultBatch.getSecondObject(), firstNewEntryIndex);
-      
-      // only update search results of the associated search instance if the caller thread of
-      // this operation is still active
-      if (isCurrentSearch()) {
-        renderer.renderFurtherResults(searchInstance, firstNewEntryIndex, searchInstance.getResourceTypeToSearchFor().getApiResourceCountPerIndexPage());
-      }
-    }
-    catch (Exception e) {
-      // FIXME
-    }
-    
-    
-    // no matter if search was completed or interrupted by a new search, notify the caller  // FIXME - is this needed?
-    searchCompleteNotifyCaller();
-  }
-  
-  
-  /**
-   * This method is used for notifying the object that has started the
-   * search of this particular search operation being complete.
-   */
-  protected void searchCompleteNotifyCaller() {
-    this.doneSignal.countDown();
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstance.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstance.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstance.java
deleted file mode 100644
index fa43632..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstance.java
+++ /dev/null
@@ -1,490 +0,0 @@
-package net.sf.taverna.biocatalogue.model.search;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-
-import javax.swing.Icon;
-
-import net.sf.taverna.biocatalogue.model.Resource;
-import net.sf.taverna.biocatalogue.model.ResourceManager;
-import net.sf.taverna.biocatalogue.model.Tag;
-import net.sf.taverna.biocatalogue.model.Util;
-import net.sf.taverna.biocatalogue.ui.search_results.SearchResultsRenderer;
-
-
-/**
- * Class to hold settings for search instance. Objects of this type will
- * be used to re-run a search instance at a later time -- or to apply
- * filtering onto a previously executed search.
- * 
- * @author Sergejs Aleksejevs
- */
-public class SearchInstance implements Comparable<SearchInstance>, Serializable
-{
-  private static final long serialVersionUID = -5236966374301885370L;
-  
-  // CONSTANTS
-  public static enum TYPE
-  {
-    QuerySearch(ResourceManager.getImageIcon(ResourceManager.SEARCH_ICON)),
-    TagSearch(ResourceManager.getImageIcon(ResourceManager.TAG_ICON)),
-    Filtering(ResourceManager.getImageIcon(ResourceManager.FILTER_ICON));
-    
-    private Icon icon;
-    
-    /**
-     * @param icon Icon to represent search instances in different listings
-     *             - for example in search history.
-     */
-    TYPE(Icon icon) {
-      this.icon = icon;
-    }
-    
-    /**
-     * @return An icon that is most suitable to display search instance of this type in a UI component.
-     */
-    public Icon getIcon() {
-      return this.icon;
-    }
-  }
-  
-  
-  
-  // SEARCH SETTINGS - for either search by query or search by tag
-  private TYPE searchType;
-  private final TYPE serviceFilteringBasedOn; // service filtering may be based on {@link TYPE.QuerySearch} or {@link TYPE.TagSearch}
-  private final Resource.TYPE resourceTypeToSearchFor;
-  
-  private final String searchString;
-  private final List<Tag> searchTags;
-  
-  
-  // SERVICE FILTERING settings
-  private ServiceFilteringSettings filteringSettings;
-  
-  // SEARCH RESULTS
-  private transient SearchResults searchResults; // don't want to store search results when serialising...
-  
-  
-  
-  /**
-   * Constructs a query search instance for finding instance of a specific resource type.
-   * 
-   * @param searchString
-   * @param resourceTypeToSearchFor
-   */
-  public SearchInstance(String searchString, Resource.TYPE resourceTypeToSearchFor)
-  {
-    this.searchType = TYPE.QuerySearch;
-    this.serviceFilteringBasedOn = null;
-    
-    this.resourceTypeToSearchFor = resourceTypeToSearchFor; 
-    
-    this.searchString = searchString;
-    this.searchTags = null;
-  }
-  
-  
-  
-  /**
-   * Constructing a search instance for finding instance of a specific resource type by a single tag.
-   * 
-   * @param searchTag
-   * @param resourceTypeToSearchFor
-   */
-  public SearchInstance(Tag searchTag, Resource.TYPE resourceTypeToSearchFor)
-  {
-    this.searchType = TYPE.TagSearch;
-    this.serviceFilteringBasedOn = null;
-    
-    this.resourceTypeToSearchFor = resourceTypeToSearchFor;
-    
-    this.searchTags = Collections.singletonList(searchTag);
-    this.searchString = null;
-  }
-  
-  
-  /**
-   * Constructing a search instance for finding instance of a specific resource type by a list of tags.
-   * 
-   * @param searchTags
-   * @param resourceTypeToSearchFor
-   */
-  public SearchInstance(List<Tag> searchTags, Resource.TYPE resourceTypeToSearchFor)
-  {
-    this.searchType = TYPE.TagSearch;
-    this.serviceFilteringBasedOn = null;
-    
-    this.resourceTypeToSearchFor = resourceTypeToSearchFor;
-    
-    this.searchTags = searchTags;
-    this.searchString = null;
-  }
-  
-  
-  
-  /**
-   * Constructing service filtering search instance.
-   * 
-   * @param si SearchInstance to base the current on.
-   *           Can be either {@link TYPE#TagSearch} or {@link TYPE#QuerySearch} type of SearchInstance.
-   * @param filteringSettings Filtering settings associated with this search instance.
-   */
-  public SearchInstance(SearchInstance si, ServiceFilteringSettings filteringSettings) throws IllegalArgumentException
-  {
-    if (!si.isTagSearch() && !si.isQuerySearch()) {
-      throw new IllegalArgumentException("Cannot create Service Filtering search instance - " +
-                                         "supplied base search instance must be either QuerySearch or TagSearch");
-    }
-    
-    this.searchType = TYPE.Filtering;
-    this.serviceFilteringBasedOn = si.searchType;
-    
-    this.resourceTypeToSearchFor = si.resourceTypeToSearchFor;
-    
-    // this search instance inherits search term (i.e. search query or the tag) from the supplied search instance
-    this.searchString = si.isQuerySearch() ? si.searchString : null;
-    this.searchTags = si.isTagSearch() ? si.searchTags : null;
-    
-    // also, store the filtering settings that are to be applied to the newly
-    // created search instance
-    this.filteringSettings = filteringSettings;
-  }
-  
-  
-  /**
-   * Determines whether the two search instances are identical.
-   */
-  // TODO - fix the equals() method
-  public boolean equals(Object other)
-  {
-    if (other instanceof SearchInstance)
-    {
-      SearchInstance s = (SearchInstance)other;
-      
-      boolean bSearchTypesMatch = (this.searchType == s.getSearchType());
-      if (bSearchTypesMatch) {
-        switch (this.searchType) {
-          case QuerySearch:  bSearchTypesMatch = this.searchString.equals(s.getSearchString()); break;
-          
-          case TagSearch:    bSearchTypesMatch = this.searchTags.equals(s.getSearchTags()); break;
-          
-          case Filtering:    bSearchTypesMatch = this.serviceFilteringBasedOn == s.getServiceFilteringBasedOn();
-                             if (bSearchTypesMatch) {
-                               if (this.serviceFilteringBasedOn == TYPE.QuerySearch) {
-                                 bSearchTypesMatch = this.searchString.equals(s.getSearchString());
-                               }
-                               else {
-                                 bSearchTypesMatch = this.searchTags.equals(s.getSearchTags());
-                               }
-                             }
-                             if (bSearchTypesMatch) {
-                               if (this.filteringSettings != null) {
-                                 bSearchTypesMatch = this.filteringSettings.equals(s.getFilteringSettings());
-                               }
-                               else if (s.filteringSettings != null) {
-                                 // other isn't null, this one is - so 'false'
-                                 bSearchTypesMatch = false;
-                               }
-                               else {
-                                 // both could be null
-                                 bSearchTypesMatch = (this.filteringSettings == s.getFilteringSettings());
-                               }
-                             }
-                             break;
-          default: bSearchTypesMatch = false;
-        }
-      }
-      
-      return (bSearchTypesMatch &&
-              /* TODO re-enable this when limits are implemented -- this.iResultCountLimit == s.getResultCountLimit() && */
-              this.resourceTypeToSearchFor == s.getResourceTypeToSearchFor());
-    }
-    else
-      return (false);
-  }
-  
-  
-  public int compareTo(SearchInstance other)
-  {
-    if (this.equals(other)) return(0);
-    else
-    {
-      // this will return results in the descending order - which is
-      // fine, because the way this collection will be rendered will
-      // eventually traverse it from the rear end first; so results
-      // will be shown alphabetically
-      return (-1 * this.toString().compareTo(other.toString()));
-    }
-  }
-  
-  
-  /**
-   * See {@link SearchInstance#getDescriptionStringForSearchStatus(SearchInstance)}
-   */
-  public String getDescriptionStringForSearchStatus() {
-    return (getDescriptionStringForSearchStatus(this));
-  }
-  
-  
-  /**
-   * @param si {@link SearchInstance} for which the method is executed.
-   * @return String that can be used as a description of the provided {@link SearchInstance}
-   *         in the search status label. Returned strings may look like: <br/>
-   *         - <code>empty search string</code><br/>
-   *         - <code>query "[search_query]"</code><br/>
-   *         - <code>tag "[search_tag]"</code><br/>
-   *         - <code>tags "[tag1]", "[tag2]", "[tag3]"</code><br/>
-   *         - <code>query "[search_query]" and X filter(s)</code><br/>
-   *         - <code>tag "[search_tag]" and X filter(s)</code><br/>
-   *         - <code>tags "[tag1]", "[tag2]", "[tag3]" and X filter(s)</code><br/>
-   */
-  public static String getDescriptionStringForSearchStatus(SearchInstance si)
-  {
-    switch (si.searchType)
-    {
-      case QuerySearch: String searchQuery = si.getSearchTerm();
-                        return (searchQuery.length() == 0 ?
-                                "empty search string" :
-                                "query " + si.getSearchTerm());
-      
-      case TagSearch:   return (Util.pluraliseNoun("tag", si.getSearchTags().size()) + " " + si.getSearchTerm());
-      
-      case Filtering:   int filterNumber = si.getFilteringSettings().getNumberOfFilteringCriteria();
-      
-                        SearchInstance tempBaseSI = si.deepCopy();
-                        tempBaseSI.searchType = si.getServiceFilteringBasedOn();
-                        return getDescriptionStringForSearchStatus(tempBaseSI) + " and " + filterNumber + " " + Util.pluraliseNoun("filter", filterNumber);
-                        
-      default:          return ("unexpected type of search");
-    }
-  }
-  
-  
-  public String toString()
-  {
-    String out = "<html>";
-    
-    if (this.isQuerySearch() || this.isTagSearch()) {
-      out += (this.isTagSearch() ? "Tag s" : "S") + "earch: '" + getSearchTerm() + "' [" + this.detailsAsString() + "]";
-    }
-    else if (this.isServiceFilteringSearch()) {
-      out += "Filter:<br>" +
-             (getSearchTerm().length() > 0 ? ("- based on " + (this.isQuerySearch() ? "term" : "tag") + " '" + getSearchTerm() + "'<br>") : "") +
-             "- scope: " + detailsAsString() + "<br>" +
-             "- " + this.filteringSettings.detailsAsString();
-    }
-    
-    out += "</html>";
-    
-    return (out);
-  }
-  
-  
-  /**
-   * @return A string representation of search settings held in this object;
-   *         actual search value (string/tag) are ignored - this only affects
-   *         types to search and the number of objects to fetch.
-   */
-  public String detailsAsString()
-  {
-    // include the name of the resource type collection that is to be / was searched for
-    String str = this.getResourceTypeToSearchFor().getCollectionName();
-    
-    // add the rest to the string representation of the search instance
-    str = str /* TODO re-enable when limits are implemented -- "; limit: " + this.iResultCountLimit +*/;
-    
-    return (str);
-  }
-  
-  
-  
-  // ***** Getters for all fields *****
-  
-  /**
-   * @return Type of this search instance.
-   */
-  public TYPE getSearchType() {
-    return (this.searchType);
-  }
-  
-  
-  /**
-   * @return True if this search settings instance describes a search by tag.
-   */
-  public boolean isTagSearch() {
-    return (this.searchType == TYPE.TagSearch);
-  }
-  
-  
-  /**
-   * @return True if this search settings instance describes a search by query.
-   */
-  public boolean isQuerySearch() {
-    return (this.searchType == TYPE.QuerySearch);
-  }
-  
-  
-  /**
-   * @return True if this search settings instance describes service filtering operation.
-   */
-  public boolean isServiceFilteringSearch() {
-    return (this.searchType == TYPE.Filtering);
-  }
-  
-  
-  /**
-   * Allows to test which type of search this filtering operation is based on -- any filtering
-   * operation can be:
-   * <li>derived from an initial search by tag(s) or by free-text query</li>
-   * <li>or can be just a standalone filtering operation, where filtering criteria are
-   *     applied to all resources of the specified type, without prior search.</li> 
-   * 
-   * @return Value {@link TYPE#QuerySearch} or {@link TYPE#TagSearch} if this filtering operation has a known "parent",<br/>
-   *         <code>null</code> if this is a proper search (not a filtering!) operation, or
-   *         if this filtering operation was not based on any search. 
-   */
-  public TYPE getServiceFilteringBasedOn() {
-    return serviceFilteringBasedOn;
-  }
-  
-  
-  public Resource.TYPE getResourceTypeToSearchFor() {
-    return this.resourceTypeToSearchFor;
-  }
-  
-  
-  /**
-   * @return Search string; only valid when SearchSettings object holds data about a search by query, not a tag search.
-   */
-  public String getSearchString() {
-    return searchString;
-  }
-  
-  public List<Tag> getSearchTags() {
-    return searchTags;
-  }
-  
-  /**
-   * This method is to be used when the type of search is not checked - in
-   * case of query search the method returns the search string, otherwise
-   * the tag(s) that is to be searched.
-   * 
-   * @return The value will be returned in double quotes.
-   */
-  public String getSearchTerm()
-  {
-    if (this.searchType == TYPE.QuerySearch || this.serviceFilteringBasedOn == TYPE.QuerySearch) {
-      return (this.searchString.length() == 0 ?
-              "" :
-              "\"" + this.searchString + "\"");
-    }
-    else {
-      List<String> tagDisplayNames = new ArrayList<String>();
-      for (Tag t : this.searchTags) {
-        tagDisplayNames.add(t.getTagDisplayName());
-      }
-      return (Util.join(tagDisplayNames, "\"", "\"", ", "));
-    }
-  }
-  
-  
-  public ServiceFilteringSettings getFilteringSettings() {
-    return filteringSettings;
-  }
-  public void setFilteringSettings(ServiceFilteringSettings filteringSettings) {
-    this.filteringSettings = filteringSettings;
-  }
-  
-  
-  public SearchResults getSearchResults() {
-    return searchResults;
-  }
-  public void setSearchResults(SearchResults searchResults) {
-    this.searchResults = searchResults;
-  }
-  
-  /**
-   * @return True if search results are available;
-   *         False if no search results are available - probably search hasn't been carried out yet.
-   */
-  public boolean hasSearchResults() {
-    return (searchResults != null);
-  }
-  
-  /**
-   * @return True if this is a new search; false otherwise.
-   *         (Search is currently treated as new if there are no search results available yet.)
-   */
-  public boolean isNewSearch() {
-    return (!hasSearchResults());
-  }
-  
-  /**
-   * Removes any previous search results; after execution of
-   * this method this search instance is treated as "new search".
-   */
-  public void clearSearchResults() {
-    this.searchResults = null;
-  }
-
-  
-  
-  
-  // *** Methods that call SearchEngine in order to start new / resume result fetching for a previous search ***
-  //
-  // They are used to relay external calls to these methods to the underlying instance
-  // of SearchEngine which will perform the actual search operations for this search instance.
-  
-  /**
-   * @param activeSearchInstanceTracker Tracker of current search instances for different resource types -
-   *                                    aids in early termination of older searches.
-   * @param doneSignal Means of notifying the parentSeachThread of completing the requested search operation.
-   *                   The parent thread will block until doneSignal is activated.
-   * @param renderer   {@link SearchResultsRenderer} that will render results of this search.
-   */
-  public void startNewSearch(SearchInstanceTracker activeSearchInstanceTracker,
-                             CountDownLatch doneSignal, SearchResultsRenderer renderer)
-  {
-    new SearchEngine(this, activeSearchInstanceTracker, doneSignal, renderer).startNewSearch();
-  }
-  
-  
-  /**
-   * @param activeSearchInstanceTracker Tracker of current search instances for different resource types -
-   *                                    aids in early termination of older searches.
-   * @param doneSignal Means of notifying the parentSeachThread of completing the requested search operation.
-   *                   The parent thread will block until doneSignal is activated.
-   * @param renderer   {@link SearchResultsRenderer} that will render results of this search.
-   * @param resultPageNumber
-   */
-  public void fetchMoreResults(SearchInstanceTracker activeSearchInstanceTracker,
-                               CountDownLatch doneSignal, SearchResultsRenderer renderer, int resultPageNumber)
-  {
-    new SearchEngine(this, activeSearchInstanceTracker, doneSignal, renderer).fetchMoreResults(resultPageNumber);
-  }
-  
-  
-  
-  
-  /**
-   * Used in the plugin, for example, to transfer search results from Search tab to
-   * Filtering tab. This way both tabs will remain completely independent.
-   * 
-   * @return Deep copy of this SearchInstance object. If deep copying doesn't succeed,
-   *         <code>null</code> is returned.
-   */
-  public SearchInstance deepCopy() {
-    return (SearchInstance)Util.deepCopy(this);
-  }
-  
-  public boolean isEmptySearch() {
-	  return ((searchString == null) || searchString.isEmpty()) &&
-	  ((searchTags == null) || searchTags.isEmpty()) &&
-			  ((filteringSettings == null) || (filteringSettings.getNumberOfFilteringCriteria() == 0));
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstanceTracker.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstanceTracker.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstanceTracker.java
deleted file mode 100644
index 906ded1..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchInstanceTracker.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.sf.taverna.biocatalogue.model.search;
-
-import net.sf.taverna.biocatalogue.model.Resource;
-
-/**
- * Implementations of this interface will keep track of
- * current search instances for different resource types
- * (under assumption that {@link SearchInstance} classes
- * can only deal with one resource type per instance).
- * 
- * In the BioCatalogue plugin it is one of the UI components
- * that needs to keep track of active search instances. This
- * interface helps to decouple the search engine model from the
- * UI.
- * 
- * @author Sergejs Aleksejevs
- */
-public interface SearchInstanceTracker
-{
-  /**
-   * Clears all records of previous search instances.
-   */
-  public void clearPreviousSearchInstances();
-  
-  /**
-   * Registers an instance of {@link SearchInstance} class
-   * as a current one for a specific resource type.
-   * 
-   * Repeated calls to this method with the same parameter
-   * should overwrite old values.
-   * 
-   * @param searchType Resource type to associate the registered
-   *                   {@link SearchInstance} with.
-   */
-  public void registerSearchInstance(Resource.TYPE searchType, SearchInstance searchInstance);
-  
-  
-  /**
-   * Tests if provided {@link SearchInstance} is registered as the
-   * current one.
-   * 
-   * @param searchType Resource type to perform the test for.
-   * @param searchInstance {@link SearchInstance} object that is expected to be
-   *                       the current search instance for the specified resource type.
-   * @return <code>true</code> - if the provided <code>searchInstance</code> is indeed
-   *                       currently registered as the active one for the given resouce type;<br/>
-   *         <code>false</code> - otherwise.
-   */
-  public boolean isCurrentSearchInstance(Resource.TYPE searchType, SearchInstance searchInstance);
-  
-  
-  /**
-   * @param searchType
-   * @return Currently active {@link SearchInstance} object for the specified resource type.
-   */
-  public SearchInstance getCurrentSearchInstance(Resource.TYPE searchType);
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchOptions.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchOptions.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchOptions.java
deleted file mode 100644
index cf5e7db..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchOptions.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package net.sf.taverna.biocatalogue.model.search;
-
-import java.util.Collections;
-import java.util.List;
-
-import net.sf.taverna.biocatalogue.model.Tag;
-import net.sf.taverna.biocatalogue.model.Resource.TYPE;
-import net.sf.taverna.biocatalogue.ui.SearchOptionsPanel;
-
-/**
- * Instances of this class can store the state of the
- * {@link SearchOptionsPanel} / {@link TagSelectionDialog} in
- * order to help instantiate {@link SearchInstance} objects.
- * 
- * @author Sergejs Aleksejevs
- */
-public class SearchOptions
-{
-  private SearchInstance preconfiguredSearchInstance;
-  private SearchInstance.TYPE searchType;
-  private String searchString;
-  private List<Tag> searchTags;
-  private List<TYPE> resourceTypesToSearchFor;
-  
-  public SearchOptions(String searchString, List<TYPE> searchTypes) {
-    this.preconfiguredSearchInstance = null;
-    this.searchType = SearchInstance.TYPE.QuerySearch;
-    this.searchString = searchString;
-    this.searchTags = null;
-    this.resourceTypesToSearchFor = searchTypes;
-  }
-  
-  public SearchOptions(List<Tag> searchTags, List<TYPE> searchTypes) {
-    this.preconfiguredSearchInstance = null;
-    this.searchType = SearchInstance.TYPE.TagSearch;
-    this.searchString = null;
-    this.searchTags = searchTags;
-    this.resourceTypesToSearchFor = searchTypes;
-  }
-  
-  public SearchOptions(SearchInstance preconfiguredSearchInstance) {
-    this.preconfiguredSearchInstance = preconfiguredSearchInstance;
-    this.searchType = preconfiguredSearchInstance.getSearchType();
-    this.searchString = preconfiguredSearchInstance.getSearchString();
-    this.searchTags = preconfiguredSearchInstance.getSearchTags();
-    this.resourceTypesToSearchFor = Collections.singletonList(preconfiguredSearchInstance.getResourceTypeToSearchFor());
-  }
-  
-  
-  public SearchInstance getPreconfiguredSearchInstance() {
-    return preconfiguredSearchInstance;
-  }
-  
-  public SearchInstance.TYPE getSearchType() {
-    return searchType;
-  }
-  
-  public String getSearchString() {
-    return searchString;
-  }
-  
-  public List<Tag> getSearchTags() {
-    return searchTags;
-  }
-  
-  public List<TYPE> getResourceTypesToSearchFor() {
-    return resourceTypesToSearchFor;
-  }
-  
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/dc466d6d/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchResults.java
----------------------------------------------------------------------
diff --git a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchResults.java b/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchResults.java
deleted file mode 100644
index d18076c..0000000
--- a/taverna-workbench-perspective-biocatalogue/src/main/java/net/sf/taverna/biocatalogue/model/search/SearchResults.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package net.sf.taverna.biocatalogue.model.search;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.taverna.biocatalogue.model.LoadingResource;
-import net.sf.taverna.biocatalogue.model.Resource.TYPE;
-import net.sf.taverna.biocatalogue.model.connectivity.BeansForJSONLiteAPI;
-import net.sf.taverna.biocatalogue.model.connectivity.BeansForJSONLiteAPI.ResourceIndex;
-import net.sf.taverna.biocatalogue.model.connectivity.BeansForJSONLiteAPI.ResourceLinkWithName;
-
-import org.apache.log4j.Logger;
-
-import org.biocatalogue.x2009.xml.rest.ResourceLink;
-
-
-/**
- * Generic class for any kinds of search results.
- * 
- * @author Sergejs Aleksejevs
- */
-public class SearchResults implements Serializable
-{
-  private static final long serialVersionUID = 6994685875323246165L;
-  
-  private transient Logger logger; // don't want to serialise the logger...
-  
-  private final TYPE typeOfResourcesInTheResultSet;
-  private final int totalResultCount;
-  
-  // Data store for found items
-  protected ArrayList<ResourceLink> foundItems;
-  private int fullyFetchedItemCount;
-
-  
-  
-  public SearchResults(TYPE typeOfResourcesInTheResultSet, BeansForJSONLiteAPI.ResourceIndex resourceIndex)
-  {
-    this.typeOfResourcesInTheResultSet = typeOfResourcesInTheResultSet;
-    this.totalResultCount = resourceIndex.getResources().length;
-    this.fullyFetchedItemCount = 0;
-    
-    this.logger = Logger.getLogger(this.getClass());
-    
-    initialiseSearchResultCollection(resourceIndex);
-  }
-  
-  
-  /**
-   * The collection of results is initialised to cater for the expected number of
-   * values - placeholder with just a name and URL for each of the expected result entries is stored.
-   * 
-   * @param resourceIndex
-   */
-  protected void initialiseSearchResultCollection(ResourceIndex resourceIndex)
-  {
-    foundItems = new ArrayList<ResourceLink>();
-    foundItems.ensureCapacity(getTotalMatchingItemCount());
-    
-    ResourceLinkWithName resourceLink = null;
-    for (int i = 0; i < getTotalMatchingItemCount(); i++) {
-      resourceLink = resourceIndex.getResources()[i];
-      this.foundItems.add(new LoadingResource(resourceLink.getURL(), resourceLink.getName()));
-    }
-  }
-  
-  
-  public synchronized void addSearchResults(List<ResourceLink> searchResultsData, int positionToStartAddingResults)
-  {
-    // only update a specific portion of results
-    for (int i = 0; i < searchResultsData.size(); i++) {
-      this.foundItems.set(i + positionToStartAddingResults, searchResultsData.get(i));
-    }
-    
-    fullyFetchedItemCount += searchResultsData.size();
-  }
-  
-  
-  public TYPE getTypeOfResourcesInTheResultSet() {
-    return typeOfResourcesInTheResultSet;
-  }
-  
-  
-  /**
-   * @return List of resources that have matched the search query
-   *         and/or specified filtering criteria. 
-   */
-  public List<ResourceLink> getFoundItems() {
-    return (this.foundItems);
-  }
-  
-  
-  /**
-   * @return Number of resources that have matched the search query
-   *         (and/or specified filtering criteria) that have already been
-   *         fetched.
-   */
-  public int getFetchedItemCount() {
-    return (this.fullyFetchedItemCount);
-  }
-  
-  
-  /**
-   * @return Total number of resources that have matched the search query
-   *         (and/or specified filtering criteria) - most of these will
-   *         likely not be fetched yet.
-   */
-  public int getTotalMatchingItemCount() {
-    return (this.totalResultCount);
-  }
-  
-  
-  /**
-   * @return Total number of pages in the current result set.
-   */
-  public int getTotalResultPageNumber() {
-    int numberOfResourcesPerPageForThisResourceType = this.getTypeOfResourcesInTheResultSet().getApiResourceCountPerIndexPage();
-    return (int)(Math.ceil((double)getTotalMatchingItemCount() / numberOfResourcesPerPageForThisResourceType));
-  }
-  
-  
-  /**
-   * List of matching items will be partial and populated sequentially
-   * based on user actions. Therefore, this method helps to check
-   * which list entries are still not populated.
-   * 
-   * @param startIndex Beginning of the range to check.
-   * @param endIndex End of the range to check.
-   * @return Zero-based index of the first entry in the list of
-   *         matching resources that hasn't been fetched yet.
-   *         Will return <code>-1</code> if the provided range
-   *         parameters are incorrect or if all items in the
-   *         specified range are already available.
-   */
-  public int getFirstMatchingItemIndexNotYetFetched(int startIndex, int endIndex)
-  {
-    // check the specified range is correct
-    if (startIndex < 0 || endIndex > getTotalMatchingItemCount() - 1) {
-      return (-1);
-    }
-    
-    // go through the search results in the specified range
-    // in an attempt to find an item that hasn't been fetched
-    // just yet
-    for (int i = startIndex; i <= endIndex; i++) {
-      ResourceLink item = this.foundItems.get(i);
-      if (item != null && item instanceof LoadingResource && !((LoadingResource)item).isLoading()) {
-        return (i);
-      }
-    }
-    
-    // apparently, all items in the provided range are fetched
-    return (-1);
-  }
-  
-  
-  
-  /**
-   * @param matchingItemIndex Index of the matching item from search results.
-   * @return Index (starting from "1") of page in the search results, where
-   *         the matching item with a specified index is located. If the
-   *         <code>matchingItemIndex</code> is wrong, <code>-1</code> is returned.
-   */
-  public int getMatchingItemPageNumberFor(int matchingItemIndex)
-  {
-    // check the specified index is correct
-    if (matchingItemIndex < 0 || matchingItemIndex > getTotalMatchingItemCount() - 1) {
-      return (-1);
-    }
-    
-    int resultsPerPageForThisType = this.getTypeOfResourcesInTheResultSet().getApiResourceCountPerIndexPage();
-    return (matchingItemIndex / resultsPerPageForThisType + 1);
-  }
-  
-  
-  /**
-   * @param resultPageNumber Number of the page, for which the calculations are to be done.
-   * @return Index of the first result entry on the specified result page. If <code>resultPageNumber</code>
-   *         is less than <code>1</code> or greater than the total number of pages in the result set,
-   *         a value of <code>-1</code> will be returned.
-   */
-  public int getFirstItemIndexOn(int resultPageNumber)
-  {
-    // page number must be in a valid range - starting with 1..onwards
-    if (resultPageNumber < 1 || resultPageNumber > getTotalResultPageNumber()) {
-      return (-1);
-    }
-    
-    int numberOfResourcesPerPageForThisResourceType = this.getTypeOfResourcesInTheResultSet().getApiResourceCountPerIndexPage();
-    return ((resultPageNumber - 1) * numberOfResourcesPerPageForThisResourceType);
-  }
-  
-  
-  
-  /**
-   * Mainly for testing - outputs number of search results per item type.
-   */
-  public String toString()
-  {
-    // FIXME
-    
-//    StringBuilder out = new StringBuilder("Breakdown of item counts by type:\n");
-//    for (Map.Entry<Integer,String> itemTypeNamePair : Resource.ALL_SUPPORTED_RESOURCE_COLLECTION_NAMES.entrySet()) {
-//      out.append(itemTypeNamePair.getValue() + ": " +getFetchedItemCount(itemTypeNamePair.getKey()) +
-//                 "/" + getTotalItemCount(itemTypeNamePair.getKey()) + "\n");
-//    }
-//    
-//    return (out.toString());
-    
-    return ("search results... not implemented!!!");
-  }
-  
-}