}
}
- /**
- * delete any columns in alignmentAnnotation that are hidden (including
- * sequence associated annotation).
- *
- * @param alignmentAnnotation
- */
- public void makeVisibleAnnotation(AlignmentAnnotation alignmentAnnotation)
- {
- if (alignmentAnnotation != null
- && alignmentAnnotation.annotations != null)
- {
- makeVisibleAnnotation(0, alignmentAnnotation.annotations.length,
- alignmentAnnotation);
- }
- }
-
- /**
- * delete any columns in alignmentAnnotation that are hidden (including
- * sequence associated annotation).
- *
- * @param start
- * remove any annotation to the right of this column
- * @param end
- * remove any annotation to the left of this column
- * @param alignmentAnnotation
- * the annotation to operate on
- */
- public void makeVisibleAnnotation(int start, int end,
- AlignmentAnnotation alignmentAnnotation)
- {
- try
- {
- LOCK.readLock().lock();
-
- int startFrom = start;
- int endAt = end;
-
- if (alignmentAnnotation != null
- && alignmentAnnotation.annotations != null)
- {
- if (!hiddenColumns.isEmpty())
- {
- removeHiddenAnnotation(startFrom, endAt, alignmentAnnotation);
- }
- else
- {
- alignmentAnnotation.restrict(startFrom, endAt);
- }
- }
- } finally
- {
- LOCK.readLock().unlock();
- }
- }
-
- private void removeHiddenAnnotation(int start, int end,
- AlignmentAnnotation alignmentAnnotation)
- {
- // mangle the alignmentAnnotation annotation array
- ArrayList<Annotation[]> annels = new ArrayList<>();
- Annotation[] els = null;
-
- int w = 0;
-
- Iterator<int[]> blocks = new VisibleContigsIterator(start, end + 1,
- hiddenColumns);
-
- int copylength;
- int annotationLength;
- while (blocks.hasNext())
- {
- int[] block = blocks.next();
- annotationLength = block[1] - block[0] + 1;
-
- if (blocks.hasNext())
- {
- // copy just the visible segment of the annotation row
- copylength = annotationLength;
- }
- else
- {
- if (annotationLength + block[0] <= alignmentAnnotation.annotations.length)
- {
- // copy just the visible segment of the annotation row
- copylength = annotationLength;
- }
- else
- {
- // copy to the end of the annotation row
- copylength = alignmentAnnotation.annotations.length - block[0];
- }
- }
-
- els = new Annotation[annotationLength];
- annels.add(els);
- System.arraycopy(alignmentAnnotation.annotations, block[0], els, 0,
- copylength);
- w += annotationLength;
- }
-
- if (w != 0)
- {
- alignmentAnnotation.annotations = new Annotation[w];
-
- w = 0;
- for (Annotation[] chnk : annels)
- {
- System.arraycopy(chnk, 0, alignmentAnnotation.annotations, w,
- chnk.length);
- w += chnk.length;
- }
- }
- }
/**
*