JAL-975 JAL-1119 - prototype adjustable AACons parameters for the currrent alignment...
authorjprocter <jprocter@compbio.dundee.ac.uk>
Tue, 19 Jun 2012 16:30:56 +0000 (17:30 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Tue, 19 Jun 2012 16:30:56 +0000 (17:30 +0100)
src/jalview/ws/jws2/AAConsClient.java
src/jalview/ws/jws2/SequenceAnnotationWSClient.java

index f6c3fcf..58d0fa9 100644 (file)
@@ -156,4 +156,11 @@ public class AAConsClient extends JabawsAlignCalcWorker
     }
   }
 
+  public static void removeAAConsAnnotation(AlignmentPanel alignPanel)
+  {
+    // List<AlignmentAnnotation>
+    // ourannots=alignPanel.getAlignment().findAnnotation(Screen3D.)
+    // TODO Auto-generated method stub
+
+  }
 }
index c78ed98..77cf2ad 100644 (file)
@@ -7,9 +7,14 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.List;
 
+import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+import javax.swing.event.MenuEvent;
+import javax.swing.event.MenuListener;
 
 import compbio.metadata.Argument;
 
@@ -19,6 +24,7 @@ import jalview.gui.AlignFrame;
 import jalview.gui.Desktop;
 import jalview.gui.JalviewDialog;
 import jalview.gui.JvSwingUtils;
+import jalview.ws.jws2.dm.AAConsSettings;
 import jalview.ws.jws2.jabaws2.Jws2Instance;
 import jalview.ws.params.WsParamSetI;
 
