JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / datamodel / ColumnSelection.js
1 Clazz.declarePackage ("jalview.datamodel");\r
2 Clazz.load (["java.util.Vector"], "jalview.datamodel.ColumnSelection", ["jalview.util.ShiftList", "jalview.viewmodel.annotationfilter.AnnotationFilterParameter", "java.lang.StringBuffer", "java.util.ArrayList", "$.Collections"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.selected = null;\r
5 this.hiddenColumns = null;\r
6 Clazz.instantialize (this, arguments);\r
7 }, jalview.datamodel, "ColumnSelection");\r
8 Clazz.prepareFields (c$, function () {\r
9 this.selected =  new java.util.Vector ();\r
10 });\r
11 Clazz.defineMethod (c$, "addElement", \r
12 function (col) {\r
13 var column =  new Integer (col);\r
14 if (!this.selected.contains (column)) {\r
15 this.selected.addElement (column);\r
16 }}, "~N");\r
17 Clazz.defineMethod (c$, "clear", \r
18 function () {\r
19 this.selected.removeAllElements ();\r
20 });\r
21 Clazz.defineMethod (c$, "removeElement", \r
22 function (col) {\r
23 var colInt =  new Integer (col);\r
24 if (this.selected.contains (colInt)) {\r
25 this.selected.removeElement (colInt);\r
26 }}, "~N");\r
27 Clazz.defineMethod (c$, "removeElements", \r
28 function (start, end) {\r
29 var colInt;\r
30 for (var i = start; i < end; i++) {\r
31 colInt =  new Integer (i);\r
32 if (this.selected.contains (colInt)) {\r
33 this.selected.removeElement (colInt);\r
34 }}\r
35 }, "~N,~N");\r
36 Clazz.defineMethod (c$, "getSelected", \r
37 function () {\r
38 return this.selected;\r
39 });\r
40 Clazz.defineMethod (c$, "contains", \r
41 function (col) {\r
42 return this.selected.contains ( new Integer (col));\r
43 }, "~N");\r
44 Clazz.defineMethod (c$, "columnAt", \r
45 function (i) {\r
46 return this.selected.elementAt (i).intValue ();\r
47 }, "~N");\r
48 Clazz.defineMethod (c$, "size", \r
49 function () {\r
50 return this.selected.size ();\r
51 });\r
52 Clazz.defineMethod (c$, "getMax", \r
53 function () {\r
54 var max = -1;\r
55 for (var i = 0; i < this.selected.size (); i++) {\r
56 if (this.columnAt (i) > max) {\r
57 max = this.columnAt (i);\r
58 }}\r
59 return max;\r
60 });\r
61 Clazz.defineMethod (c$, "getMin", \r
62 function () {\r
63 var min = 1000000000;\r
64 for (var i = 0; i < this.selected.size (); i++) {\r
65 if (this.columnAt (i) < min) {\r
66 min = this.columnAt (i);\r
67 }}\r
68 return min;\r
69 });\r
70 Clazz.defineMethod (c$, "compensateForEdit", \r
71 function (start, change) {\r
72 var deletedHiddenColumns = null;\r
73 for (var i = 0; i < this.size (); i++) {\r
74 var temp = this.columnAt (i);\r
75 if (temp >= start) {\r
76 this.selected.setElementAt ( new Integer (temp - change), i);\r
77 }}\r
78 if (this.hiddenColumns != null) {\r
79 deletedHiddenColumns =  new java.util.ArrayList ();\r
80 var hSize = this.hiddenColumns.size ();\r
81 for (var i = 0; i < hSize; i++) {\r
82 var region = this.hiddenColumns.elementAt (i);\r
83 if (region[0] > start && start + change > region[1]) {\r
84 deletedHiddenColumns.add (region);\r
85 this.hiddenColumns.removeElementAt (i);\r
86 i--;\r
87 hSize--;\r
88 continue;\r
89 }if (region[0] > start) {\r
90 region[0] -= change;\r
91 region[1] -= change;\r
92 }if (region[0] < 0) {\r
93 region[0] = 0;\r
94 }}\r
95 this.revealHiddenColumns (0);\r
96 }return deletedHiddenColumns;\r
97 }, "~N,~N");\r
98 Clazz.defineMethod (c$, "compensateForDelEdits", \r
99  function (start, change) {\r
100 for (var i = 0; i < this.size (); i++) {\r
101 var temp = this.columnAt (i);\r
102 if (temp >= start) {\r
103 this.selected.setElementAt ( new Integer (temp - change), i);\r
104 }}\r
105 if (this.hiddenColumns != null) {\r
106 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
107 var region = this.hiddenColumns.elementAt (i);\r
108 if (region[0] >= start) {\r
109 region[0] -= change;\r
110 }if (region[1] >= start) {\r
111 region[1] -= change;\r
112 }if (region[1] < region[0]) {\r
113 this.hiddenColumns.removeElementAt (i--);\r
114 }if (region[0] < 0) {\r
115 region[0] = 0;\r
116 }if (region[1] < 0) {\r
117 region[1] = 0;\r
118 }}\r
119 }}, "~N,~N");\r
120 Clazz.defineMethod (c$, "compensateForEdits", \r
121 function (shiftrecord) {\r
122 if (shiftrecord != null) {\r
123 var shifts = shiftrecord.getShifts ();\r
124 if (shifts != null && shifts.size () > 0) {\r
125 var shifted = 0;\r
126 for (var i = 0, j = shifts.size (); i < j; i++) {\r
127 var sh = shifts.get (i);\r
128 this.compensateForDelEdits (shifted + sh[0], sh[1]);\r
129 shifted -= sh[1];\r
130 }\r
131 }return shiftrecord.getInverse ();\r
132 }return null;\r
133 }, "jalview.util.ShiftList");\r
134 Clazz.defineMethod (c$, "pruneIntervalVector", \r
135  function (shifts, intervals) {\r
136 var pruned = false;\r
137 var i = 0;\r
138 var j = intervals.size () - 1;\r
139 var s = 0;\r
140 var t = shifts.size () - 1;\r
141 var hr = intervals.elementAt (i);\r
142 var sr = shifts.get (s);\r
143 while (i <= j && s <= t) {\r
144 var trailinghn = hr[1] >= sr[0];\r
145 if (!trailinghn) {\r
146 if (i < j) {\r
147 hr = intervals.elementAt (++i);\r
148 } else {\r
149 i++;\r
150 }continue;\r
151 }var endshift = sr[0] + sr[1];\r
152 if (endshift < hr[0] || endshift < sr[0]) {\r
153 if (s < t) {\r
154 sr = shifts.get (++s);\r
155 } else {\r
156 s++;\r
157 }continue;\r
158 }var leadinghn = hr[0] >= sr[0];\r
159 var leadinghc = hr[0] < endshift;\r
160 var trailinghc = hr[1] < endshift;\r
161 if (leadinghn) {\r
162 if (trailinghc) {\r
163 intervals.removeElementAt (i);\r
164 pruned = true;\r
165 j--;\r
166 if (i <= j) {\r
167 hr = intervals.elementAt (i);\r
168 }continue;\r
169 }if (leadinghc) {\r
170 hr[0] = endshift;\r
171 leadinghn = !leadinghn;\r
172 pruned = true;\r
173 }}if (!leadinghn) {\r
174 if (trailinghc) {\r
175 if (trailinghn) {\r
176 hr[1] = sr[0] - 1;\r
177 pruned = true;\r
178 }} else {\r
179 if (s < t) {\r
180 sr = shifts.get (++s);\r
181 } else {\r
182 s++;\r
183 }continue;\r
184 }}}\r
185 return pruned;\r
186 }, "java.util.List,java.util.Vector");\r
187 Clazz.defineMethod (c$, "pruneColumnList", \r
188  function (shifts, list) {\r
189 var s = 0;\r
190 var t = shifts.size ();\r
191 var sr = shifts.get (s++);\r
192 var pruned = false;\r
193 var i = 0;\r
194 var j = list.size ();\r
195 while (i < j && s <= t) {\r
196 var c = list.elementAt (i++).intValue ();\r
197 if (sr[0] <= c) {\r
198 if (sr[1] + sr[0] >= c) {\r
199 list.removeElementAt (--i);\r
200 j--;\r
201 } else {\r
202 if (s < t) {\r
203 sr = shifts.get (s);\r
204 }s++;\r
205 }}}\r
206 return pruned;\r
207 }, "java.util.List,java.util.Vector");\r
208 Clazz.defineMethod (c$, "pruneDeletions", \r
209 function (deletions) {\r
210 if (deletions != null) {\r
211 var shifts = deletions.getShifts ();\r
212 if (shifts != null && shifts.size () > 0) {\r
213 if (this.hiddenColumns != null) {\r
214 this.pruneIntervalVector (shifts, this.hiddenColumns);\r
215 if (this.hiddenColumns != null && this.hiddenColumns.size () == 0) {\r
216 this.hiddenColumns = null;\r
217 }}if (this.selected != null && this.selected.size () > 0) {\r
218 this.pruneColumnList (shifts, this.selected);\r
219 if (this.selected != null && this.selected.size () == 0) {\r
220 this.selected = null;\r
221 }}this.compensateForEdits (deletions);\r
222 }}}, "jalview.util.ShiftList");\r
223 Clazz.defineMethod (c$, "getHiddenColumns", \r
224 function () {\r
225 return this.hiddenColumns == null ? java.util.Collections.emptyList () : this.hiddenColumns;\r
226 });\r
227 Clazz.defineMethod (c$, "adjustForHiddenColumns", \r
228 function (column) {\r
229 var result = column;\r
230 if (this.hiddenColumns != null) {\r
231 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
232 var region = this.hiddenColumns.elementAt (i);\r
233 if (result >= region[0]) {\r
234 result += region[1] - region[0] + 1;\r
235 }}\r
236 }return result;\r
237 }, "~N");\r
238 Clazz.defineMethod (c$, "findColumnPosition", \r
239 function (hiddenColumn) {\r
240 var result = hiddenColumn;\r
241 if (this.hiddenColumns != null) {\r
242 var index = 0;\r
243 var region;\r
244 do {\r
245 region = this.hiddenColumns.elementAt (index++);\r
246 if (hiddenColumn > region[1]) {\r
247 result -= region[1] + 1 - region[0];\r
248 }} while ((hiddenColumn > region[1]) && (index < this.hiddenColumns.size ()));\r
249 if (hiddenColumn > region[0] && hiddenColumn < region[1]) {\r
250 return region[0] + hiddenColumn - result;\r
251 }}return result;\r
252 }, "~N");\r
253 Clazz.defineMethod (c$, "findHiddenRegionPosition", \r
254 function (hiddenRegion) {\r
255 var result = 0;\r
256 if (this.hiddenColumns != null) {\r
257 var index = 0;\r
258 var gaps = 0;\r
259 do {\r
260 var region = this.hiddenColumns.elementAt (index);\r
261 if (hiddenRegion == 0) {\r
262 return region[0];\r
263 }gaps += region[1] + 1 - region[0];\r
264 result = region[1] + 1;\r
265 index++;\r
266 } while (index < hiddenRegion + 1);\r
267 result -= gaps;\r
268 }return result;\r
269 }, "~N");\r
270 Clazz.defineMethod (c$, "getHiddenBoundaryRight", \r
271 function (alPos) {\r
272 if (this.hiddenColumns != null) {\r
273 var index = 0;\r
274 do {\r
275 var region = this.hiddenColumns.elementAt (index);\r
276 if (alPos < region[0]) {\r
277 return region[0];\r
278 }index++;\r
279 } while (index < this.hiddenColumns.size ());\r
280 }return alPos;\r
281 }, "~N");\r
282 Clazz.defineMethod (c$, "getHiddenBoundaryLeft", \r
283 function (alPos) {\r
284 if (this.hiddenColumns != null) {\r
285 var index = this.hiddenColumns.size () - 1;\r
286 do {\r
287 var region = this.hiddenColumns.elementAt (index);\r
288 if (alPos > region[1]) {\r
289 return region[1];\r
290 }index--;\r
291 } while (index > -1);\r
292 }return alPos;\r
293 }, "~N");\r
294 Clazz.defineMethod (c$, "hideSelectedColumns", \r
295 function () {\r
296 while (this.size () > 0) {\r
297 var column = this.getSelected ().firstElement ().intValue ();\r
298 this.hideColumns (column);\r
299 }\r
300 });\r
301 Clazz.defineMethod (c$, "hideColumns", \r
302 function (start, end) {\r
303 if (this.hiddenColumns == null) {\r
304 this.hiddenColumns =  new java.util.Vector ();\r
305 }var added = false;\r
306 var overlap = false;\r
307 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
308 var region = this.hiddenColumns.elementAt (i);\r
309 if (start <= region[1] && end >= region[0]) {\r
310 this.hiddenColumns.removeElementAt (i);\r
311 overlap = true;\r
312 break;\r
313 } else if (end < region[0] && start < region[0]) {\r
314 this.hiddenColumns.insertElementAt ( Clazz.newIntArray (-1, [start, end]), i);\r
315 added = true;\r
316 break;\r
317 }}\r
318 if (overlap) {\r
319 this.hideColumns (start, end);\r
320 } else if (!added) {\r
321 this.hiddenColumns.addElement ( Clazz.newIntArray (-1, [start, end]));\r
322 }}, "~N,~N");\r
323 Clazz.defineMethod (c$, "hideColumns", \r
324 function (col) {\r
325 var min = col;\r
326 var max = col + 1;\r
327 while (this.contains (min)) {\r
328 this.removeElement (min);\r
329 min--;\r
330 }\r
331 while (this.contains (max)) {\r
332 this.removeElement (max);\r
333 max++;\r
334 }\r
335 min++;\r
336 max--;\r
337 if (min > max) {\r
338 min = max;\r
339 }this.hideColumns (min, max);\r
340 }, "~N");\r
341 Clazz.defineMethod (c$, "revealAllHiddenColumns", \r
342 function () {\r
343 if (this.hiddenColumns != null) {\r
344 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
345 var region = this.hiddenColumns.elementAt (i);\r
346 for (var j = region[0]; j < region[1] + 1; j++) {\r
347 this.addElement (j);\r
348 }\r
349 }\r
350 }this.hiddenColumns = null;\r
351 });\r
352 Clazz.defineMethod (c$, "revealHiddenColumns", \r
353 function (res) {\r
354 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
355 var region = this.hiddenColumns.elementAt (i);\r
356 if (res == region[0]) {\r
357 for (var j = region[0]; j < region[1] + 1; j++) {\r
358 this.addElement (j);\r
359 }\r
360 this.hiddenColumns.removeElement (region);\r
361 break;\r
362 }}\r
363 if (this.hiddenColumns.size () == 0) {\r
364 this.hiddenColumns = null;\r
365 }}, "~N");\r
366 Clazz.defineMethod (c$, "isVisible", \r
367 function (column) {\r
368 if (this.hiddenColumns != null) {\r
369 for (var i = 0; i < this.hiddenColumns.size (); i++) {\r
370 var region = this.hiddenColumns.elementAt (i);\r
371 if (column >= region[0] && column <= region[1]) {\r
372 return false;\r
373 }}\r
374 }return true;\r
375 }, "~N");\r
376 Clazz.makeConstructor (c$, \r
377 function (copy) {\r
378 if (copy != null) {\r
379 if (copy.selected != null) {\r
380 this.selected =  new java.util.Vector ();\r
381 for (var i = 0, j = copy.selected.size (); i < j; i++) {\r
382 this.selected.addElement (copy.selected.elementAt (i));\r
383 }\r
384 }if (copy.hiddenColumns != null) {\r
385 this.hiddenColumns =  new java.util.Vector (copy.hiddenColumns.size ());\r
386 for (var i = 0, j = copy.hiddenColumns.size (); i < j; i++) {\r
387 var rh;\r
388 var cp;\r
389 rh = copy.hiddenColumns.elementAt (i);\r
390 if (rh != null) {\r
391 cp =  Clazz.newIntArray (rh.length, 0);\r
392 System.arraycopy (rh, 0, cp, 0, rh.length);\r
393 this.hiddenColumns.addElement (cp);\r
394 }}\r
395 }}}, "jalview.datamodel.ColumnSelection");\r
396 Clazz.makeConstructor (c$, \r
397 function () {\r
398 });\r
399 Clazz.defineMethod (c$, "getVisibleSequenceStrings", \r
400 function (start, end, seqs) {\r
401 var i;\r
402 var iSize = seqs.length;\r
403 var selection =  new Array (iSize);\r
404 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {\r
405 for (i = 0; i < iSize; i++) {\r
406 var visibleSeq =  new StringBuffer ();\r
407 var regions = this.getHiddenColumns ();\r
408 var blockStart = start;\r
409 var blockEnd = end;\r
410 var region;\r
411 var hideStart;\r
412 var hideEnd;\r
413 for (var j = 0; j < regions.size (); j++) {\r
414 region = regions.get (j);\r
415 hideStart = region[0];\r
416 hideEnd = region[1];\r
417 if (hideStart < start) {\r
418 continue;\r
419 }blockStart = Math.min (blockStart, hideEnd + 1);\r
420 blockEnd = Math.min (blockEnd, hideStart);\r
421 if (blockStart > blockEnd) {\r
422 break;\r
423 }visibleSeq.append (seqs[i].getSequence (blockStart, blockEnd));\r
424 blockStart = hideEnd + 1;\r
425 blockEnd = end;\r
426 }\r
427 if (end > blockStart) {\r
428 visibleSeq.append (seqs[i].getSequence (blockStart, end));\r
429 }selection[i] = visibleSeq.toString ();\r
430 }\r
431 } else {\r
432 for (i = 0; i < iSize; i++) {\r
433 selection[i] = seqs[i].getSequenceAsString (start, end);\r
434 }\r
435 }return selection;\r
436 }, "~N,~N,~A");\r
437 Clazz.defineMethod (c$, "getVisibleContigs", \r
438 function (start, end) {\r
439 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {\r
440 var visiblecontigs =  new java.util.ArrayList ();\r
441 var regions = this.getHiddenColumns ();\r
442 var vstart = start;\r
443 var region;\r
444 var hideStart;\r
445 var hideEnd;\r
446 for (var j = 0; vstart < end && j < regions.size (); j++) {\r
447 region = regions.get (j);\r
448 hideStart = region[0];\r
449 hideEnd = region[1];\r
450 if (hideEnd < vstart) {\r
451 continue;\r
452 }if (hideStart > vstart) {\r
453 visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, hideStart - 1]));\r
454 }vstart = hideEnd + 1;\r
455 }\r
456 if (vstart < end) {\r
457 visiblecontigs.add ( Clazz.newIntArray (-1, [vstart, end - 1]));\r
458 }var vcontigs =  Clazz.newIntArray (visiblecontigs.size () * 2, 0);\r
459 for (var i = 0, j = visiblecontigs.size (); i < j; i++) {\r
460 var vc = visiblecontigs.get (i);\r
461 visiblecontigs.set (i, null);\r
462 vcontigs[i * 2] = vc[0];\r
463 vcontigs[i * 2 + 1] = vc[1];\r
464 }\r
465 visiblecontigs.clear ();\r
466 return vcontigs;\r
467 } else {\r
468 return  Clazz.newIntArray (-1, [start, end - 1]);\r
469 }}, "~N,~N");\r
470 Clazz.defineMethod (c$, "makeVisibleAnnotation", \r
471 function (alignmentAnnotation) {\r
472 this.makeVisibleAnnotation (-1, -1, alignmentAnnotation);\r
473 }, "jalview.datamodel.AlignmentAnnotation");\r
474 Clazz.defineMethod (c$, "makeVisibleAnnotation", \r
475 function (start, end, alignmentAnnotation) {\r
476 if (alignmentAnnotation.annotations == null) {\r
477 return;\r
478 }if (start == end && end == -1) {\r
479 start = 0;\r
480 end = alignmentAnnotation.annotations.length;\r
481 }if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {\r
482 var annels =  new java.util.Vector ();\r
483 var els = null;\r
484 var regions = this.getHiddenColumns ();\r
485 var blockStart = start;\r
486 var blockEnd = end;\r
487 var region;\r
488 var hideStart;\r
489 var hideEnd;\r
490 var w = 0;\r
491 for (var j = 0; j < regions.size (); j++) {\r
492 region = regions.get (j);\r
493 hideStart = region[0];\r
494 hideEnd = region[1];\r
495 if (hideStart < start) {\r
496 continue;\r
497 }blockStart = Math.min (blockStart, hideEnd + 1);\r
498 blockEnd = Math.min (blockEnd, hideStart);\r
499 if (blockStart > blockEnd) {\r
500 break;\r
501 }annels.addElement (els =  new Array (blockEnd - blockStart));\r
502 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);\r
503 w += els.length;\r
504 blockStart = hideEnd + 1;\r
505 blockEnd = end;\r
506 }\r
507 if (end > blockStart) {\r
508 annels.addElement (els =  new Array (end - blockStart + 1));\r
509 if ((els.length + blockStart) <= alignmentAnnotation.annotations.length) {\r
510 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, els.length);\r
511 } else {\r
512 System.arraycopy (alignmentAnnotation.annotations, blockStart, els, 0, (alignmentAnnotation.annotations.length - blockStart));\r
513 }w += els.length;\r
514 }if (w == 0) {\r
515 return;\r
516 }alignmentAnnotation.annotations =  new Array (w);\r
517 w = 0;\r
518 for (var chnk, $chnk = annels.iterator (); $chnk.hasNext () && ((chnk = $chnk.next ()) || true);) {\r
519 System.arraycopy (chnk, 0, alignmentAnnotation.annotations, w, chnk.length);\r
520 w += chnk.length;\r
521 }\r
522 } else {\r
523 alignmentAnnotation.restrict (start, end);\r
524 }}, "~N,~N,jalview.datamodel.AlignmentAnnotation");\r
525 Clazz.defineMethod (c$, "invertColumnSelection", \r
526 function (first, width) {\r
527 var hasHidden = this.hiddenColumns != null && this.hiddenColumns.size () > 0;\r
528 for (var i = first; i < width; i++) {\r
529 if (this.contains (i)) {\r
530 this.removeElement (i);\r
531 } else {\r
532 if (!hasHidden || this.isVisible (i)) {\r
533 this.addElement (i);\r
534 }}}\r
535 }, "~N,~N");\r
536 Clazz.defineMethod (c$, "addElementsFrom", \r
537 function (colsel) {\r
538 if (colsel != null && colsel.size () > 0) {\r
539 for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {\r
540 if (this.hiddenColumns != null && this.isVisible (col.intValue ())) {\r
541 if (!this.selected.contains (col)) {\r
542 this.selected.addElement (col);\r
543 }}}\r
544 }}, "jalview.datamodel.ColumnSelection");\r
545 Clazz.defineMethod (c$, "setElementsFrom", \r
546 function (colsel) {\r
547 this.selected =  new java.util.Vector ();\r
548 if (colsel.selected != null && colsel.selected.size () > 0) {\r
549 if (this.hiddenColumns != null && this.hiddenColumns.size () > 0) {\r
550 this.addElementsFrom (colsel);\r
551 } else {\r
552 for (var col, $col = colsel.getSelected ().iterator (); $col.hasNext () && ((col = $col.next ()) || true);) {\r
553 this.addElement ((col).intValue ());\r
554 }\r
555 }}}, "jalview.datamodel.ColumnSelection");\r
556 c$.propagateInsertions = Clazz.defineMethod (c$, "propagateInsertions", \r
557 function (profileseq, al, input) {\r
558 var profsqpos = 0;\r
559 var gc = al.getGapCharacter ();\r
560 var alandcolsel = input.getAlignmentAndColumnSelection (gc);\r
561 var nview = alandcolsel[1];\r
562 var origseq = (alandcolsel[0])[profsqpos];\r
563 nview.propagateInsertions (profileseq, al, origseq);\r
564 return nview;\r
565 }, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.AlignmentView");\r
566 Clazz.defineMethod (c$, "propagateInsertions", \r
567 function (profileseq, al, origseq) {\r
568 var gc = al.getGapCharacter ();\r
569 this.pruneDeletions (jalview.util.ShiftList.parseMap (origseq.gapMap ()));\r
570 var viscontigs = this.getVisibleContigs (0, profileseq.getLength ());\r
571 var spos = 0;\r
572 var offset = 0;\r
573 for (var v = 0; v < viscontigs.length; v += 2) {\r
574 if (viscontigs[v] > spos) {\r
575 var sb =  new StringBuffer ();\r
576 for (var s = 0, ns = viscontigs[v] - spos; s < ns; s++) {\r
577 sb.append (gc);\r
578 }\r
579 for (var s = 0, ns = al.getHeight (); s < ns; s++) {\r
580 var sqobj = al.getSequenceAt (s);\r
581 if (sqobj !== profileseq) {\r
582 var sq = al.getSequenceAt (s).getSequenceAsString ();\r
583 if (sq.length <= spos + offset) {\r
584 var diff = spos + offset - sq.length - 1;\r
585 if (diff > 0) {\r
586 sq = sq + sb;\r
587 while ((diff = spos + offset - sq.length - 1) > 0) {\r
588 if (diff >= sb.length ()) {\r
589 sq += sb.toString ();\r
590 } else {\r
591 var buf =  Clazz.newCharArray (diff, '\0');\r
592 sb.getChars (0, diff, buf, 0);\r
593 sq += buf.toString ();\r
594 }}\r
595 }sq += sb.toString ();\r
596 } else {\r
597 al.getSequenceAt (s).setSequence (sq.substring (0, spos + offset) + sb.toString () + sq.substring (spos + offset));\r
598 }}}\r
599 }spos = viscontigs[v + 1] + 1;\r
600 }\r
601 if ((offset + spos) < profileseq.getLength ()) {\r
602 var sb =  new StringBuffer ();\r
603 for (var s = 0, ns = profileseq.getLength () - spos - offset; s < ns; s++) {\r
604 sb.append (gc);\r
605 }\r
606 for (var s = 0, ns = al.getHeight (); s < ns; s++) {\r
607 var sqobj = al.getSequenceAt (s);\r
608 if (sqobj === profileseq) {\r
609 continue;\r
610 }var sq = sqobj.getSequenceAsString ();\r
611 var diff = origseq.getLength () - sq.length;\r
612 while (diff > 0) {\r
613 if (diff >= sb.length ()) {\r
614 sq += sb.toString ();\r
615 } else {\r
616 var buf =  Clazz.newCharArray (diff, '\0');\r
617 sb.getChars (0, diff, buf, 0);\r
618 sq += buf.toString ();\r
619 }diff = origseq.getLength () - sq.length;\r
620 }\r
621 }\r
622 }}, "jalview.datamodel.SequenceI,jalview.datamodel.AlignmentI,jalview.datamodel.SequenceI");\r
623 Clazz.defineMethod (c$, "hasSelectedColumns", \r
624 function () {\r
625 return (this.selected != null && this.selected.size () > 0);\r
626 });\r
627 Clazz.defineMethod (c$, "hasHiddenColumns", \r
628 function () {\r
629 return this.hiddenColumns != null && this.hiddenColumns.size () > 0;\r
630 });\r
631 Clazz.defineMethod (c$, "hasManyHiddenColumns", \r
632 function () {\r
633 return this.hiddenColumns != null && this.hiddenColumns.size () > 1;\r
634 });\r
635 Clazz.defineMethod (c$, "hideInsertionsFor", \r
636 function (sr) {\r
637 var inserts = sr.getInsertions ();\r
638 for (var r, $r = inserts.iterator (); $r.hasNext () && ((r = $r.next ()) || true);) {\r
639 this.hideColumns (r[0], r[1]);\r
640 }\r
641 }, "jalview.datamodel.SequenceI");\r
642 Clazz.defineMethod (c$, "filterAnnotations", \r
643 function (annotations, filterParams) {\r
644 this.revealAllHiddenColumns ();\r
645 this.clear ();\r
646 var count = 0;\r
647 do {\r
648 if (annotations[count] != null) {\r
649 var itemMatched = false;\r
650 if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.ABOVE_THRESHOLD && annotations[count].value >= filterParams.getThresholdValue ()) {\r
651 itemMatched = true;\r
652 }if (filterParams.getThresholdType () === jalview.viewmodel.annotationfilter.AnnotationFilterParameter.ThresholdType.BELOW_THRESHOLD && annotations[count].value <= filterParams.getThresholdValue ()) {\r
653 itemMatched = true;\r
654 }if (filterParams.isFilterAlphaHelix () && annotations[count].secondaryStructure == 'H') {\r
655 itemMatched = true;\r
656 }if (filterParams.isFilterBetaSheet () && annotations[count].secondaryStructure == 'E') {\r
657 itemMatched = true;\r
658 }if (filterParams.isFilterTurn () && annotations[count].secondaryStructure == 'S') {\r
659 itemMatched = true;\r
660 }var regexSearchString = filterParams.getRegexString ();\r
661 if (regexSearchString != null && !filterParams.getRegexSearchFields ().isEmpty ()) {\r
662 var fields = filterParams.getRegexSearchFields ();\r
663 try {\r
664 if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DISPLAY_STRING) && annotations[count].displayCharacter.matches (regexSearchString)) {\r
665 itemMatched = true;\r
666 }} catch (pse) {\r
667 if (Clazz.exceptionOf (pse, java.util.regex.PatternSyntaxException)) {\r
668 if (annotations[count].displayCharacter.equals (regexSearchString)) {\r
669 itemMatched = true;\r
670 }} else {\r
671 throw pse;\r
672 }\r
673 }\r
674 if (fields.contains (jalview.viewmodel.annotationfilter.AnnotationFilterParameter.SearchableAnnotationField.DESCRIPTION) && annotations[count].description != null && annotations[count].description.matches (regexSearchString)) {\r
675 itemMatched = true;\r
676 }}if (itemMatched) {\r
677 this.addElement (count);\r
678 }}count++;\r
679 } while (count < annotations.length);\r
680 return false;\r
681 }, "~A,jalview.viewmodel.annotationfilter.AnnotationFilterParameter");\r
682 });\r