/** * */ package jalview.ws.jws2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import compbio.metadata.Argument; import jalview.api.AlignCalcWorkerI; import jalview.datamodel.AlignmentView; import jalview.gui.AlignFrame; import jalview.gui.Desktop; import jalview.gui.JalviewDialog; import jalview.gui.JvSwingUtils; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.WsParamSetI; /** * @author jimp * */ public class SequenceAnnotationWSClient extends Jws2Client { /** * initialise a client so its attachWSMenuEntry method can be called. */ public SequenceAnnotationWSClient() { // TODO Auto-generated constructor stub } public SequenceAnnotationWSClient(final Jws2Instance sh, AlignFrame alignFrame, WsParamSetI preset, boolean editParams) { super(alignFrame, preset, null); 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")) { // Build an AACons style client - take alignment, return annotation for // columns List clnts = alignFrame.getViewport() .getCalcManager() .getRegisteredWorkersOfClass(AAConsClient.class); if (clnts == null || clnts.size() == 0) { if (!processParams(sh, editParams)) { return; } AAConsClient worker; alignFrame .getViewport() .getCalcManager() .registerWorker( worker = new AAConsClient(sh, alignFrame, preset, paramset)); alignFrame.getViewport().getCalcManager().startWorker(worker); } else { AAConsClient worker = (AAConsClient) clnts.get(0); if (editParams) { paramset = worker.getArguments(); preset = worker.getPreset(); } if (!processParams(sh, editParams, true)) return; // reinstate worker if it was blacklisted (might have happened due to // invalid parameters) alignFrame.getViewport().getCalcManager().workerMayRun(worker); worker.updateParameters(preset, paramset); } } if (sh.action.toLowerCase().contains("disorder")) { // build IUPred style client. take sequences, returns annotation per // sequence. if (!processParams(sh, editParams)) { return; } alignFrame .getViewport() .getCalcManager() .startWorker( new AADisorderClient(sh, alignFrame, preset, paramset)); } } /* * (non-Javadoc) * * @see jalview.ws.jws2.Jws2Client#attachWSMenuEntry(javax.swing.JMenu, * jalview.ws.jws2.jabaws2.Jws2Instance, jalview.gui.AlignFrame) */ public void attachWSMenuEntry(JMenu wsmenu, final Jws2Instance service, final AlignFrame alignFrame) { boolean hasparams = service.hasParameters(); // Assume name ends in WS String calcName = service.serviceType.substring(0, service.serviceType.length() - 2); JMenuItem aacons = new JMenuItem(calcName + " Defaults"); aacons.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new SequenceAnnotationWSClient(service, alignFrame, null, false); } }); wsmenu.add(aacons); if (hasparams) { // only add these menu options if the service has user-modifiable // arguments aacons = new JMenuItem("Edit settings and run ..."); aacons.setToolTipText("View and change parameters before running calculation"); aacons.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new SequenceAnnotationWSClient(service, alignFrame, null, true); } }); wsmenu.add(aacons); List presets = service.getParamStore().getPresets(); if (presets != null && presets.size() > 0) { JMenu presetlist = new JMenu("Run " + calcName + "with preset"); for (final WsParamSetI preset : presets) { final JMenuItem methodR = new JMenuItem(preset.getName()); methodR.setToolTipText("

" + JvSwingUtils.wrapTooltip("" + (preset.isModifiable() ? "User Preset" : "Service Preset") + "
" + preset.getDescription() + "

") + ""); methodR.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new SequenceAnnotationWSClient(service, alignFrame, preset, false); } }); presetlist.add(methodR); } wsmenu.add(presetlist); } } } }