1 Clazz.declarePackage ("jalview.datamodel");
2 Clazz.load (["java.util.Vector"], "jalview.datamodel.ColumnSelection", ["jalview.util.ShiftList", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.lang.StringBuffer", "java.util.ArrayList", "$.Collections"], function () {
3 c$ = Clazz.decorateAsClass (function () {
5 this.hiddenColumns = null;
6 Clazz.instantialize (this, arguments);
7 }, jalview.datamodel, "ColumnSelection");
8 Clazz.prepareFields (c$, function () {
9 this.selected = new java.util.Vector ();
11 Clazz.defineMethod (c$, "addElement",
13 var column = new Integer (col);
14 if (!this.selected.contains (column)) {
15 this.selected.addElement (column);
17 Clazz.defineMethod (c$, "clear",
19 this.selected.removeAllElements ();
21 Clazz.defineMethod (c$, "removeElement",
23 var colInt = new Integer (col);
24 if (this.selected.contains (colInt)) {
25 this.selected.removeElement (colInt);
27 Clazz.defineMethod (c$, "removeElements",
28 function (start, end) {
30 for (var i = start; i < end; i++) {
31 colInt = new Integer (i);
32 if (this.selected.contains (colInt)) {
33 this.selected.removeElement (colInt);
36 Clazz.defineMethod (c$, "getSelected",
40 Clazz.defineMethod (c$, "contains",
42 return this.selected.contains ( new Integer (col));
44 Clazz.defineMethod (c$, "columnAt",
46 return this.selected.elementAt (i).intValue ();
48 Clazz.defineMethod (c$, "size",
50 return this.selected.size ();
52 Clazz.defineMethod (c$, "getMax",
55 for (var i = 0; i < this.selected.size (); i++) {
56 if (this.columnAt (i) > max) {
57 max = this.columnAt (i);
61 Clazz.defineMethod (c$, "getMin",
64 for (var i = 0; i < this.selected.size (); i++) {
65 if (this.columnAt (i) < min) {
66 min = this.columnAt (i);
70 Clazz.defineMethod (c$, "compensateForEdit",
71 function (start, change) {
72 var deletedHiddenColumns = null;
73 for (var i = 0; i < this.size (); i++) {
74 var temp = this.columnAt (i);
76 this.selected.setElementAt ( new Integer (temp - change), i);
78 if (this.hiddenColumns != null) {
79 deletedHiddenColumns = new java.util.ArrayList ();
80 var hSize = this.hiddenColumns.size ();
81 for (var i = 0; i < hSize; i++) {
82 var region = this.hiddenColumns.elementAt (i);
83 if (region[0] > start && start + change > region[1]) {
84 deletedHiddenColumns.add (region);
85 this.hiddenColumns.removeElementAt (i);
89 }if (region[0] > start) {
95 this.revealHiddenColumns (0);
96 }return deletedHiddenColumns;
98 Clazz.defineMethod (c$, "compensateForDelEdits",
99 ($fz = function (start, change) {
100 for (var i = 0; i < this.size (); i++) {
101 var temp = this.columnAt (i);
103 this.selected.setElementAt ( new Integer (temp - change), i);
105 if (this.hiddenColumns != null) {
106 for (var i = 0; i < this.hiddenColumns.size (); i++) {
107 var region = this.hiddenColumns.elementAt (i);
108 if (region[0] >= start) {
110 }if (region[1] >= start) {
112 }if (region[1] < region[0]) {
113 this.hiddenColumns.removeElementAt (i--);
114 }if (region[0] < 0) {
116 }if (region[1] < 0) {
119 }}, $fz.isPrivate = true, $fz), "~N,~N");
120 Clazz.defineMethod (c$, "compensateForEdits",
121 function (shiftrecord) {
122 if (shiftrecord != null) {
123 var shifts = shiftrecord.getShifts ();
124 if (shifts != null && shifts.size () > 0) {
126 for (var i = 0, j = shifts.size (); i < j; i++) {
127 var sh = shifts.get (i);
128 this.compensateForDelEdits (shifted + sh[0], sh[1]);
131 }return shiftrecord.getInverse ();
133 }, "jalview.util.ShiftList");
134 Clazz.defineMethod (c$, "pruneIntervalVector",
135 ($fz = function (shifts, intervals) {
138 var j = intervals.size () - 1;
140 var t = shifts.size () - 1;
141 var hr = intervals.elementAt (i);
142 var sr = shifts.get (s);
143 while (i <= j && s <= t) {
144 var trailinghn = hr[1] >= sr[0];
147 hr = intervals.elementAt (++i);
151 }var endshift = sr[0] + sr[1];
152 if (endshift < hr[0] || endshift < sr[0]) {
154 sr = shifts.get (++s);
158 }var leadinghn = hr[0] >= sr[0];
159 var leadinghc = hr[0] < endshift;
160 var trailinghc = hr[1] < endshift;
163 intervals.removeElementAt (i);
167 hr = intervals.elementAt (i);
171 leadinghn = !leadinghn;
180 sr = shifts.get (++s);
186 }, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
187 Clazz.defineMethod (c$, "pruneColumnList",
188 ($fz = function (shifts, list) {
190 var t = shifts.size ();
191 var sr = shifts.get (s++);
194 var j = list.size ();
195 while (i < j && s <= t) {
196 var c = list.elementAt (i++).intValue ();
198 if (sr[1] + sr[0] >= c) {
199 list.removeElementAt (--i);
207 }, $fz.isPrivate = true, $fz), "java.util.List,java.util.Vector");
208 Clazz.defineMethod (c$, "pruneDeletions",
209 function (deletions) {
210 if (deletions != null) {
211 var shifts = deletions.getShifts ();
212 if (shifts != null && shifts.size () > 0) {
213 if (this.hiddenColumns != null) {
214 this.pruneIntervalVector (shifts, this.hiddenColumns);
215 if (this.hiddenColumns != null && this.hiddenColumns.size () == 0) {
216 this.hiddenColumns = null;
217 }}if (this.selected != null && this.selected.size () > 0) {
218 this.pruneColumnList (shifts, this.selected);
219 if (this.selected != null && this.selected.size () == 0) {
220 this.selected = null;
221 }}this.compensateForEdits (deletions);
222 }}}, "jalview.util.ShiftList");
223 Clazz.defineMethod (c$, "getHiddenColumns",
225 return this.hiddenColumns == null ? java.util.Collections.emptyList () : this.hiddenColumns;
227 Clazz.defineMethod (c$, "adjustForHiddenColumns",
230 if (this.hiddenColumns != null) {
231 for (var i = 0; i < this.hiddenColumns.size (); i++) {
232 var region = this.hiddenColumns.elementAt (i);
233 if (result >= region[0]) {
234 result += region[1] - region[0] + 1;
238 Clazz.defineMethod (c$, "findColumnPosition",
239 function (hiddenColumn) {
240 var result = hiddenColumn;
241 if (this.hiddenColumns != null) {
245 region = this.hiddenColumns.elementAt (index++);
246 if (hiddenColumn > region[1]) {
247 result -= region[1] + 1 - region[0];
248 }} while ((hiddenColumn > region[1]) && (index < this.hiddenColumns.size ()));
249 if (hiddenColumn > region[0] && hiddenColumn < region[1]) {
250 return region[0] + hiddenColumn - result;
253 Clazz.defineMethod (c$, "findHiddenRegionPosition",
254 function (hiddenRegion) {
256 if (this.hiddenColumns != null) {
260 var region = this.hiddenColumns.elementAt (index);
261 if (hiddenRegion == 0) {
263 }gaps += region[1] + 1 - region[0];
264 result = region[1] + 1;
266 } while (index < hiddenRegion + 1);
270 Clazz.defineMethod (c$, "getHiddenBoundaryRight",
272 if (this.hiddenColumns != null) {
275 var region = this.hiddenColumns.elementAt (index);
276 if (alPos < region[0]) {
279 } while (index < this.hiddenColumns.size ());
282 Clazz.defineMethod (c$, "getHiddenBoundaryLeft",
284 if (this.hiddenColumns != null) {
285 var index = this.hiddenColumns.size () - 1;
287 var region = this.hiddenColumns.elementAt (index);
288 if (alPos > region[1]) {
291 } while (index > -1);
294 Clazz.defineMethod (c$, "hideSelectedColumns",
296 while (this.size () > 0) {
297 var column = this.getSelected ().firstElement ().intValue ();
298 this.hideColumns (column);
301 Clazz.defineMethod (c$, "hideColumns",
302 function (start, end) {
303 if (this.hiddenColumns == null) {
304 this.hiddenColumns = new java.util.Vector ();
307 for (var i = 0; i < this.hiddenColumns.size (); i++) {
308 var region = this.hiddenColumns.elementAt (i);
309 if (start <= region[1] && end >= region[0]) {
310 this.hiddenColumns.removeElementAt (i);
313 } else if (end < region[0] && start < region[0]) {
314 this.hiddenColumns.insertElementAt ( Clazz.newIntArray (-1, [start, end]), i);
319 this.hideColumns (start, end);
321 this.hiddenColumns.addElement ( Clazz.newIntArray (-1, [start, end]));
323 Clazz.defineMethod (c$, "hideColumns",
327 while (this.contains (min)) {
328 this.removeElement (min);
331 while (this.contains (max)) {
332 this.removeElement (max);
339 }this.hideColumns (min, max);
341 Clazz.defineMethod (c$, "revealAllHiddenColumns",
343 if (this.hiddenColumns != null) {
344 for (var i = 0; i < this.hiddenColumns.size (); i++) {
345 var region = this.hiddenColumns.elementAt (i);
346 for (var j = region[0]; j < region[1] + 1; j++) {
350 }this.hiddenColumns = null;
352 Clazz.defineMethod (c$, "revealHiddenColumns",
354 for (var i = 0; i < this.hiddenColumns.size (); i++) {
355 var region = this.hiddenColumns.elementAt (i);
356 if (res == region[0]) {
357 for (var j = region[0]; j < region[1] + 1; j++) {
360 this.hiddenColumns.removeElement (region);
363 if (this.hiddenColumns.size () == 0) {
364 this.hiddenColumns = null;
366 Clazz.defineMethod (c$, "isVisible",
368 if (this.hiddenColumns != null) {
369 for (var i = 0; i < this.hiddenColumns.size (); i++) {
370 var region = this.hiddenColumns.elementAt (i);
371 if (column >= region[0] && column <= region[1]) {
376 Clazz.makeConstructor (c$,
379 if (copy.selected != null) {
380 this.selected = new java.util.Vector ();
381 for (var i = 0, j = copy.selected.size (); i < j; i++) {
382 this.selected.addElement (copy.selected.elementAt (i));
384 }if (copy.hiddenColumns != null) {
385 this.hiddenColumns = new java.util.Vector (copy.hiddenColumns.size ());
386 for (var i = 0, j = copy.hiddenColumns.size (); i < j; i++) {
389 rh = copy.hiddenColumns.elementAt (i);
391 cp = Clazz.newIntArray (rh.length, 0);
392 System.arraycopy (rh, 0, cp, 0, rh.length);
393 this.hiddenColumns.addElement (cp);
395 }}}, "jalview.datamodel.ColumnSelection");
396 Clazz.makeConstructor (c$,
399 Clazz.defineMethod (c$, "getVisibleSequenceStrings",
400 function (start, end, seqs) {
402 var iSize = seqs.length;
403 var selection = new Array (iSize);
404 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
405 for (i = 0; i < iSize; i++) {
406 var visibleSeq = new StringBuffer ();
407 var regions = this.getHiddenColumns ();
408 var blockStart = start;
413 for (var j = 0; j < regions.size (); j++) {
414 region = regions.get (j);
415 hideStart = region[0];
417 if (hideStart < start) {
419 }blockStart = Math.min (blockStart, hideEnd + 1);
420 blockEnd = Math.min (blockEnd, hideStart);
421 if (blockStart > blockEnd) {
423 }visibleSeq.append (seqs[i].getSequence (blockStart, blockEnd));
424 blockStart = hideEnd + 1;
427 if (end > blockStart) {
428 visibleSeq.append (seqs[i].getSequence (blockStart, end));
429 }selection[i] = visibleSeq.toString ();
432 for (i = 0; i < iSize; i++) {
433 selection[i] = seqs[i].getSequenceAsString (start, end);
437 Clazz.defineMethod (c$, "getVisibleContigs",
438 function (start, end) {
439 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
440 var visiblecontigs = new java.util.ArrayList ();
441 var regions = this.getHiddenColumns ();
446 for (var j = 0; vstart < end && j < regions.size (); j++) {
447 region = regions.get (j);
448 hideStart = region[0];
450 if (hideEnd < vstart) {
452 }if (hideStart > vstart) {
453 visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, hideStart - 1]));
454 }vstart = hideEnd + 1;
457 visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, end - 1]));
458 }var vcontigs = Clazz.newIntArray (visiblecontigs.size () * 2, 0);
459 for (var i = 0, j = visiblecontigs.size (); i < j; i++) {
460 var vc = visiblecontigs.get (i);
461 visiblecontigs.set (i, null);
462 vcontigs[i * 2] = vc[0];
463 vcontigs[i * 2 + 1] = vc[1];
465 visiblecontigs.clear ();
468 return Clazz.newIntArray (-1, [start, end - 1]);
470 Clazz.defineMethod (c$, "makeVisibleAnnotation",
471 function (alignmentAnnotation) {
472 this.makeVisibleAnnotation (-1, -1, alignmentAnnotation);
473 }, "jalview.datamodel.AlignmentAnnotation");
474 Clazz.defineMethod (c$, "makeVisibleAnnotation",
475 function (start, end, alignmentAnnotation) {
476 if (alignmentAnnotation.annotations == null) {
478 }if (start == end && end == -1) {
480 end = alignmentAnnotation.annotations.length;
481 }if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
482 var annels = new java.util.Vector ();
484 var regions = this.getHiddenColumns ();
485 var blockStart = start;
491 for (var j = 0; j < regions.size (); j++) {
492 region = regions.get (j);
493 hideStart = region[0];
495 if (hideStart < start) {
497 }blockStart = Math.min (blockStart, hideEnd + 1);
498 blockEnd = Math.min (blockEnd, hideStart);
499 if (blockStart > blockEnd) {
501 }annels.addElement (els = new Array (blockEnd - blockStart));
502 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
504 blockStart = hideEnd + 1;
507 if (end > blockStart) {
508 annels.addElement (els = new Array (end - blockStart + 1));
509 if ((els.length + blockStart) <= alignmentAnnotation.annotations.length) {
510 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);
512 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, (alignmentAnnotation.annotations.length - blockStart));
516 }alignmentAnnotation.annotations = new Array (w);
518 for (var chnk, $chnk = annels.iterator (); $chnk.hasNext () && ((chnk = $chnk.next ()) || true);) {
519 System.arraycopy (chnk, 0, alignmentAnnotation.annotations, w, chnk.length);
523 alignmentAnnotation.restrict (start, end);
524 }}, "~N,~N,jalview.datamodel.AlignmentAnnotation");
525 Clazz.defineMethod (c$, "invertColumnSelection",
526 function (first, width) {
527 var hasHidden = this.hiddenColumns != null && this.hiddenColumns.size () > 0;
528 for (var i = first; i < width; i++) {
529 if (this.contains (i)) {
530 this.removeElement (i);
532 if (!hasHidden || this.isVisible (i)) {
536 Clazz.defineMethod (c$, "addElementsFrom",
538 if (colsel != null && colsel.size () > 0) {
539 for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
540 if (this.hiddenColumns != null && this.isVisible (col.intValue ())) {
541 if (!this.selected.contains (col)) {
542 this.selected.addElement (col);
544 }}, "jalview.datamodel.ColumnSelection");
545 Clazz.defineMethod (c$, "setElementsFrom",
547 this.selected = new java.util.Vector ();
548 if (colsel.selected != null && colsel.selected.size () > 0) {
549 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {
550 this.addElementsFrom (colsel);
552 for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {
553 this.addElement ((col).intValue ());
555 }}}, "jalview.datamodel.ColumnSelection");
556 c$.propagateInsertions = Clazz.defineMethod (c$, "propagateInsertions",
557 function (profileseq, al, input) {
559 var gc = al.getGapCharacter ();
560 var alandcolsel = input.getAlignmentAndColumnSelection (gc);
561 var nview = alandcolsel[1];
562 var origseq = (alandcolsel[0])[profsqpos];
563 nview.propagateInsertions (profileseq, al, origseq);
565 }, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentView");
566 Clazz.defineMethod (c$, "propagateInsertions",
567 function (profileseq, al, origseq) {
568 var gc = al.getGapCharacter ();
569 this.pruneDeletions (jalview.util.ShiftList.parseMap (origseq.gapMap ()));
570 var viscontigs = this.getVisibleContigs (0, profileseq.getLength ());
573 for (var v = 0; v < viscontigs.length; v += 2) {
574 if (viscontigs[v] > spos) {
575 var sb = new StringBuffer ();
576 for (var s = 0, ns = viscontigs[v] - spos; s < ns; s++) {
579 for (var s = 0, ns = al.getHeight (); s < ns; s++) {
580 var sqobj = al.getSequenceAt (s);
581 if (sqobj !== profileseq) {
582 var sq = al.getSequenceAt (s).getSequenceAsString ();
583 if (sq.length <= spos + offset) {
584 var diff = spos + offset - sq.length - 1;
587 while ((diff = spos + offset - sq.length - 1) > 0) {
588 if (diff >= sb.length ()) {
589 sq += sb.toString ();
591 var buf = Clazz.newCharArray (diff, '\0');
592 sb.getChars (0, diff, buf, 0);
593 sq += buf.toString ();
595 }sq += sb.toString ();
597 al.getSequenceAt (s).setSequence (sq.substring (0, spos + offset) + sb.toString () + sq.substring (spos + offset));
599 }spos = viscontigs[v + 1] + 1;
601 if ((offset + spos) < profileseq.getLength ()) {
602 var sb = new StringBuffer ();
603 for (var s = 0, ns = profileseq.getLength () - spos - offset; s < ns; s++) {
606 for (var s = 0, ns = al.getHeight (); s < ns; s++) {
607 var sqobj = al.getSequenceAt (s);
608 if (sqobj === profileseq) {
610 }var sq = sqobj.getSequenceAsString ();
611 var diff = origseq.getLength () - sq.length;
613 if (diff >= sb.length ()) {
614 sq += sb.toString ();
616 var buf = Clazz.newCharArray (diff, '\0');
617 sb.getChars (0, diff, buf, 0);
618 sq += buf.toString ();
619 }diff = origseq.getLength () - sq.length;
622 }}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");
623 Clazz.defineMethod (c$, "hasSelectedColumns",
625 return (this.selected != null && this.selected.size () > 0);
627 Clazz.defineMethod (c$, "hasHiddenColumns",
629 return this.hiddenColumns != null && this.hiddenColumns.size () > 0;
631 Clazz.defineMethod (c$, "hasManyHiddenColumns",
633 return this.hiddenColumns != null && this.hiddenColumns.size () > 1;
635 Clazz.defineMethod (c$, "hideInsertionsFor",
637 var inserts = sr.getInsertions ();
638 for (var r, $r = inserts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {
639 this.hideColumns (r[0], r[1]);
641 }, "jalview.datamodel.SequenceI");
642 Clazz.defineMethod (c$, "filterAnnotations",
643 function (annotations, filterParams) {
644 this.revealAllHiddenColumns ();
648 if (annotations[count] != null) {
649 var itemMatched = false;
650 if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD && annotations[count].value >= filterParams.getThresholdValue ()) {
652 }if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD && annotations[count].value <= filterParams.getThresholdValue ()) {
654 }if (filterParams.isFilterAlphaHelix () && annotations[count].secondaryStructure == 'H') {
656 }if (filterParams.isFilterBetaSheet () && annotations[count].secondaryStructure == 'E') {
658 }if (filterParams.isFilterTurn () && annotations[count].secondaryStructure == 'S') {
660 }var regexSearchString = filterParams.getRegexString ();
661 if (regexSearchString != null && !filterParams.getRegexSearchFields ().isEmpty ()) {
662 var fields = filterParams.getRegexSearchFields ();
664 if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING) && annotations[count].displayCharacter.matches (regexSearchString)) {
667 if (Clazz.exceptionOf (pse, java.util.regex.PatternSyntaxException)) {
668 if (annotations[count].displayCharacter.equals (regexSearchString)) {
674 if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION) && annotations[count].description != null && annotations[count].description.matches (regexSearchString)) {
677 this.addElement (count);
679 } while (count < annotations.length);
681 }, "~A,jalview.viewmodel.annotationfilter.AnnotationFilterParameter");