X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FSequenceAnnotationWSClient.java;h=144d88c4ff33c3c23adeabf3a01a6e21f00d9e80;hb=2f4f1d8fb6878271b64f327bc58c895f458137af;hp=3d8b732d91b6da07255d3d8921ce9df51dd6fc22;hpb=4cf0508ac56ebb01fbd51b547ea9f4a682ca97fb;p=jalview.git diff --git a/src/jalview/ws/jws2/SequenceAnnotationWSClient.java b/src/jalview/ws/jws2/SequenceAnnotationWSClient.java index 3d8b732..144d88c 100644 --- a/src/jalview/ws/jws2/SequenceAnnotationWSClient.java +++ b/src/jalview/ws/jws2/SequenceAnnotationWSClient.java @@ -26,6 +26,7 @@ import jalview.gui.JvSwingUtils; import jalview.ws.jws2.dm.AAConSettings; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.WsParamSetI; +import jalview.ws.uimodel.AlignAnalysisUIText; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -44,9 +45,6 @@ import javax.swing.event.MenuListener; */ public class SequenceAnnotationWSClient extends Jws2Client { - - public static final String AAConCalcId = "jabaws2.AACon"; - /** * initialise a client so its attachWSMenuEntry method can be called. */ @@ -62,44 +60,59 @@ public class SequenceAnnotationWSClient extends Jws2Client initSequenceAnnotationWSClient(sh, alignFrame, preset, editParams); } + // dan think. Do I need to change this method to run RNAalifold through the GUI + public void initSequenceAnnotationWSClient(final Jws2Instance sh, AlignFrame alignFrame, WsParamSetI preset, boolean editParams) { - if (alignFrame.getViewport().getAlignment().isNucleotide()) - { - JOptionPane.showMessageDialog(Desktop.desktop, sh.serviceType - + " can only be used\nfor amino acid alignments.", - "Wrong type of sequences!", JOptionPane.WARNING_MESSAGE); - return; - - } - if (sh.action.toLowerCase().contains("conservation")) + // dan changed! dan test. comment out if conditional +// if (alignFrame.getViewport().getAlignment().isNucleotide()) +// { +// JOptionPane.showMessageDialog(Desktop.desktop, sh.serviceType +// + " can only be used\nfor amino acid alignments.", +// "Wrong type of sequences!", JOptionPane.WARNING_MESSAGE); +// return; +// +// } + AlignAnalysisUIText aaui = sh.getAlignAnalysisUI(); + if (aaui!=null) { + Class clientClass = aaui.getClient(); + // Build an AACon style client - take alignment, return annotation for // columns List clnts = alignFrame.getViewport() .getCalcManager() - .getRegisteredWorkersOfClass(AAConClient.class); + .getRegisteredWorkersOfClass(clientClass); + JabawsAlignCalcWorker worker; if (clnts == null || clnts.size() == 0) { if (!processParams(sh, editParams)) { return; } - AAConClient worker; + try { + worker = (JabawsAlignCalcWorker) (clientClass.getConstructor( + new Class[] { Jws2Instance.class, + AlignFrame.class, WsParamSetI.class, + List.class }).newInstance(new Object[] { sh, alignFrame, this.preset, paramset})); + } catch (Exception x) + { + x.printStackTrace(); + throw new Error("Implementation error",x); + } alignFrame .getViewport() .getCalcManager() .registerWorker( - worker = new AAConClient(sh, alignFrame, - this.preset, paramset)); + worker); alignFrame.getViewport().getCalcManager().startWorker(worker); } else { - AAConClient worker = (AAConClient) clnts.get(0); + worker = (JabawsAlignCalcWorker) clnts.get(0); if (editParams) { paramset = worker.getArguments(); @@ -114,7 +127,6 @@ public class SequenceAnnotationWSClient extends Jws2Client // invalid parameters) alignFrame.getViewport().getCalcManager().workerMayRun(worker); worker.updateParameters(this.preset, paramset); - } } if (sh.action.toLowerCase().contains("disorder")) @@ -132,7 +144,6 @@ public class SequenceAnnotationWSClient extends Jws2Client .startWorker( new AADisorderClient(sh, alignFrame, preset, paramset)); } - } public SequenceAnnotationWSClient(AAConSettings fave, @@ -152,10 +163,8 @@ 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())) - { - registerAAConWSInstance(wsmenu, service, alignFrame); + if (registerAAConWSInstance(wsmenu, service, alignFrame)) { + // Alignment dependent analysis calculation WS gui return; } boolean hasparams = service.hasParameters(); @@ -241,21 +250,24 @@ public class SequenceAnnotationWSClient extends Jws2Client } } - private final String AAconToggle = "AACon Calculations", - AAconToggleTooltip = "When checked, AACon calculations are updated automatically.", - AAeditSettings = "Change AACon Settings...", - AAeditSettingsTooltip = "Modify settings for AACon calculations."; - - private void registerAAConWSInstance(final JMenu wsmenu, + + private boolean registerAAConWSInstance(final JMenu wsmenu, final Jws2Instance service, final AlignFrame alignFrame) { - // register this in the AACon settings set + final AlignAnalysisUIText aaui = service.getAlignAnalysisUI(); // null ; // AlignAnalysisUIText.aaConGUI.get(service.serviceType.toString()); + if (aaui==null) + { + // not an instantaneous calculation GUI type service + return false; + } + // create the instaneous calculation GUI bits and update state if existing GUI elements already present + JCheckBoxMenuItem _aaConEnabled = null; for (int i = 0; i < wsmenu.getItemCount(); i++) { JMenuItem item = wsmenu.getItem(i); if (item instanceof JCheckBoxMenuItem - && item.getText().equals(AAconToggle)) + && item.getText().equals(aaui.getAAconToggle())) { _aaConEnabled = (JCheckBoxMenuItem) item; } @@ -265,10 +277,10 @@ public class SequenceAnnotationWSClient extends Jws2Client { List aaconClient = alignFrame.getViewport() .getCalcManager() - .getRegisteredWorkersOfClass(AAConClient.class); + .getRegisteredWorkersOfClass(aaui.getClient()); if (aaconClient != null && aaconClient.size() > 0) { - AAConClient worker = (AAConClient) aaconClient.get(0); + JabawsAlignCalcWorker worker = (JabawsAlignCalcWorker) aaconClient.get(0); if (!worker.service.hosturl.equals(service.hosturl)) { // javax.swing.SwingUtilities.invokeLater(new Runnable() @@ -276,8 +288,8 @@ public class SequenceAnnotationWSClient extends Jws2Client // @Override // public void run() { - removeCurrentAAConWorkerFor(alignFrame); - buildCurrentAAConWorkerFor(alignFrame, service); + removeCurrentAAConWorkerFor(aaui, alignFrame); + buildCurrentAAConWorkerFor(aaui, alignFrame, service); } }// ); } @@ -289,85 +301,95 @@ public class SequenceAnnotationWSClient extends Jws2Client if (_aaConEnabled == null) { final JCheckBoxMenuItem aaConEnabled = new JCheckBoxMenuItem( - AAconToggle); - wsmenu.addMenuListener(new MenuListener() - { + aaui.getAAconToggle()); + aaConEnabled.setToolTipText("

