JAL-3066 Automatically discoverable Protein sequence analysis services
[jalview.git] / src / jalview / ws / slivkaws / SlivkaWSDiscoverer.java
index e9d0d53..6b3856a 100644 (file)
@@ -4,6 +4,7 @@ import jalview.datamodel.AlignmentView;
 import jalview.gui.AlignFrame;
 import jalview.ws.WSMenuEntryProviderI;
 import jalview.ws.jws2.MsaWSClient;
+import jalview.ws.jws2.SequenceAnnotationWSClient;
 
 import java.awt.event.ActionEvent;
 import java.io.IOError;
@@ -47,9 +48,9 @@ public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
   {
     JMenu slivkaMenu = new JMenu("Slivka");
     wsmenu.add(slivkaMenu);
-    JMenu categoryMenu = new JMenu("Alignment");
-    slivkaMenu.add(categoryMenu);
 
+    JMenu alignmentMenu = new JMenu("Sequence Alignment");
+    slivkaMenu.add(alignmentMenu);
     try
     {
       for (SlivkaService service : client.getServices())
@@ -75,7 +76,7 @@ public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
                 alignFrame.getViewport().getAlignment().getDataset(), alignFrame);
           }
         });
-        categoryMenu.add(defaultEntry);
+        alignmentMenu.add(defaultEntry);
 
         JMenuItem customEntry = new JMenuItem(String.format("%s with custom parameters", service.label));
         customEntry.addActionListener((ActionEvent evt) -> {
@@ -93,15 +94,53 @@ public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
             }
           }
         });
-        categoryMenu.add(customEntry);
+        alignmentMenu.add(customEntry);
 
-        categoryMenu.addSeparator();
+        alignmentMenu.addSeparator();
       }
     } catch (IOException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
+
+    JMenu disorderMenu = new JMenu("Protein sequence analysis");
+    slivkaMenu.add(disorderMenu);
+    try
+    {
+      for (SlivkaService service : client.getServices())
+      {
+        msaClassifier:
+        {
+          for (String classifier : service.classifiers)
+          {
+            if (classifier.contains("Protein sequence analysis"))
+            {
+              break msaClassifier;
+            }
+          }
+          continue;
+        }
+        JMenuItem menuEntry = new JMenuItem(String.format("%s with custom parameters", service.label));
+        disorderMenu.add(menuEntry);
+        SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(client, service);
+        menuEntry.addActionListener((ActionEvent evt) -> {
+          try
+          {
+            SlivkaParamSet paramSet = new SlivkaParamSet(service);
+            SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
+            client.initSequenceAnnotationWSClient(serviceInstance, alignFrame, paramSet, true);
+          } catch (IOException e)
+          {
+            throw new IOError(e);
+          }
+
+        });
+      }
+    } catch (IOException e)
+    {
+      throw new IOError(e);
+    }
   }
 
   @Override