import jalview.gui.AlignFrame;
import jalview.ws.WSMenuEntryProviderI;
-import jalview.ws.jws2.MsaWSClient;
-import jalview.ws.jws2.SequenceAnnotationWSClient;
+import jalview.ws.api.ServiceWithParameters;
+import jalview.ws.jws2.PreferredServiceRegistry;
+import java.beans.PropertyChangeSupport;
import java.io.IOError;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
import javax.swing.JMenu;
{
try
{
- slivkaClient = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
+ slivkaClient = new SlivkaClient(
+ "gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
} catch (URISyntaxException e)
{
throw new RuntimeException(e);
return instance;
}
- @Override
- public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
+ /**
+ * TODO: tests needed for logic for determining type of each discovered
+ * service. Then reimplement this routine !
+ *
+ * @return (MSA instances, one AAUI type instance, and the remaining all
+ * sequence analysis instances taking 1 sequence only)
+ */
+ List<ServiceWithParameters> getServiceInstances()
{
- JMenu slivkaMenu = new JMenu("Slivka");
- wsmenu.add(slivkaMenu);
-
- JMenu alignmentMenu = new JMenu("Sequence Alignment");
- slivkaMenu.add(alignmentMenu);
- try
+ List<ServiceWithParameters> instances = new ArrayList<>();
+ for (SlivkaService service : services)
{
- for (SlivkaService service : slivkaClient.getServices())
+ ServiceWithParameters newinstance = null;
+ for (String classifier : service.classifiers)
{
- msaClassifier:
+ if (classifier.contains("Multiple sequence alignment"))
+ {
+ // MSA services always overwrite
+ newinstance = new SlivkaMsaServiceInstance(slivkaClient, service);
+ }
+ if (classifier.contains("Protein sequence analysis"))
{
- for (String classifier : service.classifiers)
- {
- if (classifier.contains("Multiple sequence alignment"))
+ if (newinstance == null)
{
- break msaClassifier;
+ newinstance = (new SlivkaAnnotationServiceInstance(
+ slivkaClient,
+
+ service, false));
}
}
- continue;
+
+ if (classifier
+ .contains("Sequence alignment analysis (conservation)"))
+ {
+ // always overwrite other instances
+ newinstance = new SlivkaAnnotationServiceInstance(slivkaClient,
+ service, true);
}
- SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(slivkaClient, service);
- MsaWSClient client = new MsaWSClient();
- client.attachWSMenuEntry(alignmentMenu, instance, alignFrame);
- alignmentMenu.addSeparator();
}
- } catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ if (newinstance != null)
+ {
+ instances.add(newinstance);
+ }
}
+ return instances;
+ }
+
+ private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
+ this);
+
+ @Override
+ public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
+ {
+ JMenu slivkaMenu = new JMenu("Slivka");
+ wsmenu.add(slivkaMenu);
+ JMenu alignmentMenu = new JMenu("Sequence Alignment");
+ slivkaMenu.add(alignmentMenu);
JMenu disorderMenu = new JMenu("Protein sequence analysis");
slivkaMenu.add(disorderMenu);
+ JMenu conservationMenu = new JMenu("Conservation");
+ slivkaMenu.add(conservationMenu);
+ PreferredServiceRegistry.getRegistry().populateWSMenuEntry(
+ getServiceInstances(),
+ changeSupport, slivkaMenu, alignFrame, null);
+
+ }
+
+ List<SlivkaService>services=null;
+
+ volatile boolean started = false, finished = false;
+
+ Thread discoverer = null;
+ @Override
+ public void run()
+ {
+ discoverer = Thread.currentThread();
+ started = true;
try
{
- for (SlivkaService service : slivkaClient.getServices())
- {
- msaClassifier:
- {
- for (String classifier : service.classifiers)
- {
- if (classifier.contains("Protein sequence analysis"))
- {
- break msaClassifier;
- }
- }
- continue;
- }
- SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(slivkaClient, service);
- SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
- client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame);
- disorderMenu.addSeparator();
- }
+ services = slivkaClient.getServices();
} catch (IOException e)
{
throw new IOError(e);
}
+ finished = true;
}
- @Override
- public void run()
+ public static List<ServiceWithParameters> getServices()
+ {
+ SlivkaWSDiscoverer us = getInstance();
+ if (us.services == null)
+ {
+ us.run();
+ }
+ return us.getServiceInstances();
+ }
+
+ public boolean hasServices()
{
+ return finished == true && services != null && services.size() > 0;
+ }
+ public boolean isRunning()
+ {
+ return discoverer != null && discoverer.isAlive();
}
}