From 05539806560b8f623b152362251ca5b651907ade Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 19 Jun 2012 17:30:56 +0100 Subject: [PATCH] JAL-975 JAL-1119 - prototype adjustable AACons parameters for the currrent alignment view --- src/jalview/ws/jws2/AAConsClient.java | 7 + .../ws/jws2/SequenceAnnotationWSClient.java | 197 +++++++++++++++++++- 2 files changed, 203 insertions(+), 1 deletion(-) diff --git a/src/jalview/ws/jws2/AAConsClient.java b/src/jalview/ws/jws2/AAConsClient.java index f6c3fcf..58d0fa9 100644 --- a/src/jalview/ws/jws2/AAConsClient.java +++ b/src/jalview/ws/jws2/AAConsClient.java @@ -156,4 +156,11 @@ public class AAConsClient extends JabawsAlignCalcWorker } } + public static void removeAAConsAnnotation(AlignmentPanel alignPanel) + { + // List + // ourannots=alignPanel.getAlignment().findAnnotation(Screen3D.) + // TODO Auto-generated method stub + + } } diff --git a/src/jalview/ws/jws2/SequenceAnnotationWSClient.java b/src/jalview/ws/jws2/SequenceAnnotationWSClient.java index c78ed98..77cf2ad 100644 --- a/src/jalview/ws/jws2/SequenceAnnotationWSClient.java +++ b/src/jalview/ws/jws2/SequenceAnnotationWSClient.java @@ -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 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("

" + + JvSwingUtils.wrapTooltip(AAconsToggleTooltip + "

") + + ""); + aaConsEnabled.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent arg0) + { + // aaConsEnabled.setSelected(!aaConsEnabled.isSelected()); + List 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("

" + + JvSwingUtils.wrapTooltip(AAeditSettingsTooltip + "

") + + ""); + 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); + + } } -- 1.7.10.2