import jalview.ws2.utils.WSJobList;
/**
+ * Implementation of the {@link Operation} for multiple sequence alignment jobs.
*
* @author mmwarowny
*
private final WebServiceI service;
private final ResultSupplier<AlignmentI> supplier;
-
public AlignmentOperation(
WebServiceI service,
{
return service.getName();
}
-
+
@Override
public String getDescription()
{
{
return service.getHostName();
}
-
+
@Override
public boolean hasParameters()
{
return service.hasParameters();
}
-
+
@Override
public ParamDatastoreI getParamStore()
{
{
return true;
}
-
+
@Override
public boolean isAlignmentAnalysis()
{
{
return false;
}
-
+
@Override
public boolean getFilterNonStandardSymbols()
{
return true;
}
-
+
@Override
public boolean getNeedsAlignedSequences()
{
return new AlignmentMenuBuilder(this);
}
-
/**
* Implementation of the web service worker performing multiple sequence
* alignment.
private Map<Long, JobInput> inputs = new LinkedHashMap<>();
private Map<Long, Integer> exceptionCount = new HashMap<>();
-
+
private final int MAX_RETRY = 5;
public AlignmentWorker(AlignmentView msa, List<ArgumentI> args,
- String alnTitle, boolean submitGaps, boolean preserveOrder,
- AlignViewport viewport)
+ String alnTitle, boolean submitGaps, boolean preserveOrder,
+ AlignViewport viewport)
{
this.msa = msa;
this.dataset = viewport.getAlignment().getDataset();
{
JobInput input = JobInput.create(conmsa[i], 2, submitGaps);
WSJob job = new WSJob(service.getProviderName(), service.getName(),
- service.getHostName());
+ service.getHostName());
job.setJobNum(i);
inputs.put(job.getUid(), input);
jobs.add(job);
{
job.setStatus(WSJobStatus.INVALID);
job.setErrorLog(
- MessageManager.getString("label.empty_alignment_job"));
+ MessageManager.getString("label.empty_alignment_job"));
}
}
if (numValid > 0)
Cache.log.error(format("Polling job %s failed.", job), e);
listeners.firePollException(job, e);
int count = exceptionCount.getOrDefault(job.getUid(),
- MAX_RETRY);
+ MAX_RETRY);
if (--count <= 0)
{
job.setStatus(WSJobStatus.SERVER_ERROR);
Cache.log.warn(format(
- "Attempts limit exceeded. Droping job %s.", job));
+ "Attempts limit exceeded. Droping job %s.", job));
}
exceptionCount.put(job.getUid(), count);
} catch (OutOfMemoryError e)
{
job.setStatus(WSJobStatus.BROKEN);
Cache.log.error(
- format("Out of memory when retrieving job %s", job), e);
+ format("Out of memory when retrieving job %s", job), e);
}
Cache.log.debug(
- format("Job %s status is %s", job, job.getStatus()));
+ format("Job %s status is %s", job, job.getStatus()));
}
done &= job.getStatus().isDone() || job.getStatus().isFailed();
}
return done;
}
-
@Override
public void done()
{
continue;
try
{
- AlignmentI alignment = supplier.getResult(job,
+ AlignmentI alignment = supplier.getResult(job,
dataset.getSequences(), viewport);
if (alignment != null)
{
width = Integer.max(width, emptySeq.getLength());
// pad shorter sequences with gaps
String gapSeq = String.join("",
- Collections.nCopies(width, Character.toString(gapChar)));
+ Collections.nCopies(width, Character.toString(gapChar)));
List<SequenceI> seqs = new ArrayList<>(
- alnSeqs.size() + emptySeqs.size());
+ alnSeqs.size() + emptySeqs.size());
seqs.addAll(alnSeqs);
seqs.addAll(emptySeqs);
for (var seq : seqs)
{
if (seq.getLength() < width)
seq.setSequence(seq.getSequenceAsString()
- + gapSeq.substring(seq.getLength()));
+ + gapSeq.substring(seq.getLength()));
}
SequenceI[] result = seqs.toArray(new SequenceI[0]);
AlignmentOrder msaOrder = new AlignmentOrder(result);
}
}
}
-
+
private Consumer<AlignmentResult> resultConsumer;
-
+
public void setResultConsumer(Consumer<AlignmentResult> consumer)
{
this.resultConsumer = consumer;
}
- private WebServiceWorkerListenersList listeners =
- new WebServiceWorkerListenersList(this);
-
+ private WebServiceWorkerListenersList listeners = new WebServiceWorkerListenersList(this);
+
@Override
public void addListener(WebServiceWorkerListener listener)
{
listeners.addListener(listener);
}
}
-
+
public class AlignmentResult
{
AlignmentI aln;
HiddenColumns hidden;
AlignmentResult(AlignmentI aln, List<AlignmentOrder> alorders,
- HiddenColumns hidden)
+ HiddenColumns hidden)
{
this.aln = aln;
this.alorders = alorders;
final Map<String, ? extends Map> sequenceNames;
private JobInput(int numSequences, List<SequenceI> inputSequences,
- List<SequenceI> emptySequences,
- @SuppressWarnings("rawtypes") Map<String, ? extends Map> names)
+ List<SequenceI> emptySequences,
+ @SuppressWarnings("rawtypes") Map<String, ? extends Map> names)
{
this.inputSequences = Collections.unmodifiableList(inputSequences);
this.emptySequences = Collections.unmodifiableList(emptySequences);
}
static JobInput create(SequenceI[] sequences, int minLength,
- boolean submitGaps)
+ boolean submitGaps)
{
assert minLength >= 0 : MessageManager.getString(
- "error.implementation_error_minlen_must_be_greater_zero");
+ "error.implementation_error_minlen_must_be_greater_zero");
int numSeq = 0;
for (SequenceI seq : sequences)
{
if (!submitGaps)
{
seqString = AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars, seqString);
+ jalview.util.Comparison.GapChars, seqString);
}
inputSequences.add(new Sequence(newName, seqString));
}
else
{
String seqString = "";
- if (seq.getEnd() >= seq.getStart()) // true if gaps only
+ if (seq.getEnd() >= seq.getStart()) // true if gaps only
{
seqString = seq.getSequenceAsString();
if (!submitGaps)
{
seqString = AlignSeq.extractGaps(
- jalview.util.Comparison.GapChars, seqString);
+ jalview.util.Comparison.GapChars, seqString);
}
}
emptySequences.add(new Sequence(newName, seqString));