" + + JvSwingUtils.wrapTooltip(aaui.getAAconToggleTooltip() + "

") + + ""); + aaConEnabled.addActionListener(new ActionListener() + { @Override - public void menuSelected(MenuEvent arg0) + public void actionPerformed(ActionEvent arg0) { - wsmenu.setEnabled(!alignFrame.getViewport().getAlignment() - .isNucleotide()); List aaconClient = alignFrame.getViewport() .getCalcManager() - .getRegisteredWorkersOfClass(AAConClient.class); + .getRegisteredWorkersOfClass(aaui.getClient()); if (aaconClient != null && aaconClient.size() > 0) { - aaConEnabled.setSelected(true); + removeCurrentAAConWorkerFor(aaui, alignFrame); } else { - aaConEnabled.setSelected(false); + buildCurrentAAConWorkerFor(aaui, alignFrame); + } } - @Override - public void menuDeselected(MenuEvent arg0) - { - // TODO Auto-generated method stub - - } + }); + wsmenu.add(aaConEnabled); + final JMenuItem modifyParams = new JMenuItem(aaui.getAAeditSettings()); + modifyParams.setToolTipText("

" + + JvSwingUtils.wrapTooltip(aaui.getAAeditSettingsTooltip() + "

") + + ""); + modifyParams.addActionListener(new ActionListener() + { @Override - public void menuCanceled(MenuEvent arg0) + public void actionPerformed(ActionEvent arg0) { - // TODO Auto-generated method stub - + showAAConAnnotationSettingsFor(aaui, alignFrame); } }); - aaConEnabled.setToolTipText("

" - + JvSwingUtils.wrapTooltip(AAconToggleTooltip + "

