package jalview.ws.slivkaws;
-import jalview.datamodel.AlignmentView;
import jalview.gui.AlignFrame;
import jalview.ws.WSMenuEntryProviderI;
-import jalview.ws.jws2.MsaWSClient;
+import jalview.ws.api.ServiceWithParameters;
+import jalview.ws.jws2.PreferredServiceRegistry;
-import java.awt.event.ActionEvent;
+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;
-import javax.swing.JMenuItem;
import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
+import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
-public class SlivkaWSDiscoverer
- implements Runnable, WSMenuEntryProviderI
+public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
{
private static SlivkaWSDiscoverer instance = null;
- private SlivkaClient client;
- private SlivkaWSDiscoverer() {
+ private SlivkaClient slivkaClient;
+
+ private SlivkaWSDiscoverer()
+ {
try
{
- client = 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);
public static SlivkaWSDiscoverer getInstance()
{
- if (instance == null) {
- instance = new SlivkaWSDiscoverer();
- }
+ if (instance == null)
+ {
+ instance = new SlivkaWSDiscoverer();
+ }
return instance;
}
- @Override
- public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
+ List<ServiceWithParameters> getServiceInstances()
{
- JMenu submenu = new JMenu("Slivka");
-
+ List<ServiceWithParameters> instances = new ArrayList<>();
+ for (SlivkaService service : services)
{
- // clustalo menu entry
- JMenuItem noParamMenuItem = new JMenuItem("ClustalO with defaults");
- SlivkaWSInstance clustalo;
- try
- {
- clustalo = new SlivkaWSInstance(client, client.getService("clustalo"));
- } catch (IOException e)
+ for (String classifier : service.classifiers)
{
- throw new IOError(e);
- }
- noParamMenuItem.addActionListener((ActionEvent e) -> {
- AlignmentView msa = alignFrame.gatherSequencesForAlignment();
- if (msa != null)
+ if (classifier.contains("Multiple sequence alignment"))
{
- new MsaWSClient(
- clustalo, alignFrame.getTitle(), msa, false, true, alignFrame.getViewport().getAlignment().getDataset(),
- alignFrame
- );
+ instances
+ .add(new SlivkaMsaServiceInstance(slivkaClient, service));
}
- });
- submenu.add(noParamMenuItem);
-
- JMenuItem parametrisedMenuItem = new JMenuItem("ClustalO with custom parameters");
- parametrisedMenuItem.addActionListener((ActionEvent evt) -> {
- AlignmentView msa = alignFrame.gatherSequencesForAlignment();
- if (msa != null)
+ else if (classifier.contains("Protein sequence analysis"))
{
- try
- {
- SlivkaParamSet paramSet = new SlivkaParamSet(clustalo.getService());
- new MsaWSClient(
- clustalo, paramSet, null, true, alignFrame.getTitle(), msa, false, true,
- alignFrame.getViewport().getAlignment().getDataset(), alignFrame
- );
- } catch (IOException e)
- {
- e.printStackTrace();
- }
+ instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
+ service, false));
}
- });
- submenu.add(parametrisedMenuItem);
- }
-
- {
- // clustalw2 menu entry
- JMenuItem noParamMenuItem = new JMenuItem("ClustalW2 with defaults");
- SlivkaWSInstance clustalo;
- try
- {
- clustalo = new SlivkaWSInstance(client, client.getService("clustalw"));
- } catch (IOException e)
- {
- throw new IOError(e);
- }
- noParamMenuItem.addActionListener((ActionEvent e) -> {
- AlignmentView msa = alignFrame.gatherSequencesForAlignment();
- if (msa != null)
+ else if (classifier
+ .contains("Sequence alignment analysis (conservation)"))
{
- new MsaWSClient(
- clustalo, alignFrame.getTitle(), msa, false, true, alignFrame.getViewport().getAlignment().getDataset(),
- alignFrame
- );
+ instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
+ service, true));
}
- });
- submenu.add(noParamMenuItem);
- JMenuItem parametrisedMenuItem = new JMenuItem("ClustalW2 with custom parameters");
- parametrisedMenuItem.addActionListener((ActionEvent evt) -> {
- AlignmentView msa = alignFrame.gatherSequencesForAlignment();
- if (msa != null)
- {
- try
- {
- SlivkaParamSet paramSet = new SlivkaParamSet(clustalo.getService());
- new MsaWSClient(
- clustalo, paramSet, null, true, alignFrame.getTitle(), msa, false, true,
- alignFrame.getViewport().getAlignment().getDataset(), alignFrame
- );
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- });
- submenu.add(parametrisedMenuItem);
+ }
}
+ return instances;
+ }
+
+ private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
+ this);
- wsmenu.add(submenu);
+ @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
+ {
+ services = slivkaClient.getServices();
+ } catch (IOException e)
+ {
+ throw new IOError(e);
+ }
+ finished = true;
+ }
+
+ 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();
}
}