X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FJabaWsServerQuery.java;h=5831df860f1ae584ecbfacbc1291e5c6a51ec8a0;hb=cb8e52fbbc5f725e3f7f48c672cdddb0690bd978;hp=2799e98f360f13df3b282a4403cec322d194ea20;hpb=4674dbf3f27eee61a7e21174649aa4c9ec7a04dd;p=jalview.git diff --git a/src/jalview/ws/jws2/JabaWsServerQuery.java b/src/jalview/ws/jws2/JabaWsServerQuery.java index 2799e98..5831df8 100644 --- a/src/jalview/ws/jws2/JabaWsServerQuery.java +++ b/src/jalview/ws/jws2/JabaWsServerQuery.java @@ -1,111 +1,260 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ /** * */ package jalview.ws.jws2; -import jalview.bin.Cache; +import jalview.bin.Console; +import jalview.ws.jws2.jabaws2.Jws2Instance; +import jalview.ws.jws2.jabaws2.Jws2InstanceFactory; -import compbio.data.msa.MsaWS; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashSet; +import java.util.Set; + +import compbio.data.msa.Category; +import compbio.data.msa.JABAService; import compbio.ws.client.Jws2Client; import compbio.ws.client.Services; /** * @author JimP - * + * */ public class JabaWsServerQuery implements Runnable { - Jws2Discoverer jws2Discoverer=null; - String jwsservers=null; - boolean quit=false, - running=false; + Jws2Discoverer jws2Discoverer = null; + + String jwsserver = null; + + boolean quit = false, running = false; + /** * @return the running */ - public boolean isRunning() + public boolean isRunning() { return running; } /** - * @param quit the quit to set + * @param quit + * the quit to set */ public void setQuit(boolean quit) { this.quit = quit; } - public JabaWsServerQuery(Jws2Discoverer jws2Discoverer, String jwsservers) + public JabaWsServerQuery(Jws2Discoverer jws2Discoverer, String server) { this.jws2Discoverer = jws2Discoverer; - this.jwsservers=jwsservers; + this.jwsserver = server; } - /* (non-Javadoc) + Services[] JABAWS1SERVERS = new Services[] { Services.ClustalWS, + Services.MuscleWS, Services.MafftWS, Services.ProbconsWS, + Services.TcoffeeWS }; + + Services[] JABAWS2SERVERS = new Services[] { Services.ClustalWS, + Services.MuscleWS, Services.MafftWS, Services.ProbconsWS, + Services.TcoffeeWS, Services.AAConWS, Services.DisemblWS, + Services.GlobPlotWS, Services.IUPredWS, Services.JronnWS, + Services.RNAalifoldWS }; + + /* + * (non-Javadoc) + * * @see java.lang.Runnable#run() */ @Override public void run() { - running=true; - try + running = true; + try { - if (Jws2Client.validURL(jwsservers)) + // TODO this test doesn't seem to attempt a connection - should it? + // would save a lot of failed tries with UnknownHostException + if (isValidUrl(jwsserver)) { - boolean noservices=true; + compbio.data.msa.RegistryWS registry = null; + Set svccategories = null; + boolean noservices = true; // look for services - for (Services srv : Services.values()) + boolean jabasws2 = false; + // If we are dealing with a JABAWS2 service, then just go and ask the + // JABAWS 2 service registry + Set srv_set = new HashSet(); + + Set categories = Category.getCategories(); + String svc_cat; + + try { - if (quit) + // JBPNote: why is RegistryWS in compbio.data.msa ? + registry = Jws2Client.connectToRegistry(jwsserver); + if (registry != null) { - running=false; - return; + // System.err.println("Test Services Output\n" + // + registry.testAllServices()); + // TODO: enumerate services and test those that haven't been tested + // in the last n-days/hours/etc. + + jabasws2 = true; + srv_set = registry.getSupportedServices(); + + // dan test + System.out.println( + "registry.getSupportedServices: " + srv_set.toString()); + + svccategories = registry.getServiceCategories(); + + // dan test + // System.out.println("registry.getServiceCategories: " + + // svccategories.toString()); + } - MsaWS service = null; - try + } catch (Exception ex) + { + System.err.println("Exception whilst trying to get at registry:"); + ex.printStackTrace(); + // if that failed, then we are probably working with a JABAWS1 server. + // in that case, look for each service endpoint + System.err.println("JWS2 Discoverer: " + jwsserver + + " is a JABAWS1 server. Using hardwired list."); + for (Services srv : JABAWS1SERVERS) { - service = Jws2Client.connect(jwsservers, srv); - } catch (Exception e) + srv_set.add(srv); + } + } + + for (Category cat : categories) + { + for (Services srv : cat.getServices()) { - System.err.println("Jws2 Discoverer: Problem on " - + jwsservers + " with service " + srv + ":\n" - + e.getMessage()); - if (!(e instanceof javax.xml.ws.WebServiceException)) + if (quit) { - e.printStackTrace(); + running = false; + return; } - // For moment, report service as a problem. - jws2Discoverer.addInvalidServiceUrl(jwsservers); - } - ; - if (service != null) - { - noservices=false; - jws2Discoverer.addService(jwsservers, srv, service); + if (!srv_set.contains(srv)) + { + continue; + } + JABAService service = null; + try + { + service = Jws2Client.connect(jwsserver, srv); + } catch (Exception e) + { + System.err.println("Jws2 Discoverer: Problem on " + jwsserver + + " with service " + srv + ":\n" + e.getMessage()); + if (!(e instanceof javax.xml.ws.WebServiceException)) + { + e.printStackTrace(); + } + // For moment, report service as a problem. + jws2Discoverer.addInvalidServiceUrl(jwsserver); + } + ; + if (service != null + && !Jws2InstanceFactory.ignoreService(srv.toString())) + { + noservices = false; + Jws2Instance svc = null; + if (registry != null) + { + + String description = registry.getServiceDescription(srv); + + svc = Jws2InstanceFactory.newJws2Instance(jwsserver, + srv.toString(), cat.name, description, service); + } + if (svc == null) + { + svc = Jws2InstanceFactory.newJws2Instance(jwsserver, + srv.toString(), cat.name, + "JABAWS 1 Alignment Service", service); + } + jws2Discoverer.addService(jwsserver, svc); + } + } } + if (noservices) { - jws2Discoverer.addUrlwithnoservices(jwsservers); + jws2Discoverer.addUrlwithnoservices(jwsserver); } } else { - jws2Discoverer.addInvalidServiceUrl(jwsservers); - Cache.log.info("Ignoring invalid Jws2 service url " + jwsservers); + jws2Discoverer.addInvalidServiceUrl(jwsserver); + Console.warn("Ignoring invalid Jws2 service url " + jwsserver); } } catch (Exception e) { e.printStackTrace(); - Cache.log.warn("Exception when discovering Jws2 services.", e); - jws2Discoverer.addInvalidServiceUrl(jwsservers); + Console.warn("Exception when discovering Jws2 services.", e); + jws2Discoverer.addInvalidServiceUrl(jwsserver); } catch (Error e) { - Cache.log.error("Exception when discovering Jws2 services.", e); - jws2Discoverer.addInvalidServiceUrl(jwsservers); + Console.error("Exception when discovering Jws2 services.", e); + jws2Discoverer.addInvalidServiceUrl(jwsserver); + } + running = false; + } + + /** + * Check if the URL is valid and responding. + * + * @return + */ + private boolean isValidUrl(String server) + { + // return Jws2Client.validURL(jwsserver); // checks syntax only + boolean result = false; + if (server != null) + { + try + { + URL url = new URL(server); + url.openStream().close(); + result = true; + } catch (MalformedURLException e) + { + System.err.println("Invalid server URL: " + server); + result = false; + } catch (IOException e) + { + System.err.println("Error connecting to server: " + server + ": " + + e.toString()); + result = false; + } } - running=false; + return result; } }