import jalview.gui.Desktop;
import jalview.gui.JalviewChangeSupport;
import jalview.gui.JvSwingUtils;
+import jalview.util.jarInputStreamProvider;
import jalview.ws.WSMenuEntryProviderI;
import jalview.ws.jws2.jabaws2.Jws2Instance;
import compbio.data.msa.JABAService;
Cache.log.debug("Old discovery thread has finished.");
}
running = true;
+ changeSupport.firePropertyChange("services", services, new Vector());
oldthread = Thread.currentThread();
try
{
{
invalidServiceUrls.removeAllElements();
}
+ ArrayList<String> svctypes=new ArrayList<String>();
List<JabaWsServerQuery> qrys = new ArrayList<JabaWsServerQuery>();
for (final String jwsservers : getServiceUrls())
{
JabaWsServerQuery squery = new JabaWsServerQuery(this, jwsservers);
+ if (svctypes.size()==0)
+ {
+ // TODO: remove this ugly hack to get Canonical JABA service ordering for all possible services
+ for (Services sv:squery.JABAWS2SERVERS)
+ {
+ svctypes.add(sv.toString());
+ }
+
+ }
qrys.add(squery);
new Thread(squery).start();
}
- boolean finished = false;
+ boolean finished = true;
do
{
+ finished=true;
try
{
Thread.sleep(100);
;
for (JabaWsServerQuery squery : qrys)
{
- finished |= !squery.isRunning();
+ finished = finished && !squery.isRunning();
}
if (aborted)
{
}
}
} while (!aborted && !finished);
- oldthread = null;
- running = false;
if (!aborted)
{
- changeSupport.firePropertyChange("services", new Vector(), services);
+ // resort services according to order found in jabaws service list
+ // also ensure servics for each host are ordered in same way.
+
+ if (services!=null && services.size()>0)
+ {
+ Jws2Instance[] svcs=new Jws2Instance[services.size()];
+ int[] spos=new int[services.size()];
+ int ipos=0;
+ Vector svcUrls = getServiceUrls();
+ for (Jws2Instance svc:services)
+ {
+ svcs[ipos]=svc;
+ spos[ipos++]=1000*svcUrls.indexOf(svc.getHost()) + 1+svctypes.indexOf(svc.serviceType);
+ }
+ jalview.util.QuickSort.sort(spos, svcs);
+ services=new Vector<Jws2Instance>();
+ for (Jws2Instance svc:svcs) {
+ services.add(svc);
+ }
+ }
}
+ oldthread = null;
+ running = false;
+ changeSupport.firePropertyChange("services", new Vector(), services);
}
/**
MsaWSClient msacl = new MsaWSClient();
Vector hostLabels = new Vector();
jws2al.removeAll();
- String lasthost = null;
+ Hashtable<String,String> lasthostFor = new Hashtable<String,String>();
Hashtable<String, ArrayList<Jws2Instance>> hosts = new Hashtable<String, ArrayList<Jws2Instance>>();
- String[] sorton;
+ ArrayList<String> hostlist=new ArrayList<String>();
for (Jws2Instance service : services)
{
ArrayList<Jws2Instance> hostservices = hosts.get(service.getHost());
{
hosts.put(service.getHost(),
hostservices = new ArrayList<Jws2Instance>());
+ hostlist.add(service.getHost());
}
hostservices.add(service);
}
- sorton = hosts.keySet().toArray(new String[1]);
- String hostlist[] = sorton.clone();
- jalview.util.QuickSort.sort(sorton, hostlist);
+ // now add hosts in order of the given array
for (String host : hostlist)
{
Jws2Instance orderedsvcs[] = hosts.get(host).toArray(
// group
JMenuItem hitm;
atpoint.addSeparator();
- if (lasthost == null || !lasthost.equals(host))
+ if (lasthostFor.get(service.action) == null || !lasthostFor.get(service.action).equals(host))
{
atpoint.add(hitm = new JMenuItem(host));
hitm.setForeground(Color.blue);
});
hitm.setToolTipText(JvSwingUtils
.wrapTooltip("Opens the JABAWS server's homepage in web browser"));
- lasthost = host;
+ lasthostFor.put(service.action,host);
}
hostLabels.addElement(host + service.serviceType
+ service.getActionText());
{
System.out.println("Changesupport: There are now "
+ getDiscoverer().services.size() + " services");
+ int i=1;
+ for (Jws2Instance instance:getDiscoverer().services)
+ {
+ System.out.println("Service "+i+++" "+instance.getClass()+"@"+instance.getHost()+": "+instance.getActionText());
+ }
}
}
}
;
}
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException x) {}
}
private static Jws2Discoverer discoverer;