1 package jalview.ws.jws2;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.net.ConnectException;
6 import java.util.HashSet;
7 import java.util.Vector;
9 import javax.swing.JMenu;
10 import javax.swing.JMenuItem;
12 import org.apache.log4j.Level;
14 import jalview.bin.Cache;
15 import jalview.datamodel.AlignmentView;
16 import jalview.gui.AlignFrame;
17 import jalview.ws.WSMenuEntryProviderI;
18 import compbio.data.msa.MsaWS;
19 import compbio.ws.client.Jws2Base;
20 import compbio.ws.client.Jws2Base.Services;
23 * discoverer for jws2 services. Follows the lightweight service discoverer
24 * pattern (archetyped by EnfinEnvision2OneWay)
29 public class Jws2Discoverer implements Runnable, WSMenuEntryProviderI
31 private java.beans.PropertyChangeSupport changeSupport = new java.beans.PropertyChangeSupport(this);
34 * change listeners are notified of "services" property changes
37 * to be added that consumes new services Hashtable object.
39 public void addPropertyChangeListener(
40 java.beans.PropertyChangeListener listener)
42 changeSupport.addPropertyChangeListener(listener);
51 public void removePropertyChangeListener(
52 java.beans.PropertyChangeListener listener)
54 changeSupport.removePropertyChangeListener(listener);
57 boolean running=false;
66 // Cache.initLogger();
67 // Cache.log.setLevel(Level.DEBUG);
68 // TODO: Document and PACK JWS2
69 String jwsservers = Cache.getDefault("JWS2HOSTURLS",
70 "http://webservices.compbio.dundee.ac.uk:8084/jws2");
73 if (Jws2Base.validURL(jwsservers))
76 for (Services srv : Jws2Base.Services.values())
81 service = Jws2Base.connect(jwsservers, srv);
85 System.err.println("Jws2 Discoverer: Problem with "+jwsservers+" with service "+srv+":\n"+e.getMessage());
86 if (!(e instanceof javax.xml.ws.WebServiceException)) {
93 addService(jwsservers, srv, service);
100 Cache.log.info("Ignoring invalid Jws2 service url " + jwsservers);
102 } catch (Exception e)
105 Cache.log.warn("Exception when discovering Jws2 services.", e);
108 Cache.log.error("Exception when discovering Jws2 services.", e);
111 changeSupport.firePropertyChange("services", new Vector(), services);
115 * record this service endpoint so we can use it
121 private void addService(String jwsservers, Services srv, MsaWS service2)
123 if (services==null) {
124 services = new Vector<Jws2Instance>();
126 System.out.println("Discovered service: " + jwsservers + " "
128 services.add(new Jws2Instance(jwsservers, "Align with "
129 + srv.toString(), service2));
132 public class Jws2Instance
140 public Jws2Instance(String hosturl, String serviceType, MsaWS service)
143 this.hosturl = hosturl;
144 this.serviceType = serviceType;
145 this.service = service;
151 * holds list of services.
153 Vector<Jws2Instance> services;
156 public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
158 if (running || services==null || services.size() == 0)
163 * eventually, JWS2 services will appear under the same align/etc submenus.
164 * for moment we keep them separate.
166 JMenu jws2 = new JMenu("JWS2 Alignment");
167 MsaWSClient msacl = new MsaWSClient();
168 for (final Jws2Instance service : services)
170 msacl.attachWSMenuEntry(jws2, service, alignFrame);
171 /*JMenuItem sitem = new JMenuItem(service.serviceType);
172 sitem.setToolTipText("Hosted at " + service.hosturl);
173 sitem.addActionListener(new ActionListener()
177 public void actionPerformed(ActionEvent e)
179 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
180 MsaWSClient client = new MsaWSClient(service,
181 "JWS2 Alignment of " + alignFrame.getTitle(), msa, false,
182 true, alignFrame.getViewport().getAlignment().getDataset(),
187 if (services.size()>0)
193 public static void main(String[] args)
195 Thread runner = new Thread(getDiscoverer());
197 while (runner.isAlive())
202 } catch (InterruptedException e)
208 private static Jws2Discoverer discoverer;
209 public static Jws2Discoverer getDiscoverer()
211 if (discoverer==null)
213 discoverer = new Jws2Discoverer();
218 public boolean hasServices()
220 // TODO Auto-generated method stub
221 return !running && services!=null && services.size()>0;
224 public boolean isRunning()