") - + ""); - aaConEnabled.addActionListener(new ActionListener() + wsmenu.add(modifyParams); + wsmenu.addMenuListener(new MenuListener() { + @Override - public void actionPerformed(ActionEvent arg0) + public void menuSelected(MenuEvent arg0) { + // TODO: refactor to the implementing class. + if (alignFrame.getViewport().getAlignment() + .isNucleotide() ? aaui.isNa() : aaui.isPr()) { + aaConEnabled.setEnabled(true); + modifyParams.setEnabled(true); + } + else { + aaConEnabled.setEnabled(false); + modifyParams.setEnabled(false); + } List aaconClient = alignFrame.getViewport() .getCalcManager() - .getRegisteredWorkersOfClass(AAConClient.class); + .getRegisteredWorkersOfClass(aaui.getClient()); if (aaconClient != null && aaconClient.size() > 0) { - removeCurrentAAConWorkerFor(alignFrame); + aaConEnabled.setSelected(true); } else { - buildCurrentAAConWorkerFor(alignFrame); - + aaConEnabled.setSelected(false); } } - }); - wsmenu.add(aaConEnabled); - JMenuItem modifyParams = new JMenuItem(AAeditSettings); - modifyParams.setToolTipText("

" - + JvSwingUtils.wrapTooltip(AAeditSettingsTooltip + "

") - + ""); - modifyParams.addActionListener(new ActionListener() - { + @Override + public void menuDeselected(MenuEvent arg0) + { + // TODO Auto-generated method stub + + } @Override - public void actionPerformed(ActionEvent arg0) + public void menuCanceled(MenuEvent arg0) { - showAAConAnnotationSettingsFor(alignFrame); + // TODO Auto-generated method stub + } }); - wsmenu.add(modifyParams); } + return true; } - private static void showAAConAnnotationSettingsFor(AlignFrame alignFrame) + private static void showAAConAnnotationSettingsFor(final AlignAnalysisUIText aaui, AlignFrame alignFrame) { /* * preferred settings Whether AACon is automatically recalculated Which @@ -375,21 +397,21 @@ public class SequenceAnnotationWSClient extends Jws2Client */ // could actually do a class search for this too AAConSettings fave = (AAConSettings) alignFrame.getViewport() - .getCalcIdSettingsFor(AAConCalcId); + .getCalcIdSettingsFor(aaui.getCalcId()); if (fave == null) { - fave = createDefaultAAConSettings(); + fave = createDefaultAAConSettings(aaui); } new SequenceAnnotationWSClient(fave, alignFrame, true); } - private static void buildCurrentAAConWorkerFor(AlignFrame alignFrame) + private static void buildCurrentAAConWorkerFor(final AlignAnalysisUIText aaui, AlignFrame alignFrame) { - buildCurrentAAConWorkerFor(alignFrame, null); + buildCurrentAAConWorkerFor(aaui, alignFrame, null); } - private static void buildCurrentAAConWorkerFor(AlignFrame alignFrame, + private static void buildCurrentAAConWorkerFor(final AlignAnalysisUIText aaui, AlignFrame alignFrame, Jws2Instance service) { /* @@ -397,10 +419,10 @@ public class SequenceAnnotationWSClient extends Jws2Client * AACon server to use What parameters to use */ AAConSettings fave = (AAConSettings) alignFrame.getViewport() - .getCalcIdSettingsFor(AAConCalcId); + .getCalcIdSettingsFor(aaui.getCalcId()); if (fave == null) { - fave = createDefaultAAConSettings(service); + fave = createDefaultAAConSettings(aaui, service); } else { @@ -415,12 +437,12 @@ public class SequenceAnnotationWSClient extends Jws2Client new SequenceAnnotationWSClient(fave, alignFrame, false); } - private static AAConSettings createDefaultAAConSettings() + private static AAConSettings createDefaultAAConSettings(AlignAnalysisUIText aaui) { - return createDefaultAAConSettings(null); + return createDefaultAAConSettings(aaui, null); } - private static AAConSettings createDefaultAAConSettings( + private static AAConSettings createDefaultAAConSettings(AlignAnalysisUIText aaui, Jws2Instance service) { if (service != null) @@ -448,7 +470,7 @@ public class SequenceAnnotationWSClient extends Jws2Client { // get the default service for AACon service = Jws2Discoverer.getDiscoverer().getPreferredServiceFor(null, - compbio.ws.client.Services.AAConWS.toString()); + aaui.getServiceType()); } if (service == null) { @@ -459,9 +481,9 @@ public class SequenceAnnotationWSClient extends Jws2Client return new AAConSettings(true, service, null, null); } - private static void removeCurrentAAConWorkerFor(AlignFrame alignFrame) + private static void removeCurrentAAConWorkerFor(AlignAnalysisUIText aaui, AlignFrame alignFrame) { alignFrame.getViewport().getCalcManager() - .removeRegisteredWorkersOfClass(AAConClient.class); + .removeRegisteredWorkersOfClass(aaui.getClient()); } }