import jalview.datamodel.Sequence;
import jalview.gui.AlignFrame;
import jalview.gui.AlignViewport;
+import jalview.gui.Desktop;
import jalview.gui.JvSwingUtils;
import jalview.gui.WebserviceInfo;
import jalview.gui.WsJobParameters;
}
@Override
+ public String getName()
+ {
+ return service.getName();
+ }
+
+ @Override
+ public String getTypeName()
+ {
+ return "Multiple Sequence Alignment";
+ }
+
+ @Override
+ public String getHostName()
+ {
+ return service.getHostName();
+ }
+
+ @Override
public int getMinSequences()
{
return 2;
}
@Override
+ public boolean isInteractive()
+ {
+ return false;
+ }
+
+ @Override
public MenuEntryProviderI getMenuBuilder()
{
return this::buildMenu;
final String action = submitGaps ? "Align" : "Realign";
final var calcName = service.getName();
- final AlignmentView msa = frame.gatherSequencesForAlignment();
- final AlignViewport viewport = frame.getViewport();
- final AlignmentI alignment = frame.getViewport().getAlignment();
String title = frame.getTitle();
WebServiceExecutor executor = frame.getViewport().getWSExecutor();
{
item.setToolTipText(MessageManager
.formatMessage("label.action_with_default_settings", action));
item.addActionListener((event) -> {
+ final AlignmentView msa = frame.gatherSequencesForAlignment();
+ final AlignViewport viewport = frame.getViewport();
+ final AlignmentI alignment = frame.getViewport().getAlignment();
if (msa != null)
{
WebServiceWorkerI worker = new AlignmentWorker(msa,
- Collections.emptyList(), title, submitGaps, true,
- alignment, viewport);
+ Collections.emptyList(), title, submitGaps, true,
+ alignment, viewport);
executor.submit(worker);
}
});
item.setToolTipText(MessageManager.getString(
"label.view_and_change_parameters_before_alignment"));
item.addActionListener((event) -> {
+ final AlignmentView msa = frame.gatherSequencesForAlignment();
+ final AlignViewport viewport = frame.getViewport();
+ final AlignmentI alignment = frame.getViewport().getAlignment();
if (msa != null)
{
openEditParamsDialog(service, null, null)
- .thenAcceptAsync((arguments) -> {
- if (arguments != null)
- {
- WebServiceWorkerI worker = new AlignmentWorker(msa,
- arguments, title, submitGaps, true, alignment,
- viewport);
- executor.submit(worker);
- }
- });
+ .thenAcceptAsync((arguments) -> {
+ if (arguments != null)
+ {
+ WebServiceWorkerI worker = new AlignmentWorker(msa,
+ arguments, title, submitGaps, true, alignment,
+ viewport);
+ executor.submit(worker);
+ }
+ });
}
});
parent.add(item);
preset.getDescription()));
item.setToolTipText(tooltip);
item.addActionListener((event) -> {
+ final AlignmentView msa = frame.gatherSequencesForAlignment();
+ final AlignViewport viewport = frame.getViewport();
+ final AlignmentI alignment = frame.getViewport().getAlignment();
if (msa != null)
{
WebServiceWorkerI worker = new AlignmentWorker(msa,
- preset.getArguments(), title, submitGaps, true,
- alignment, viewport);
+ preset.getArguments(), title, submitGaps, true,
+ alignment, viewport);
executor.submit(worker);
}
});
Map<Long, AlignmentI> results = new LinkedHashMap<>();
for (WSJob job : getJobs())
{
+ if (job.getStatus().isFailed())
+ continue;
try
{
AlignmentI alignment = supplier.getResult(job);
updateWSInfoGlobalStatus();
if (results.size() > 0)
{
- wsInfo.showResultsNewFrame
- .addActionListener(evt -> displayResults(results));
+ OutputWrapper out = prepareOutput(results);
+ wsInfo.showResultsNewFrame.addActionListener(evt -> displayNewFrame(
+ new Alignment(out.aln), out.alorders, out.hidden));
wsInfo.setResultsReady();
}
else
wsInfo.removeProgressBar(progbarId);
}
- private void displayResults(Map<Long, AlignmentI> alignments)
+ private class OutputWrapper
+ {
+ AlignmentI aln;
+
+ List<AlignmentOrder> alorders;
+
+ HiddenColumns hidden;
+
+ OutputWrapper(AlignmentI aln, List<AlignmentOrder> alorders,
+ HiddenColumns hidden)
+ {
+ this.aln = aln;
+ this.alorders = alorders;
+ this.hidden = hidden;
+ }
+ }
+
+ private OutputWrapper prepareOutput(Map<Long, AlignmentI> alignments)
{
List<AlignmentOrder> alorders = new ArrayList<>();
SequenceI[][] results = new SequenceI[jobs.size()][];
{
WSJob job = jobs.get(i);
AlignmentI aln = alignments.get(job.getUid());
- if (aln != null)
- { // equivalent of job.hasResults()
+ if (aln != null) // equivalent of job.hasResults()
+ {
/* Get the alignment including any empty sequences in the original
* order with original ids. */
JobInput input = inputs.get(job.getUid());
// temporary workaround for deuniquify
@SuppressWarnings({ "rawtypes", "unchecked" })
Hashtable names = new Hashtable(input.sequenceNames);
+ // FIXME first call to deuniquify alters original alignment
SeqsetUtils.deuniquify(names, result);
alorders.add(msaOrder);
results[i] = result;
aln.setDataset(dataset);
propagateDatasetMappings(aln);
-
- displayNewFrame(aln, alorders, hidden);
+ return new OutputWrapper(aln, alorders, hidden);
+ // displayNewFrame(aln, alorders, hidden);
}
- /*
+ /*
* conserves dataset references to sequence objects returned from web
- * services. propagate codon frame data to alignment.
+ * services. propagate codon frame data to alignment.
*/
private void propagateDatasetMappings(Alignment aln)
{
* If alignment was requested from one half of a SplitFrame, show in a
* SplitFrame with the other pane similarly aligned.
*/
+
+ Desktop.addInternalFrame(frame, alnTitle, AlignFrame.DEFAULT_WIDTH,
+ AlignFrame.DEFAULT_HEIGHT);
}
private List<List<Integer>> sortOrders(List<?> alorders)
}
else
{
- String seqString = null;
- if (seq.getEnd() >= seq.getStart()) // is it ever false?
+ String seqString = "";
+ if (seq.getEnd() >= seq.getStart()) // true if gaps only
{
seqString = seq.getSequenceAsString();
if (!submitGaps)