JAL-766 JAL-733 - new alignment->jmol associations are automatically used to colour...
[jalview.git] / src / jalview / gui / AlignFrame.java
index b658ffb..ba112b8 100755 (executable)
@@ -71,6 +71,7 @@ import jalview.schemes.TaylorColourScheme;
 import jalview.schemes.TurnColourScheme;
 import jalview.schemes.UserColourScheme;
 import jalview.schemes.ZappoColourScheme;
+import jalview.ws.WSMenuEntryProviderI;
 import jalview.ws.jws1.Discoverer;
 import jalview.ws.jws2.Jws2Discoverer;
 
@@ -3960,6 +3961,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           // object broker mechanism.
           final Vector wsmenu = new Vector();
           final IProgressIndicator af = me;
+          final JMenu msawsmenu = new JMenu("Alignment");
+          final JMenu secstrmenu = new JMenu(
+                  "Secondary Structure Prediction");
+          final JMenu seqsrchmenu = new JMenu(
+                  "Sequence Database Search");
+          final JMenu analymenu = new JMenu(
+                  "Analyse Alignment");
+          
           if (Cache.getDefault("SHOW_JWS1_SERVICES", true)
                   && Discoverer.services != null
                   && (Discoverer.services.size() > 0))
@@ -3978,7 +3987,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
             if (msaws != null)
             {
               // Add any Multiple Sequence Alignment Services
-              final JMenu msawsmenu = new JMenu("Alignment");
               for (int i = 0, j = msaws.size(); i < j; i++)
               {
                 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws
@@ -3988,13 +3996,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                 impl.attachWSMenuEntry(msawsmenu, me);
 
               }
-              wsmenu.add(msawsmenu);
             }
             if (secstrpr != null)
             {
               // Add any secondary structure prediction services
-              final JMenu secstrmenu = new JMenu(
-                      "Secondary Structure Prediction");
               for (int i = 0, j = secstrpr.size(); i < j; i++)
               {
                 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) secstrpr
@@ -4003,13 +4008,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                         .getServiceClient(sh);
                 impl.attachWSMenuEntry(secstrmenu, me);
               }
-              wsmenu.add(secstrmenu);
             }
             if (seqsrch != null)
             {
               // Add any sequence search services
-              final JMenu seqsrchmenu = new JMenu(
-                      "Sequence Database Search");
               for (int i = 0, j = seqsrch.size(); i < j; i++)
               {
                 final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch
@@ -4018,7 +4020,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                         .getServiceClient(sh);
                 impl.attachWSMenuEntry(seqsrchmenu, me);
               }
-              wsmenu.add(seqsrchmenu);
             }
           }
 
@@ -4031,14 +4032,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               if (jws2servs.hasServices())
               {
                 JMenu jws2men = new JMenu("Jaba Web Services");
-                jws2servs.attachWSMenuEntry(jws2men, me);
-                for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++)
-                {
-                  wsmenu.add(jws2men.getMenuComponent(i));
-                }
+                jws2servs.attachWSMenuEntry(msawsmenu, me);
+//                for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++)
+//                {
+//                  msawsmenu.add(jws2men.getMenuComponent(i));
+//                }
               }
             }
           }
+          if (msawsmenu.getMenuComponentCount()>0)
+            wsmenu.add(msawsmenu);
+          if (secstrmenu.getMenuComponentCount()>0)
+            wsmenu.add(secstrmenu);
+          if (analymenu.getMenuComponentCount()>0)
+            wsmenu.add(analymenu);
+          if (seqsrchmenu.getMenuComponentCount()>0)
+            wsmenu.add(seqsrchmenu);
 
           javax.swing.SwingUtilities.invokeLater(new Runnable()
           {
@@ -4116,8 +4125,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     // TODO: refactor to RestClient discoverer and merge menu entries for
     // rest-style services with other types of analysis/calculation service
     // SHmmr test client - still being implemented.
-    jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry(
-            webService, this);
+    
+    for (jalview.ws.rest.RestClient client: jalview.ws.rest.RestClient.getRestClients()) {
+      client.attachWSMenuEntry(JvSwingUtils.findOrCreateMenu(webService, client.getAction()), this);
+    }
     // DEBUG - alignmentView
   }
 
@@ -4513,7 +4524,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           if (pdbfn.length() > 0)
           {
             // attempt to find a match in the alignment
-            SequenceI mtch = idm.findIdMatch(pdbfn);
+            SequenceI[] mtch = idm.findAllIdMatches(pdbfn);
             int l = 0, c = pdbfn.indexOf(".");
             while (mtch == null && c != -1)
             {
@@ -4525,7 +4536,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               {
                 pdbfn = pdbfn.substring(0, l);
               }
-              mtch = idm.findIdMatch(pdbfn);
+              mtch = idm.findAllIdMatches(pdbfn);
             }
             if (mtch != null)
             {
@@ -4570,17 +4581,19 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               // try and associate
               // TODO: may want to set a standard ID naming formalism for
               // associating PDB files which have no IDs.
+              for (SequenceI toassoc: (SequenceI[])fm[2]) {
               PDBEntry pe = new AssociatePdbFileWithSeq()
                       .associatePdbWithSeq((String) fm[0], (String) fm[1],
-                              (SequenceI) fm[2], false);
+                              toassoc, false);
               if (pe != null)
               {
                 System.err
                         .println("Associated file : " + ((String) fm[0])
                                 + " with "
-                                + ((SequenceI) fm[2]).getDisplayId(true));
+                                + toassoc.getDisplayId(true));
                 assocfiles++;
               }
+              }
               alignPanel.paintAlignment(true);
             }
           }