(JAL-976) refactor JABAWS1 list
[jalview.git] / src / jalview / ws / jws2 / JabaWsServerQuery.java
1 /*******************************************************************************
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
3  * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
4  *
5  * This file is part of Jalview.
6  *
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
10  *
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  *******************************************************************************/
18 /**
19  * 
20  */
21 package jalview.ws.jws2;
22
23 import jalview.bin.Cache;
24 import jalview.ws.jws2.jabaws2.Jws2Instance;
25
26 import java.util.HashSet;
27 import java.util.Set;
28
29 import compbio.data.msa.Category;
30 import compbio.data.msa.JABAService;
31 import compbio.ws.client.Jws2Client;
32 import compbio.ws.client.Services;
33
34 /**
35  * @author JimP
36  * 
37  */
38 public class JabaWsServerQuery implements Runnable
39 {
40
41   Jws2Discoverer jws2Discoverer = null;
42
43   String jwsservers = null;
44
45   boolean quit = false, running = false;
46
47   /**
48    * @return the running
49    */
50   public boolean isRunning()
51   {
52     return running;
53   }
54
55   /**
56    * @param quit
57    *          the quit to set
58    */
59   public void setQuit(boolean quit)
60   {
61     this.quit = quit;
62   }
63
64   public JabaWsServerQuery(Jws2Discoverer jws2Discoverer, String jwsservers)
65   {
66     this.jws2Discoverer = jws2Discoverer;
67     this.jwsservers = jwsservers;
68   }
69   Services[] JABAWS1SERVERS=new Services[]
70           { Services.ClustalWS, Services.MuscleWS, Services.MafftWS,
71           Services.ProbconsWS, Services.TcoffeeWS };
72   /*
73    * (non-Javadoc)
74    * 
75    * @see java.lang.Runnable#run()
76    */
77   @Override
78   public void run()
79   {
80     running = true;
81     try
82     {
83       if (Jws2Client.validURL(jwsservers))
84       {
85         compbio.data.msa.RegistryWS registry = null;
86         Set svccategories = null;
87         boolean noservices = true;
88         // look for services
89         boolean jabasws2 = false;
90         // If we are dealing with a JABAWS2 service, then just go and ask the
91         // JABAWS 2 service registry
92         Set<Services> srv_set = new HashSet<Services>();
93
94         Set<Category> categories = Category.getCategories();
95         String svc_cat;
96
97         try
98         {
99           // JBPNote: why is RegistryWS in compbio.data.msa ?
100           registry = Jws2Client.connectToRegistry(jwsservers);
101           if (registry != null)
102           {
103             // System.err.println("Test Services Output\n"
104             // + registry.testAllServices());
105             // TODO: enumerate services and test those that haven't been tested
106             // in the last n-days/hours/etc.
107
108             jabasws2 = true;
109             srv_set = registry.getSupportedServices();
110             svccategories = registry.getServiceCategories();
111
112           }
113         } catch (Exception ex)
114         {
115           System.err.println("Exception whilst trying to get at registry:");
116           ex.printStackTrace();
117           // if that failed, then we are probably working with a JABAWS1 server.
118           // in that case, look for each service endpoint
119           System.err.println("JWS2 Discoverer: " + jwsservers
120                   + " is a JABAWS1 server. Using hardwired list.");
121           for (Services srv : JABAWS1SERVERS)
122           {
123             srv_set.add(srv);
124           }
125         }
126         for (Category cat : categories)
127         {
128           for (Services srv : cat.getServices())
129           {
130             if (quit)
131             {
132               running = false;
133               return;
134             }
135             if (!srv_set.contains(srv))
136             {
137               continue;
138             }
139             JABAService service = null;
140             try
141             {
142               service = Jws2Client.connect(jwsservers, srv);
143             } catch (Exception e)
144             {
145               System.err.println("Jws2 Discoverer: Problem on "
146                       + jwsservers + " with service " + srv + ":\n"
147                       + e.getMessage());
148               if (!(e instanceof javax.xml.ws.WebServiceException))
149               {
150                 e.printStackTrace();
151               }
152               // For moment, report service as a problem.
153               jws2Discoverer.addInvalidServiceUrl(jwsservers);
154             }
155             ;
156             if (service != null)
157             {
158               noservices = false;
159               Jws2Instance svc = null;
160               if (registry != null)
161               {
162
163                 String description = registry.getServiceDescription(srv);
164
165                 svc = new Jws2Instance(jwsservers, srv.toString(),
166                         cat.name, description, service);
167               }
168               if (svc == null)
169               {
170                 svc = new Jws2Instance(jwsservers, srv.toString(), cat.name,
171                         "JABAWS 1 Alignment Service", service);
172               }
173               jws2Discoverer.addService(jwsservers, svc);
174             }
175
176           }
177         }
178
179         if (noservices)
180         {
181           jws2Discoverer.addUrlwithnoservices(jwsservers);
182         }
183       }
184       else
185       {
186         jws2Discoverer.addInvalidServiceUrl(jwsservers);
187         Cache.log.info("Ignoring invalid Jws2 service url " + jwsservers);
188       }
189     } catch (Exception e)
190     {
191       e.printStackTrace();
192       Cache.log.warn("Exception when discovering Jws2 services.", e);
193       jws2Discoverer.addInvalidServiceUrl(jwsservers);
194     } catch (Error e)
195     {
196       Cache.log.error("Exception when discovering Jws2 services.", e);
197       jws2Discoverer.addInvalidServiceUrl(jwsservers);
198     }
199     running = false;
200   }
201
202 }