Clover icon

Coverage Report

  1. Project Clover database Mon Sep 2 2024 17:57:51 BST
  2. Package jalview.ws.jws2

File JabaWsServerQuery.java

 

Coverage histogram

../../../img/srcFileCovDistChart7.png
29% of files have more coverage

Code metrics

20
71
5
1
263
174
22
0.31
14.2
5
4.4

Classes

Class Line # Actions
JabaWsServerQuery 45 71 22
0.6562565.6%
 

Contributing tests

This file is covered by 94 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
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
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    /**
22    *
23    */
24    package jalview.ws.jws2;
25   
26    import java.io.IOException;
27    import java.net.MalformedURLException;
28    import java.net.URL;
29    import java.util.HashSet;
30    import java.util.Set;
31   
32    import compbio.data.msa.Category;
33    import compbio.data.msa.JABAService;
34    import compbio.ws.client.Jws2Client;
35    import compbio.ws.client.Services;
36    import jalview.bin.Console;
37    import jalview.util.HttpUtils;
38    import jalview.ws.jws2.jabaws2.Jws2Instance;
39    import jalview.ws.jws2.jabaws2.Jws2InstanceFactory;
40   
41    /**
42    * @author JimP
43    *
44    */
 
45    public class JabaWsServerQuery implements Runnable
46    {
47   
48    Jws2Discoverer jws2Discoverer = null;
49   
50    String jwsserver = null;
51   
52    boolean quit = false, running = false;
53   
54    /**
55    * @return the running
56    */
 
57  425 toggle public boolean isRunning()
58    {
59  425 return running;
60    }
61   
62    /**
63    * @param quit
64    * the quit to set
65    */
 
66  42 toggle public void setQuit(boolean quit)
67    {
68  42 this.quit = quit;
69    }
70   
 
71  65 toggle public JabaWsServerQuery(Jws2Discoverer jws2Discoverer, String server)
72    {
73  65 this.jws2Discoverer = jws2Discoverer;
74  65 this.jwsserver = server;
75    }
76   
77    Services[] JABAWS1SERVERS = new Services[] { Services.ClustalWS,
78    Services.MuscleWS, Services.MafftWS, Services.ProbconsWS,
79    Services.TcoffeeWS };
80   
81    Services[] JABAWS2SERVERS = new Services[] { Services.ClustalWS,
82    Services.MuscleWS, Services.MafftWS, Services.ProbconsWS,
83    Services.TcoffeeWS, Services.AAConWS, Services.DisemblWS,
84    Services.GlobPlotWS, Services.IUPredWS, Services.JronnWS,
85    Services.RNAalifoldWS };
86   
87    /*
88    * (non-Javadoc)
89    *
90    * @see java.lang.Runnable#run()
91    */
 
92  65 toggle @Override
93    public void run()
94    {
95  65 running = true;
96  65 try
97    {
98    // TODO this test doesn't seem to attempt a connection - should it?
99    // would save a lot of failed tries with UnknownHostException
100  65 if (isValidUrl(jwsserver))
101    {
102  65 compbio.data.msa.RegistryWS registry = null;
103  65 Set svccategories = null;
104  65 boolean noservices = true;
105    // look for services
106  65 boolean jabasws2 = false;
107    // If we are dealing with a JABAWS2 service, then just go and ask the
108    // JABAWS 2 service registry
109  65 Set<Services> srv_set = new HashSet<Services>();
110   
111  65 Set<Category> categories = Category.getCategories();
112  65 String svc_cat;
113   
114  65 try
115    {
116    // JBPNote: why is RegistryWS in compbio.data.msa ?
117  65 registry = Jws2Client.connectToRegistry(jwsserver);
118  65 if (registry != null)
119    {
120    // jalview.bin.Console.errPrintln("Test Services Output\n"
121    // + registry.testAllServices());
122    // TODO: enumerate services and test those that haven't been tested
123    // in the last n-days/hours/etc.
124   
125  65 jabasws2 = true;
126  65 srv_set = registry.getSupportedServices();
127   
128    // dan test
129  65 jalview.bin.Console.outPrintln(
130    "registry.getSupportedServices: " + srv_set.toString());
131   
132  65 svccategories = registry.getServiceCategories();
133   
134    // dan test
135    // jalview.bin.Console.outPrintln("registry.getServiceCategories: "
136    // +
137    // svccategories.toString());
138   
139    }
140    } catch (Exception ex)
141    {
142  0 jalview.bin.Console.errPrintln(
143    "Exception whilst trying to get at registry:");
144  0 ex.printStackTrace();
145    // if that failed, then we are probably working with a JABAWS1 server.
146    // in that case, look for each service endpoint
147  0 jalview.bin.Console.errPrintln("JWS2 Discoverer: " + jwsserver
148    + " is a JABAWS1 server. Using hardwired list.");
149  0 for (Services srv : JABAWS1SERVERS)
150    {
151  0 srv_set.add(srv);
152    }
153    }
154   
155  65 for (Category cat : categories)
156    {
157  211 for (Services srv : cat.getServices())
158    {
159  754 if (quit)
160    {
161  33 running = false;
162  33 return;
163    }
164  721 if (!srv_set.contains(srv))
165    {
166  0 continue;
167    }
168  721 JABAService service = null;
169  721 try
170    {
171  721 service = Jws2Client.connect(jwsserver, srv);
172    } catch (Exception e)
173    {
174  0 jalview.bin.Console.errPrintln("Jws2 Discoverer: Problem on "
175    + jwsserver + " with service " + srv + ":\n"
176    + e.getMessage());
177  0 if (!(e instanceof javax.xml.ws.WebServiceException))
178    {
179  0 e.printStackTrace();
180    }
181    // For moment, report service as a problem.
182  0 jws2Discoverer.addInvalidServiceUrl(jwsserver);
183    }
184  721 ;
185  721 if (service != null
186    && !Jws2InstanceFactory.ignoreService(srv.toString()))
187    {
188  721 noservices = false;
189  721 Jws2Instance svc = null;
190  721 if (registry != null)
191    {
192   
193  721 String description = registry.getServiceDescription(srv);
194   
195  721 svc = Jws2InstanceFactory.newJws2Instance(jwsserver,
196    srv.toString(), cat.name, description, service);
197    }
198  721 if (svc == null)
199    {
200  0 svc = Jws2InstanceFactory.newJws2Instance(jwsserver,
201    srv.toString(), cat.name,
202    "JABAWS 1 Alignment Service", service);
203    }
204  721 jws2Discoverer.addService(jwsserver, svc);
205    }
206   
207    }
208    }
209   
210  32 if (noservices)
211    {
212  0 jws2Discoverer.addUrlwithnoservices(jwsserver);
213    }
214    }
215    else
216    {
217  0 jws2Discoverer.addInvalidServiceUrl(jwsserver);
218  0 Console.warn("Ignoring invalid Jws2 service url " + jwsserver);
219    }
220    } catch (Exception e)
221    {
222  0 e.printStackTrace();
223  0 Console.warn("Exception when discovering Jws2 services.", e);
224  0 jws2Discoverer.addInvalidServiceUrl(jwsserver);
225    } catch (Error e)
226    {
227  0 Console.error("Exception when discovering Jws2 services.", e);
228  0 jws2Discoverer.addInvalidServiceUrl(jwsserver);
229    }
230  32 running = false;
231    }
232   
233    /**
234    * Check if the URL is valid and responding.
235    *
236    * @return
237    */
 
238  65 toggle private boolean isValidUrl(String server)
239    {
240    // return Jws2Client.validURL(jwsserver); // checks syntax only
241  65 boolean result = false;
242  65 if (server != null)
243    {
244  65 try
245    {
246  65 URL url = new URL(server);
247  65 HttpUtils.openStream(url).close();
248  65 result = true;
249    } catch (MalformedURLException e)
250    {
251  0 jalview.bin.Console.errPrintln("Invalid server URL: " + server);
252  0 result = false;
253    } catch (IOException e)
254    {
255  0 jalview.bin.Console.errPrintln("Error connecting to server: "
256    + server + ": " + e.toString());
257  0 result = false;
258    }
259    }
260  65 return result;
261    }
262   
263    }