1 package jalview.ws.jws2;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.util.HashSet;
6 import java.util.Vector;
8 import javax.swing.JMenu;
9 import javax.swing.JMenuItem;
11 import org.apache.log4j.Level;
13 import jalview.bin.Cache;
14 import jalview.datamodel.AlignmentView;
15 import jalview.gui.AlignFrame;
16 import jalview.ws.WSMenuEntryProviderI;
17 import compbio.data.msa.MsaWS;
18 import compbio.ws.client.Jws2Base;
19 import compbio.ws.client.Jws2Base.Services;
22 * discoverer for jws2 services. Follows the lightweight service discoverer
23 * pattern (archetyped by EnfinEnvision2OneWay)
28 public class Jws2Discoverer implements Runnable, WSMenuEntryProviderI
30 compbio.data.msa.MsaWS service;
31 boolean running=false;
40 // Cache.initLogger();
41 // Cache.log.setLevel(Level.DEBUG);
42 // TODO: Document and PACK JWS2
43 String jwsservers = Cache.getDefault("JWS2HOSTURLS",
44 "http://webservices.compbio.dundee.ac.uk:8084/jws2");
47 if (Jws2Base.validURL(jwsservers))
50 for (Services srv : Jws2Base.Services.values())
55 service = Jws2Base.connect(jwsservers, srv);
62 addService(jwsservers, srv, service);
69 Cache.log.info("Ignoring invalid Jws2 service url " + jwsservers);
73 Cache.log.warn("Exception when discovering Jws2 services.", e);
76 Cache.log.error("Exception when discovering Jws2 services.", e);
83 * record this service endpoint so we can use it
89 private void addService(String jwsservers, Services srv, MsaWS service2)
91 Cache.log.info("Discovered service: " + jwsservers + " "
94 services = new Vector<Jws2Instance>();
96 services.add(new Jws2Instance(jwsservers, "Align with "
97 + srv.toString(), service2));
100 public class Jws2Instance
108 public Jws2Instance(String hosturl, String serviceType, MsaWS service)
111 this.hosturl = hosturl;
112 this.serviceType = serviceType;
113 this.service = service;
119 * holds list of services.
121 Vector<Jws2Instance> services;
124 public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
126 if (running || services==null || services.size() == 0)
131 * eventually, JWS2 services will appear under the same align/etc submenus.
132 * for moment we keep them separate.
134 JMenu jws2 = new JMenu("JWS2 Alignment");
135 MsaWSClient msacl = new MsaWSClient();
136 for (final Jws2Instance service : services)
138 msacl.attachWSMenuEntry(jws2, service, alignFrame);
139 /*JMenuItem sitem = new JMenuItem(service.serviceType);
140 sitem.setToolTipText("Hosted at " + service.hosturl);
141 sitem.addActionListener(new ActionListener()
145 public void actionPerformed(ActionEvent e)
147 AlignmentView msa = alignFrame.gatherSequencesForAlignment();
148 MsaWSClient client = new MsaWSClient(service,
149 "JWS2 Alignment of " + alignFrame.getTitle(), msa, false,
150 true, alignFrame.getViewport().getAlignment().getDataset(),
155 if (services.size()>0)
161 public static void main(String[] args)
163 Thread runner = new Thread(getDiscoverer());
165 while (runner.isAlive())
170 } catch (InterruptedException e)
176 private static Jws2Discoverer discoverer;
177 public static Jws2Discoverer getDiscoverer()
179 if (discoverer==null)
181 discoverer = new Jws2Discoverer();
186 public boolean hasServices()
188 // TODO Auto-generated method stub
189 return services!=null && services.size()>0;