@@ -41,6 +47,12 @@ public class SequenceAnnotationWSClient extends Jws2Client
           AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
   {
     super(alignFrame, preset, null);
+    initSequenceAnnotationWSClient(sh, alignFrame, preset, editParams);
+  }
+  
+  public void initSequenceAnnotationWSClient(final Jws2Instance sh,
+          AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
+  {
     if (alignFrame.getViewport().getAlignment().isNucleotide())
     {
       JOptionPane.showMessageDialog(Desktop.desktop, sh.serviceType
@@ -68,8 +80,9 @@ public class SequenceAnnotationWSClient extends Jws2Client
                 .getViewport()
                 .getCalcManager()
                 .registerWorker(
-                        worker = new AAConsClient(sh, alignFrame, preset,
+                        worker = new AAConsClient(sh, alignFrame, this.preset,
                                 paramset));
+        alignFrame.getViewport().setPreferredAAConsSettings(new AAConsSettings(true, sh, this.preset, paramset));
         alignFrame.getViewport().getCalcManager().startWorker(worker);
 
       }
@@ -83,7 +96,10 @@ public class SequenceAnnotationWSClient extends Jws2Client
         }
 
         if (!processParams(sh, editParams, true))
+        {
           return;
+        }
+        alignFrame.getViewport().setPreferredAAConsSettings(new AAConsSettings(true, sh, preset, paramset));
         // reinstate worker if it was blacklisted (might have happened due to
         // invalid parameters)
         alignFrame.getViewport().getCalcManager().workerMayRun(worker);
@@ -109,6 +125,13 @@ public class SequenceAnnotationWSClient extends Jws2Client
 
   }
 
+  public SequenceAnnotationWSClient(AAConsSettings fave,
+          AlignFrame alignFrame, boolean b)
+  {
+    super(alignFrame, fave.getPreset(), fave.getJobArgset());
+    initSequenceAnnotationWSClient(fave.getService(), alignFrame, fave.getPreset(), b);
+  }
+
   /*
    * (non-Javadoc)
    * 
@@ -118,6 +141,12 @@ public class SequenceAnnotationWSClient extends Jws2Client
   public void attachWSMenuEntry(JMenu wsmenu, final Jws2Instance service,
           final AlignFrame alignFrame)
   {
+    if (service.serviceType.equals(compbio.ws.client.Services.AAConWS
+            .toString()))
+    {
+      registerAAConsWSInstance(wsmenu, service, alignFrame);
+      return;
+    }
     boolean hasparams = service.hasParameters();
     // Assume name ends in WS
     String calcName = service.serviceType.substring(0,
@@ -178,4 +207,170 @@ public class SequenceAnnotationWSClient extends Jws2Client
 
     }
   }
+
+  private final String AAconsToggle = "AACons Calculations",
+          AAconsToggleTooltip = "When checked, AACons calculations are updated automatically.",
+          AAeditSettings = "Change AACons Settings...",
+          AAeditSettingsTooltip = "Modify settings for AACons calculations.";
+
+  private SequenceAnnotationWSClient preferredAAConsClient = null;
+
+  // private final enableAAConsCalculation(final AlignFrame alignFrame, )
+  private void registerAAConsWSInstance(final JMenu wsmenu,
+          final Jws2Instance service, final AlignFrame alignFrame)
+  {
+    // register this in the AACons settings set
+    JCheckBoxMenuItem _aaConsEnabled = null;
+    for (int i = 0; i < wsmenu.getItemCount(); i++)
+    {
+      JMenuItem item = wsmenu.getItem(i);
+      if (item instanceof JCheckBoxMenuItem
+              && item.getText().equals(AAconsToggle))
+      {
+        _aaConsEnabled = (JCheckBoxMenuItem) item;
+      }
+    }
+
+    // is there a service already registered ?
+    if (_aaConsEnabled == null)
+    {
+      final JCheckBoxMenuItem aaConsEnabled = new JCheckBoxMenuItem(
+              AAconsToggle);
+      wsmenu.addMenuListener(new MenuListener()
+      {
+
+        @Override
+        public void menuSelected(MenuEvent arg0)
+        {
+          wsmenu.setEnabled(!alignFrame.getViewport().getAlignment()
+                  .isNucleotide());
+          List<AlignCalcWorkerI> aaconsClient = alignFrame.getViewport()
+                  .getCalcManager()
+                  .getRegisteredWorkersOfClass(AAConsClient.class);
+          if (aaconsClient != null && aaconsClient.size() > 0)
+          {
+            aaConsEnabled.setSelected(true);
+          }
+          else
+          {
+            aaConsEnabled.setSelected(false);
+          }
+        }
+
+        @Override
+        public void menuDeselected(MenuEvent arg0)
+        {
+          // TODO Auto-generated method stub
+
+        }
+
+        @Override
+        public void menuCanceled(MenuEvent arg0)
+        {
+          // TODO Auto-generated method stub
+
+        }
+      });
+      aaConsEnabled.setToolTipText("<html><p>"
+              + JvSwingUtils.wrapTooltip(AAconsToggleTooltip + "</p>")
+              + "</html>");
+      aaConsEnabled.addActionListener(new ActionListener()
+      {
+        @Override
+        public void actionPerformed(ActionEvent arg0)
+        {
+          // aaConsEnabled.setSelected(!aaConsEnabled.isSelected());
+          List<AlignCalcWorkerI> aaconsClient = alignFrame.getViewport()
+                  .getCalcManager()
+                  .getRegisteredWorkersOfClass(AAConsClient.class);
+          if (aaconsClient != null && aaconsClient.size() > 0)
+          {
+            removeCurrentAAConsWorkerFor(alignFrame);
+          }
+          else
+          {
+            buildCurrentAAConsWorkerFor(alignFrame);
+
+          }
+        }
+
+      });
+      wsmenu.add(aaConsEnabled);
+      JMenuItem modifyParams = new JMenuItem(AAeditSettings);
+      modifyParams.setToolTipText("<html><p>"
+              + JvSwingUtils.wrapTooltip(AAeditSettingsTooltip + "</p>")
+              + "</html>");
+      modifyParams.addActionListener(new ActionListener()
+      {
+
+        @Override
+        public void actionPerformed(ActionEvent arg0)
+        {
+          showAAConsAnnotationSettingsFor(alignFrame);
+        }
+      });
+      wsmenu.add(modifyParams);
+
+    }
+
+  }
+
+  private static void showAAConsAnnotationSettingsFor(AlignFrame alignFrame)
+  {
+    /*
+     * preferred settings
+     * Whether AACons is automatically recalculated
+     * Which AACons server to use
+     * What parameters to use
+     */
+    AAConsSettings fave= alignFrame.getViewport().getPreferredAAConsSettings();
+    if (fave==null)
+    {
+      fave = createDefaultAAConsSettings();
+    }
+    new SequenceAnnotationWSClient(fave, alignFrame, true);
+
+  }
+  private static void buildCurrentAAConsWorkerFor(AlignFrame alignFrame)
+  {
+    /*
+     * preferred settings
+     * Whether AACons is automatically recalculated
+     * Which AACons server to use
+     * What parameters to use
+     */
+    AAConsSettings fave= alignFrame.getViewport().getPreferredAAConsSettings();
+    if (fave==null)
+    {
+      fave = createDefaultAAConsSettings();
+    }
+    new SequenceAnnotationWSClient(fave, alignFrame, false);
+  }
+
+  private static AAConsSettings createDefaultAAConsSettings()
+  {
+    Jws2Instance service=null;
+    // set sensible defaults
+    for (Jws2Instance sv: Jws2Discoverer.getDiscoverer().getServices()) {
+      if (sv.serviceType.toString().equals(compbio.ws.client.Services.AAConWS.toString()))
+      {
+        service = sv;
+        break;
+      }
+    }
+    if (service==null)
+    {
+      // TODO raise dialog box explaining error, and/or open the JABA preferences menu.
+      throw new Error("No AACons service found.");
+    }
+    return new AAConsSettings(true, service, null, null);
+  }
+
+  private static void removeCurrentAAConsWorkerFor(AlignFrame alignFrame)
+  {
+    alignFrame.getViewport().getCalcManager()
+            .removeRegisteredWorkersOfClass(AAConsClient.class);
+    // AAConsClient.removeAAConsAnnotation(alignFrame.alignPanel);
+
+  }
 }