import javax.swing.ToolTipManager;
import javax.swing.border.EmptyBorder;
+import jalview.bin.Console;
+import jalview.datamodel.AlignmentI;
import jalview.gui.AlignFrame;
import jalview.gui.Desktop;
import jalview.gui.JvSwingUtils;
import jalview.ws2.actions.annotation.AlignCalcWorkerAdapter;
import jalview.ws2.actions.annotation.AnnotationAction;
import jalview.ws2.actions.api.ActionI;
+import jalview.ws2.actions.api.TaskEventListener;
import jalview.ws2.actions.api.TaskI;
+import jalview.ws2.actions.hmmer.PhmmerAction;
import jalview.ws2.api.Credentials;
import jalview.ws2.api.WebService;
import jalview.ws2.client.api.WebServiceProviderI;
private void addEntriesForAction(ActionI<?> action, JMenu menu, boolean isTopLevel)
{
+ var enabled = isActionEnabled(action);
var service = action.getWebService();
String itemName;
if (isTopLevel)
if (datastore.hasParameters() || datastore.hasPresets())
text += " with defaults";
JMenuItem item = new JMenuItem(text);
+ item.setEnabled(enabled);
item.addActionListener(e -> {
runAction(action, frame.getCurrentView(), Collections.emptyList(),
Credentials.empty());
if (datastore.hasParameters())
{
JMenuItem item = new JMenuItem("Edit settings and run...");
+ item.setEnabled(enabled);
item.addActionListener(e -> {
openEditParamsDialog(datastore, null, null).thenAccept(args -> {
if (args != null)
{
final var presetsMenu = new JMenu(MessageManager.formatMessage(
"label.run_with_preset_params", service.getName()));
+ presetsMenu.setEnabled(enabled);
final int dismissDelay = ToolTipManager.sharedInstance()
.getDismissDelay();
final int QUICK_TOOLTIP = 1500;
for (ActionI<?> action : actions)
{
var item = new JMenuItem(action.getFullName());
+ item.setEnabled(isActionEnabled(action));
item.addActionListener(e -> setAlternative(action));
atMenu.add(item);
}
}
}
+ private boolean isActionEnabled(ActionI<?> action)
+ {
+ var isNa = frame.getViewport().getAlignment().isNucleotide();
+ return ((isNa && action.doAllowNucleotide()) ||
+ (!isNa && action.doAllowProtein()));
+ }
private void runAction(ActionI<?> action, AlignmentViewport viewport,
List<ArgumentI> args, Credentials credentials)
var worker = new AlignCalcWorkerAdapter(viewport, frame.alignPanel,
_action, args, credentials);
var handler = new AnnotationServiceGuiHandler(_action, frame);
- worker.addTaskEventListener(handler);
+ worker.setWorkerListener(handler);
for (var w : calcManager.getWorkers())
{
if (worker.getCalcName() != null && worker.getCalcName().equals(w.getCalcName()))
calcManager.startWorker(worker);
return;
}
- throw new IllegalArgumentException(
- String.format("Illegal action type %s", action.getClass().getName()));
+ if (action instanceof PhmmerAction)
+ {
+ var _action = (PhmmerAction) action;
+ var handler = new SearchServiceGuiHandler(_action, frame);
+ TaskI<AlignmentI> task = _action.createTask(viewport, args, credentials);
+ var executor = PollingTaskExecutor.fromPool(viewport.getServiceExecutor());
+ task.addTaskEventListener(handler);
+ _action.perform(viewport, args, credentials, handler);
+ return;
+ }
+ Console.warn(String.format(
+ "No known handler for action type %s. All output will be discarded.",
+ action.getClass().getName()));
+ var task = action.createTask(viewport, args, credentials);
+ task.addTaskEventListener(TaskEventListener.nullListener());
+ PollingTaskExecutor.fromPool(viewport.getServiceExecutor())
+ .submit(task);
}
private static CompletionStage<List<ArgumentI>> openEditParamsDialog(