+ if (rset.hasAlignments())
+ {
+ if (numAlSets < rset.getAl().size())
+ {
+ numAlSets = rset.getAl().size();
+ }
+ if (als < rset.getAl().size()
+ && rset.getAl().get(als).isModified())
+ {
+ // Collate result data
+ // TODO: decide if all alignmentI should be collected rather than
+ // specific alignment data containers
+ // for moment, we just extract content, but this means any
+ // alignment properties may be lost.
+ AlignmentSet alset = rset.getAl().get(als);
+ alan[j] = alset.al.getAlignmentAnnotation();
+ if (alset.al.getGroups() != null)
+ {
+ sgrp[j] = new SequenceGroup[alset.al.getGroups().size()];
+ alset.al.getGroups().toArray(sgrp[j]);
+ }
+ else
+ {
+ sgrp[j] = null;
+ }
+ orders[j] = new AlignmentOrder(alset.al);
+ rseqs[j] = alset.al.getSequencesArray();
+ ordermap[j] = rj.getOrderMap();
+ // if (rj.isInputUniquified()) {
+ // jalview.analysis.AlignmentSorter.recoverOrder(rseqs[als]);
+ // }
+
+ if (alset.trees != null)
+ {
+ trees.add(new ArrayList<NewickFile>(alset.trees));
+ }
+ else
+ {
+ trees.add(new ArrayList<NewickFile>());
+ }
+ }
+ }
+ }
+ }
+ // Now aggregate and present results from this frame of alignment data.
+ int nvertsep = 0, nvertseps = 1;
+ if (vsepjobs)
+ {
+ // Jobs relate to different rows of input alignment.
+ // Jobs are subdivided by rows before columns,
+ // so there will now be a number of subjobs according tohsep for each
+ // vertsep
+ // TODO: get vertical separation intervals for each job and set
+ // nvertseps
+ // TODO: merge data from each group/sequence onto whole
+ // alignment
+ }
+ /**
+ * index into rest jobs subdivided vertically
+ */
+ int vrestjob = 0;
+ // Destination alignments for all result data.
+ ArrayList<SequenceGroup> visgrps = new ArrayList<SequenceGroup>();
+ Hashtable<String, SequenceGroup> groupNames = new Hashtable<String, SequenceGroup>();
+ ArrayList<AlignmentAnnotation> visAlAn = null;
+ for (nvertsep = 0; nvertsep < nvertseps; nvertsep++)
+ {
+ // TODO: set scope w.r.t. original alignment view for vertical
+ // separation.
+ {
+ // results for a job exclude hidden columns of input data, so map
+ // back on to all visible regions
+ /**
+ * rest job result we are working with
+ */
+ int nrj = vrestjob;
+
+ RestJob rj = (RestJob) jobs[nrj];
+ int contigs[] = input.getVisibleContigs();
+ AlignmentI destAl = null;
+ jalview.datamodel.ColumnSelection destCs = null;
+ // Resolve destAl for this data.
+ if (als == 0 && rj.isInputContextModified())
+ {
+ // special case: transfer features, annotation, groups, etc,
+ // from input
+ // context to align panel derived from input data
+ if (destAls.size() > als)
+ {
+ destAl = destAls.get(als);
+ }
+ else
+ {
+ if (!restClient.isAlignmentModified() && merge)
+ {
+ destAl = restClient.av.getAlignment();
+ destCs = restClient.av.getColumnSelection();
+ resultDest
+ .add(restClient.isShowResultsInNewView() ? AddDataTo.newView
+ : AddDataTo.currentView);
+ destPanels.add(restClient.recoverAlignPanelForView());
+ }
+ else
+ {
+ newAlignment = true;
+ // recreate the input alignment data
+ Object[] idat = input
+ .getAlignmentAndColumnSelection(gapCharacter);
+ destAl = new Alignment((SequenceI[]) idat[0]);
+ destCs = (ColumnSelection) idat[1];
+ resultDest.add(AddDataTo.newAlignment);
+ // but do not add to the alignment panel list - since we need to
+ // create a whole new alignFrame set.
+ }
+ destAls.add(destAl);
+ destColsel.add(destCs);
+ }
+ }
+ else