+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.api;
-
-import jalview.datamodel.AlignmentAnnotation;
-
-import java.util.List;
-
-public interface AlignCalcManagerI
-{
-
- /**
- * tell manager that a worker is initialised and has started to run
- *
- * @param worker
- */
- void notifyStarted(AlignCalcWorkerI worker);
-
- /**
- * tell manager that a thread running worker's run() loop is ready to start
- * processing data
- *
- * @param worker
- * @return true if worker should start processing, false if another thread is
- * in progress
- */
- boolean notifyWorking(AlignCalcWorkerI worker);
-
- /**
- * notify manager that the worker has completed, and results may be ready to
- * collect
- *
- * @param worker
- */
- void workerComplete(AlignCalcWorkerI worker);
-
- /**
- * indicate that a worker like this cannot run on the platform and shouldn't
- * be started again
- *
- * @param worker
- */
- void disableWorker(AlignCalcWorkerI worker);
-
- /**
- * indicate that a worker like this may be run on the platform.
- *
- * @param worker
- * of class to be removed from the execution blacklist
- */
- void enableWorker(AlignCalcWorkerI worker);
-
- /**
- * Answers true if the worker is disabled from running
- *
- * @param worker
- * @return
- */
- boolean isDisabled(AlignCalcWorkerI worker);
-
- /**
- * launch a new worker
- *
- * @param worker
- */
- void startWorker(AlignCalcWorkerI worker);
-
- /**
- *
- * @param worker
- * @return true if the worker is currently running
- */
- boolean isWorking(AlignCalcWorkerI worker);
-
- /**
- * if any worker thread is operational, return true!
- *
- * @return
- */
- boolean isWorking();
-
- /**
- * register a restartable worker
- *
- * @param worker
- */
- void registerWorker(AlignCalcWorkerI worker);
-
- /**
- * restart any registered workers
- */
- void restartWorkers();
-
- /**
- *
- * @param alignmentAnnotation
- * @return true if a currently registered and working worker indicates its
- * involvement with the given alignmentAnnotation
- */
- boolean workingInvolvedWith(AlignmentAnnotation alignmentAnnotation);
-
- /**
- * kick any known instances of the given worker class to update their
- * annotation
- *
- * @param workerClass
- */
- void updateAnnotationFor(Class<? extends AlignCalcWorkerI> workerClass);
-
- /**
- * return any registered workers of the given class
- *
- * @param workerClass
- * @return null or one or more workers of the given class
- */
- List<AlignCalcWorkerI> getRegisteredWorkersOfClass(
- Class<? extends AlignCalcWorkerI> workerClass);
-
- /**
- * work out if there is an instance of a worker that is *waiting* to start
- * calculating
- *
- * @param workingClass
- * @return true if workingClass is already waiting to calculate. false if it
- * is calculating, or not queued.
- */
- boolean isPending(AlignCalcWorkerI workingClass);
-
- /**
- * deregister and otherwise remove any registered and working instances of the
- * given worker type
- *
- * @param typeToRemove
- */
- void removeWorkersOfClass(
- Class<? extends AlignCalcWorkerI> typeToRemove);
-
- /**
- * Removes the worker that produces the given annotation, provided it is
- * marked as 'deletable'. Some workers may need to continue to run as the
- * results of their calculations are needed, e.g. for colour schemes.
- *
- * @param ann
- */
- void removeWorkerForAnnotation(AlignmentAnnotation ann);
-}
{
WsParamSetI set = new HMMERPreset();
WsJobParameters params = new WsJobParameters(store, set, args);
- if (params.showRunDialog())
- {
- args = params.getJobParams();
- }
- else
- {
- return; // user cancelled
- }
+ params.showRunDialog().thenAccept((startJob) -> {
+ if (startJob)
+ {
+ var args2 = params.getJobParams();
+ new Thread(new HMMBuild(this, args2)).start();
+ }
+ });
+ }
+ else
+ {
+ new Thread(new HMMBuild(this, args)).start();
}
- new Thread(new HMMBuild(this, args)).start();
}
@Override
{
WsParamSetI set = new HMMERPreset();
WsJobParameters params = new WsJobParameters(store, set, args);
- if (params.showRunDialog())
- {
- args = params.getJobParams();
- }
- else
- {
- return; // user cancelled
- }
+ params.showRunDialog().thenAccept((startJob) -> {
+ if (startJob)
+ {
+ var args2 = params.getJobParams();
+ new Thread(new HMMAlign(this, args2)).start();
+ }
+ });
+ }
+ else
+ {
+ new Thread(new HMMAlign(this, args)).start();
}
- new Thread(new HMMAlign(this, args)).start();
}
@Override
{
WsParamSetI set = new HMMERPreset();
WsJobParameters params = new WsJobParameters(store, set, args);
- if (params.showRunDialog())
- {
- args = params.getJobParams();
- }
- else
- {
- return; // user cancelled
- }
+ params.showRunDialog().thenAccept((startJob) -> {
+ if (startJob)
+ {
+ var args2 = params.getJobParams();
+ new Thread(new HMMSearch(this, args2)).start();
+ alignPanel.repaint();
+ }
+ });
+ }
+ else
+ {
+ new Thread(new HMMSearch(this, args)).start();
+ alignPanel.repaint();
}
- new Thread(new HMMSearch(this, args)).start();
- alignPanel.repaint();
}
@Override
{
WsParamSetI set = new HMMERPreset();
WsJobParameters params = new WsJobParameters(store, set, args);
- if (params.showRunDialog())
- {
- args = params.getJobParams();
- }
- else
- {
- return; // user cancelled
- }
+ params.showRunDialog().thenAccept((startJob) -> {
+ if (startJob)
+ {
+ var args2 = params.getJobParams();
+ new Thread(new JackHMMER(this, args2)).start();
+ alignPanel.repaint();
+ }
+ });
+ }
+ else
+ {
+ new Thread(new JackHMMER(this, args)).start();
+ alignPanel.repaint();
}
- new Thread(new JackHMMER(this, args)).start();
- alignPanel.repaint();
-
}
/**
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
+import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
+import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
// TODO ABSRACT FROM JABAWS CLASSES
+ // completion stage representing whether start was clicked
+ private final CompletableFuture<Boolean> completionStage = new CompletableFuture<>();
+
/**
* manager for options and parameters.
*/
JTextArea setDescr = new JTextArea();
JScrollPane paramPane = new JScrollPane();
+
+ JButton startjob = JvSwingUtils.makeButton(
+ MessageManager.getString("action.start_job"),
+ MessageManager.getString("label.start_job_current_settings"),
+ this::startjob_actionPerformed);
+ JButton canceljob = JvSwingUtils.makeButton(
+ MessageManager.getString("action.cancel_job"),
+ MessageManager.getString("label.cancel_job_close_dialog"),
+ this::canceljob_actionPerformed);
ParamDatastoreI paramStore;
// set true when 'Start Job' is clicked
boolean startJob = false;
- JDialog frame = null;
+ JFrame frame = null;
UIinfo service;
*
* @return
*/
- public boolean showRunDialog()
+ public CompletionStage<Boolean> showRunDialog()
{
-
- frame = new JDialog(Desktop.getInstance(), true);
+ frame = new JFrame();
+ frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
if (service != null)
{
frame.setTitle(MessageManager.formatMessage("label.edit_params_for",
- new String[]
- { service.getActionText() }));
+ new String[] { service.getActionText() }));
}
- frame.setTitle(MessageManager.formatMessage("label.edit_params_for",
- new String[]
- { service.getActionText() }));
Rectangle deskr = Desktop.getInstance().getBounds();
Dimension pref = this.getPreferredSize();
frame.setBounds(
}
});
+
frame.setVisible(true);
-
- return startJob;
+ return completionStage;
}
private void jbInit()
updatepref = JvSwingUtils.makeButton(
MessageManager.getString("action.update"),
MessageManager.getString("label.update_user_parameter_set"),
- new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- update_actionPerformed();
- }
- });
+ this::update_actionPerformed);
deletepref = JvSwingUtils.makeButton(
MessageManager.getString("action.delete"),
MessageManager.getString("label.delete_user_parameter_set"),
- new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- delete_actionPerformed();
- }
- });
+ this::delete_actionPerformed);
createpref = JvSwingUtils.makeButton(
MessageManager.getString("action.create"),
MessageManager.getString("label.create_user_parameter_set"),
- new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- create_actionPerformed();
- }
- });
+ this::create_actionPerformed);
revertpref = JvSwingUtils.makeButton(
MessageManager.getString("action.revert"),
MessageManager
.getString("label.revert_changes_user_parameter_set"),
- new ActionListener()
- {
+ this::revert_actionPerformed);
- @Override
- public void actionPerformed(ActionEvent e)
- {
- revert_actionPerformed();
- }
- });
-
- JButton startjob = JvSwingUtils.makeButton(
- MessageManager.getString("action.start_job"),
- MessageManager.getString("label.start_job_current_settings"),
- new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- startjob_actionPerformed();
- }
- });
- JButton canceljob = JvSwingUtils.makeButton(
- MessageManager.getString("action.cancel_job"),
- MessageManager.getString("label.cancel_job_close_dialog"),
- new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- canceljob_actionPerformed();
- }
- });
JPanel setDetails = new JPanel();
setDetails.setBorder(
validate();
}
- protected void revert_actionPerformed()
+ protected void revert_actionPerformed(ActionEvent e)
{
reInitDialog(lastParmSet);
updateWebServiceMenus();
}
- protected void update_actionPerformed()
+ protected void update_actionPerformed(ActionEvent e)
{
if (isUserPreset)
{
paramStore.deletePreset(lastParmSet2);
}
- protected void delete_actionPerformed()
+ protected void delete_actionPerformed(ActionEvent e)
{
if (isUserPreset)
{
updateWebServiceMenus();
}
- protected void create_actionPerformed()
+ protected void create_actionPerformed(ActionEvent e)
{
String curname = ((String) setName.getSelectedItem()).trim();
if (curname.length() > 0)
}
}
- protected void canceljob_actionPerformed()
+ protected void canceljob_actionPerformed(ActionEvent e)
{
startJob = false;
if (frame != null)
{
frame.setVisible(false);
}
+ completionStage.complete(false);
}
- protected void startjob_actionPerformed()
+ protected void startjob_actionPerformed(ActionEvent e)
{
startJob = true;
if (frame != null)
{
frame.setVisible(false);
}
+ completionStage.complete(true);
}
void initForService(WsParamSetI paramSet, List<ArgumentI> jobArgset)
if (logger == null)
{
registry.put(name, logger = new Logger(name));
- logger.setLevel(Level.INFO);
+ logger.setLevel(Level.DEBUG);
}
return logger;
}
{
return isEnabled;
}
+
+ public void trace(Object o)
+ {
+ trace(o, null);
+ }
+
+ public void trace(Object o, Throwable e)
+ {
+ switch (level.level)
+ {
+ case Level.TRACE_INT:
+ log(o, e);
+ break;
+ }
+ }
public void debug(Object o)
{
switch (level.level)
{
case Priority.DEBUG_INT:
+ case Level.TRACE_INT:
log(o, e);
break;
}
{
case Priority.INFO_INT:
case Priority.DEBUG_INT:
+ case Level.TRACE_INT:
log(o, e);
break;
}
case Priority.WARN_INT:
case Priority.INFO_INT:
case Priority.DEBUG_INT:
+ case Level.TRACE_INT:
log(o, e);
break;
}
case Priority.WARN_INT:
case Priority.INFO_INT:
case Priority.DEBUG_INT:
+ case Level.TRACE_INT:
log(o, e);
break;
}
switch (level.level)
{
case Priority.ERROR_INT:
- if (appender == null)
- {
- System.err.println(s);
- return;
- }
- break;
case Priority.WARN_INT:
if (appender == null)
{
System.err.println(s);
return;
}
- break;
case Priority.INFO_INT:
- if (appender == null)
- {
- System.out.println(s);
- return;
- }
- break;
case Priority.DEBUG_INT:
+ case Level.TRACE_INT:
if (appender == null)
{
System.out.println(s);
}
break;
}
- e.printStackTrace();
+ if (e != null)
+ {
+ e.printStackTrace();
+ }
appender.append(new LoggingEvent(this, s.toString(), level));
}
import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
import jalview.analysis.Conservation;
import jalview.analysis.TreeModel;
-import jalview.api.AlignCalcManagerI;
import jalview.api.AlignCalcManagerI2;
import jalview.api.AlignCalcWorkerI;
import jalview.api.AlignExportSettingsI;
import jalview.util.MappingUtils;
import jalview.util.MessageManager;
import jalview.viewmodel.styles.ViewStyle;
-import jalview.workers.AlignCalcManager;
import jalview.workers.AlignCalcManager2;
import jalview.workers.ComplementConsensusThread;
import jalview.workers.ConsensusThread;
+++ /dev/null
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- *
- * This file is part of Jalview.
- *
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.workers;
-
-import jalview.api.AlignCalcManagerI;
-import jalview.api.AlignCalcWorkerI;
-import jalview.bin.Cache;
-import jalview.datamodel.AlignmentAnnotation;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class AlignCalcManager implements AlignCalcManagerI
-{
- /*
- * list of registered workers
- */
- private final List<AlignCalcWorkerI> restartable = Collections
- .synchronizedList(new ArrayList<AlignCalcWorkerI>());
-
- /*
- * types of worker _not_ to run (for example, because they have
- * previously thrown errors)
- */
- private final List<Class<? extends AlignCalcWorkerI>> blackList = Collections
- .synchronizedList(new ArrayList<Class<? extends AlignCalcWorkerI>>());
-
- /*
- * global record of calculations in progress
- */
- private final List<AlignCalcWorkerI> inProgress = Collections
- .synchronizedList(new ArrayList<AlignCalcWorkerI>());
-
- /*
- * record of calculations pending or in progress in the current context
- */
- private final Map<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>> updating =
- new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>();
-
- /*
- * workers that have run to completion so are candidates for visual-only
- * update of their results
- */
- private HashSet<AlignCalcWorkerI> canUpdate = new HashSet<>();;
-
- private static boolean listContains(List<AlignCalcWorkerI> upd,
- AlignCalcWorkerI worker)
- {
- // avoid use of 'Contains' in case
- for (AlignCalcWorkerI _otherworker : upd)
- {
- if (_otherworker == upd)
- {
- return true;
- }
- }
- return false;
- }
- @Override
- public void notifyStarted(AlignCalcWorkerI worker)
- {
- synchronized (updating)
- {
- List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
- if (upd == null)
- {
- updating.put(worker.getClass(), upd = Collections
- .synchronizedList(new ArrayList<AlignCalcWorkerI>()));
- }
- synchronized (upd)
- {
- if (listContains(upd, worker))
- {
- Cache.log.debug(
- "Ignoring second call to notifyStart for worker "
- + worker);
- }
- else
- {
- upd.add(worker);
- }
- }
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see jalview.api.AlignCalcManagerI#isPending(jalview.api.AlignCalcWorkerI)
- */
- @Override
- public boolean isPending(AlignCalcWorkerI workingClass)
- {
- synchronized (updating)
- {
- List<AlignCalcWorkerI> upd = updating.get(workingClass.getClass());
- return upd != null && upd.size() > 1;
- }
- }
-
- @Override
- public boolean notifyWorking(AlignCalcWorkerI worker)
- {
- synchronized (inProgress)
- {
- if (listContains(inProgress, worker))
- {
- return false; // worker is already working, so ask caller to wait around
- }
- else
- {
- inProgress.add(worker);
- }
- }
- return true;
- }
-
- @Override
- public void workerComplete(AlignCalcWorkerI worker)
- {
- synchronized (inProgress)
- {
- Cache.log.debug("Worker " + worker + " marked as complete.");
- inProgress.remove(worker);
- List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
- if (upd != null)
- {
- synchronized (upd)
- {
- upd.remove(worker);
- }
- canUpdate.add(worker);
- }
- }
- }
-
- @Override
- public void disableWorker(AlignCalcWorkerI worker)
- {
- synchronized (blackList)
- {
- blackList.add(worker.getClass());
- }
- }
-
- @Override
- public boolean isDisabled(AlignCalcWorkerI worker)
- {
- synchronized (blackList)
- {
- return blackList.contains(worker.getClass());
- }
- }
-
- @Override
- public void startWorker(AlignCalcWorkerI worker)
- {
- if (!isDisabled(worker))
- {
- Thread tw = new Thread(() -> {
- try
- {
- worker.run();
- } catch (Throwable e)
- {
- e.printStackTrace();
- }
- });
- tw.setName(worker.getClass().toString());
- tw.start();
- }
- }
-
- @Override
- public boolean isWorking(AlignCalcWorkerI worker)
- {
- synchronized (inProgress)
- {// System.err.println("isWorking : worker "+(worker!=null ?
- // worker.getClass():"null")+ " "+hashCode());
- return worker != null && inProgress.contains(worker);
- }
- }
-
- @Override
- public boolean isWorking()
- {
- synchronized (inProgress)
- {
- // System.err.println("isWorking "+hashCode());
- return inProgress.size() > 0;
- }
- }
-
- public int getQueueLength() {
- return inProgress.size();
- }
-
- @Override
- public void registerWorker(AlignCalcWorkerI worker)
- {
- synchronized (restartable)
- {
- if (!listContains(restartable, worker))
- {
- restartable.add(worker);
- }
- startWorker(worker);
- }
- }
-
- @Override
- public void restartWorkers()
- {
- synchronized (restartable)
- {
- for (AlignCalcWorkerI worker : restartable)
- {
- startWorker(worker);
- }
- }
- }
-
- @Override
- public boolean workingInvolvedWith(
- AlignmentAnnotation alignmentAnnotation)
- {
- synchronized (inProgress)
- {
- for (AlignCalcWorkerI worker : inProgress)
- {
- if (worker.involves(alignmentAnnotation))
- {
- return true;
- }
- }
- }
- synchronized (updating)
- {
- for (List<AlignCalcWorkerI> workers : updating.values())
- {
- for (AlignCalcWorkerI worker : workers)
- {
- if (worker.involves(alignmentAnnotation))
- {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public void updateAnnotationFor(
- Class<? extends AlignCalcWorkerI> workerClass)
- {
-
- AlignCalcWorkerI[] workers;
- synchronized (canUpdate)
- {
- workers = canUpdate.toArray(new AlignCalcWorkerI[0]);
- }
- for (AlignCalcWorkerI worker : workers)
- {
- if (workerClass.equals(worker.getClass()))
- {
- worker.updateAnnotation();
- }
- }
- }
-
- @Override
- public List<AlignCalcWorkerI> getRegisteredWorkersOfClass(
- Class<? extends AlignCalcWorkerI> workerClass)
- {
- List<AlignCalcWorkerI> workingClass = new ArrayList<>();
- synchronized (canUpdate)
- {
- for (AlignCalcWorkerI worker : canUpdate)
- {
- if (workerClass.equals(worker.getClass()))
- {
- workingClass.add(worker);
- }
- }
- }
- return (workingClass.size() == 0) ? null : workingClass;
- }
-
- @Override
- public void enableWorker(AlignCalcWorkerI worker)
- {
- synchronized (blackList)
- {
- blackList.remove(worker.getClass());
- }
- }
-
- @Override
- public void removeWorkersOfClass(
- Class<? extends AlignCalcWorkerI> typeToRemove)
- {
- List<AlignCalcWorkerI> removable = new ArrayList<>();
- Set<AlignCalcWorkerI> toremovannot = new HashSet<>();
- synchronized (restartable)
- {
- for (AlignCalcWorkerI worker : restartable)
- {
- if (typeToRemove.equals(worker.getClass()))
- {
- removable.add(worker);
- toremovannot.add(worker);
- }
- }
- restartable.removeAll(removable);
- }
- synchronized (canUpdate)
- {
- for (AlignCalcWorkerI worker : canUpdate)
- {
- if (typeToRemove.equals(worker.getClass()))
- {
- removable.add(worker);
- toremovannot.add(worker);
- }
- }
- canUpdate.removeAll(removable);
- }
- // TODO: finish testing this extension
-
- /*
- * synchronized (inProgress) { // need to kill or mark as dead any running
- * threads... (inProgress.get(typeToRemove)); }
- *
- * if (workers == null) { return; } for (AlignCalcWorkerI worker : workers)
- * {
- *
- * if (isPending(worker)) { worker.abortAndDestroy(); startWorker(worker); }
- * else { System.err.println("Pending exists for " + workerClass); } }
- */
- }
-
- /**
- * Deletes the worker that update the given annotation, provided it is marked
- * as deletable.
- */
- @Override
- public void removeWorkerForAnnotation(AlignmentAnnotation ann)
- {
- /*
- * first just find those to remove (to avoid
- * ConcurrentModificationException)
- */
- List<AlignCalcWorkerI> toRemove = new ArrayList<>();
- for (AlignCalcWorkerI worker : restartable)
- {
- if (worker.involves(ann))
- {
- if (worker.isDeletable())
- {
- toRemove.add(worker);
- }
- }
- }
-
- /*
- * remove all references to deleted workers so any references
- * they hold to annotation data can be garbage collected
- */
- for (AlignCalcWorkerI worker : toRemove)
- {
- restartable.remove(worker);
- blackList.remove(worker.getClass());
- inProgress.remove(worker);
- canUpdate.remove(worker);
- synchronized (updating)
- {
- List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
- if (upd != null)
- {
- upd.remove(worker);
- }
- }
- }
- }
-}
*/
package jalview.workers;
-import jalview.api.AlignCalcManagerI;
import jalview.api.AlignCalcManagerI2;
import jalview.api.AlignCalcWorkerI;
import jalview.api.AlignViewportI;
*/
package jalview.ws;
+import jalview.bin.Cache;
import jalview.gui.AlignFrame;
import jalview.gui.Desktop;
import jalview.gui.WebserviceInfo;
import jalview.ws.params.WsParamSetI;
import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
public abstract class WSClient // implements WSMenuEntryProviderI
{
* @param arguments
*/
public WSClient(AlignFrame _alignFrame, WsParamSetI preset,
- List<ArgumentI> arguments)
+ List<ArgumentI> arguments)
{
alignFrame = _alignFrame;
this.preset = preset;
if (!b)
{
return new WebserviceInfo(WebServiceJobTitle,
- WebServiceJobTitle + " using service hosted at "
- + WsURL + "\n"
- + (serv.getDescription() != null
- ? serv.getDescription()
- : ""),
- false);
+ WebServiceJobTitle + " using service hosted at "
+ + WsURL + "\n"
+ + (serv.getDescription() != null
+ ? serv.getDescription()
+ : ""),
+ false);
}
return null;
}
* @param editParams
* @return
*/
- protected boolean processParams(ServiceWithParameters sh,
- boolean editParams)
+ protected CompletionStage<Boolean> processParams(ServiceWithParameters sh,
+ boolean editParams)
{
return processParams(sh, editParams, false);
}
- protected boolean processParams(ServiceWithParameters sh,
- boolean editParams,
- boolean adjustingExisting)
+ protected CompletionStage<Boolean> processParams(ServiceWithParameters sh,
+ boolean editParams, boolean adjustingExisting)
{
if (editParams)
sh.initParamStore(Desktop.getUserParameterStore());
WsJobParameters jobParams = (preset == null && paramset != null
- && paramset.size() > 0)
- ? new WsJobParameters((ParamDatastoreI) null, sh,
- (WsParamSetI) null, paramset)
- : new WsJobParameters((ParamDatastoreI) null, sh,
- preset, (List<ArgumentI>) null);
+ && paramset.size() > 0)
+ ? new WsJobParameters((ParamDatastoreI) null, sh,
+ (WsParamSetI) null, paramset)
+ : new WsJobParameters((ParamDatastoreI) null, sh,
+ preset, (List<ArgumentI>) null);
if (adjustingExisting)
{
jobParams.setName(MessageManager
- .getString("label.adjusting_parameters_for_calculation"));
+ .getString("label.adjusting_parameters_for_calculation"));
}
- if (!jobParams.showRunDialog())
- {
- return false; // dialog cancelled
- }
-
- WsParamSetI prset = jobParams.getPreset();
- if (prset == null)
- {
- paramset = jobParams.isServiceDefaults() ? null
+ var stage = jobParams.showRunDialog();
+ return stage.thenApply((startJob) -> {
+ if (startJob)
+ {
+ WsParamSetI prset = jobParams.getPreset();
+ if (prset == null)
+ {
+ paramset = jobParams.isServiceDefaults() ? null
: jobParams.getJobParams();
- this.preset = null;
- }
- else
- {
- this.preset = prset; // ((JabaPreset) prset).p;
- paramset = null; // no user supplied parameters.
- }
+ this.preset = null;
+ }
+ else
+ {
+ this.preset = prset; // ((JabaPreset) prset).p;
+ paramset = null; // no user supplied parameters.
+ }
+ }
+ return startJob;
+ });
+
}
- return true;
+ return CompletableFuture.completedFuture(true);
}
}
AlignFrame _alignFrame)
{
super(_alignFrame, preset, arguments);
- if (!processParams(sh, editParams))
- {
- return;
- }
-
- if (!(sh instanceof JalviewServiceEndpointProviderI
- && ((JalviewServiceEndpointProviderI) sh)
- .getEndpoint() instanceof MultipleSequenceAlignmentI))
- {
- // redundant at mo - but may change
- JvOptionPane.showMessageDialog(Desktop.getDesktopPane(),
- MessageManager.formatMessage(
- "label.service_called_is_not_msa_service",
- new String[]
- { sh.getName() }),
- MessageManager.getString("label.internal_jalview_error"),
- JvOptionPane.WARNING_MESSAGE);
-
- return;
- }
- serviceHandle = sh;
- server = (MultipleSequenceAlignmentI) ((JalviewServiceEndpointProviderI) sh)
- .getEndpoint();
- if ((wsInfo = setWebService(sh, false)) == null)
- {
- JvOptionPane.showMessageDialog(Desktop.getDesktopPane(), MessageManager
- .formatMessage("label.msa_service_is_unknown", new String[]
- { sh.getName() }),
- MessageManager.getString("label.internal_jalview_error"),
- JvOptionPane.WARNING_MESSAGE);
-
- return;
- }
-
- startMsaWSClient(altitle, msa, submitGaps, preserveOrder, seqdataset);
-
+ processParams(sh, editParams).thenAccept((startJob) -> {
+ if (!startJob)
+ return;
+
+ if (!(sh instanceof JalviewServiceEndpointProviderI
+ && ((JalviewServiceEndpointProviderI) sh)
+ .getEndpoint() instanceof MultipleSequenceAlignmentI))
+ {
+ // redundant at mo - but may change
+ JvOptionPane.showMessageDialog(Desktop.getDesktopPane(),
+ MessageManager.formatMessage(
+ "label.service_called_is_not_msa_service",
+ new String[]
+ { sh.getName() }),
+ MessageManager.getString("label.internal_jalview_error"),
+ JvOptionPane.WARNING_MESSAGE);
+
+ return;
+ }
+ serviceHandle = sh;
+ server = (MultipleSequenceAlignmentI) ((JalviewServiceEndpointProviderI) sh)
+ .getEndpoint();
+ if ((wsInfo = setWebService(sh, false)) == null)
+ {
+ JvOptionPane.showMessageDialog(Desktop.getDesktopPane(), MessageManager
+ .formatMessage("label.msa_service_is_unknown", new String[]
+ { sh.getName() }),
+ MessageManager.getString("label.internal_jalview_error"),
+ JvOptionPane.WARNING_MESSAGE);
+
+ return;
+ }
+
+ startMsaWSClient(altitle, msa, submitGaps, preserveOrder, seqdataset);
+ });
}
public MsaWSClient()
// TODO: handle job submission error reporting here.
Cache.log.debug("Service " + service.getUri() + "\nSubmitted job ID: "
+ rslt);
- ;
// ///
// otherwise, construct WsJob and any UI handlers
running = new AnnotationWsJob();
Cache.log.debug("Ignoring exception during progress update.",
thr);
}
- Cache.log.trace("Result of poll: " + running.getStatus());
+ Cache.log.debug("Result of poll: " + running.getStatus());
if (finished)
// dan think. Do I need to change this method to run RNAalifold through the
// GUI
- public void initSequenceAnnotationWSClient(final ServiceWithParameters sh,
- AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
+ private void initSequenceAnnotationWSClient(final ServiceWithParameters sh,
+ AlignFrame alignFrame, final WsParamSetI preset, boolean editParams)
{
// dan changed! dan test. comment out if conditional
// if (alignFrame.getViewport().getAlignment().isNucleotide())
// columns
List<AlignCalcWorkerI> clnts = alignFrame.getViewport()
- .getCalcManager()
- .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
+ .getCalcManager()
+ .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
- SeqAnnotationServiceCalcWorker worker = null;
+ SeqAnnotationServiceCalcWorker tmpworker = null;
if (clnts != null)
{
for (AlignCalcWorkerI _worker : clnts)
{
- worker = (SeqAnnotationServiceCalcWorker) _worker;
- if (worker.hasService()
- && worker.getService().getClass().equals(clientClass))
+ tmpworker = (SeqAnnotationServiceCalcWorker) _worker;
+ if (tmpworker.hasService()
+ && tmpworker.getService().getClass().equals(clientClass))
{
break;
}
- worker = null;
+ tmpworker = null;
}
}
+ final var worker = tmpworker;
if (worker == null)
{
- if (!processParams(sh, editParams))
- {
- return;
- }
- try
- {
- worker = new SeqAnnotationServiceCalcWorker(sh, alignFrame, this.preset,
+ processParams(sh, editParams).thenAccept((startJob) -> {
+ if (startJob)
+ {
+ final SeqAnnotationServiceCalcWorker worker_;
+ try
+ {
+ worker_ = new SeqAnnotationServiceCalcWorker(sh, alignFrame, this.preset,
paramset);
- } catch (Exception x)
- {
- x.printStackTrace();
- throw new Error(
+ } catch (Exception x)
+ {
+ x.printStackTrace();
+ throw new Error(
MessageManager.getString("error.implementation_error"),
x);
- }
- alignFrame.getViewport().getCalcManager().registerWorker(worker); // also
- // starts
- // the
- // worker
+ }
+ alignFrame.getViewport().getCalcManager().registerWorker(worker_);
+ // also starts the worker
+ startSeqAnnotationWorker(sh, alignFrame, preset, editParams);
+ }
+ });
}
else
{
+ WsParamSetI preset_;
if (editParams)
{
paramset = worker.getArguments();
- preset = worker.getPreset();
+ preset_ = worker.getPreset();
}
-
- if (!processParams(sh, editParams, true))
+ else
{
- return;
+ preset_ = preset;
}
- // reinstate worker if it was blacklisted (might have happened due to
- // invalid parameters)
- alignFrame.getViewport().getCalcManager().enableWorker(worker);
- worker.updateParameters(this.preset, paramset);
+ processParams(sh, editParams, true).thenAccept((startJob) -> {
+ if (startJob)
+ {
+ // reinstate worker if it was blacklisted (might have happened due
+ // to
+ // invalid parameters)
+ alignFrame.getViewport().getCalcManager().enableWorker(worker);
+ worker.updateParameters(this.preset, paramset);
+ startSeqAnnotationWorker(sh, alignFrame, preset_, editParams);
+ }
+ });
}
}
+ else
+ {
+ startSeqAnnotationWorker(sh, alignFrame, preset, editParams);
+ }
+ }
+
+ private void startSeqAnnotationWorker(ServiceWithParameters sh,
+ AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
+ {
if (!sh.isInteractiveUpdate())
{
// build IUPred style client. take sequences, returns annotation per
// sequence.
- if (!processParams(sh, editParams))
- {
- return;
- }
-
- alignFrame.getViewport().getCalcManager().startWorker(
+ processParams(sh, editParams).thenAccept((startJob) -> {
+ if (startJob)
+ {
+ alignFrame.getViewport().getCalcManager().startWorker(
new SeqAnnotationServiceCalcWorker(sh, alignFrame, preset, paramset));
+ }
+ });
}
}
import jalview.ws.params.ParamManager;
import jalview.ws.params.WsParamSetI;
import uk.ac.dundee.compbio.slivkaclient.FieldType;
+import uk.ac.dundee.compbio.slivkaclient.FileField;
import uk.ac.dundee.compbio.slivkaclient.FormField;
import uk.ac.dundee.compbio.slivkaclient.FormValidationException;
import uk.ac.dundee.compbio.slivkaclient.JobState;
WsParamSetI preset, List<ArgumentI> args) throws Throwable
{
SlivkaForm form = service.getForm();
- Optional<FormField> inputField = form.getFields().stream()
- .filter(f -> f.getType() == FieldType.FILE).findFirst();
- if (inputField.isPresent())
+ for (FormField field : form.getFields())
{
- StringBuilder builder = new StringBuilder();
- for (SequenceI seq : sequences)
+ if (field.getType() == FieldType.FILE)
{
- builder.append(">").append(seq.getName()).append("\n")
- .append(seq.getSequence()).append("\n");
+ FormatAdapter fa = new FormatAdapter();
+ fa.setNewlineString("\r\n");
+ FileField fileField = (FileField) field;
+ FileFormat format;
+ switch (fileField.getMediaType())
+ {
+ case "application/pfam":
+ format = FileFormat.Pfam;
+ break;
+ case "application/stockholm":
+ format = FileFormat.Stockholm;
+ break;
+ default:
+ case "application/fasta":
+ format = FileFormat.Fasta;
+ break;
+ }
+ InputStream stream = new ByteArrayInputStream(
+ fa.formatSequences(format, sequences.toArray(new SequenceI[0]))
+ .getBytes());
+ RemoteFile rf = client.uploadFile(stream, "input",
+ fileField.getMediaType());
+ form.insert(field.getName(), rf);
}
- InputStream stream = new ByteArrayInputStream(
- builder.toString().getBytes());
- RemoteFile file = client.uploadFile(stream, "input.fa",
- "application/fasta");
- form.insert(inputField.get().getName(), file);
}
if (args != null)
{
import jalview.util.MapList;
import jalview.viewmodel.AlignmentViewport;
import jalview.viewmodel.ViewportRanges;
-import jalview.workers.AlignCalcManager;
public class AlignViewportTest
{
{
try
{
- System.out.print(((AlignCalcManager) viewport.getCalcManager()).getQueueLength());
wait(50);
} catch (InterruptedException e)
{
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;
-import jalview.api.AlignCalcManagerI;
import jalview.api.AlignCalcManagerI2;
import jalview.api.AlignCalcWorkerI;
import jalview.api.FeatureRenderer;