2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
3 * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
18 package jalview.datamodel;
22 public class HiddenSequences
25 * holds a list of hidden sequences associated with an alignment.
27 public SequenceI[] hiddenSequences;
31 public HiddenSequences(AlignmentI al)
38 if (hiddenSequences == null)
43 for (int i = 0; i < hiddenSequences.length; i++)
45 if (hiddenSequences[i] != null)
57 for (int i = 0; i < hiddenSequences.length; i++)
59 if (hiddenSequences[i] != null
60 && hiddenSequences[i].getLength() > width)
62 width = hiddenSequences[i].getLength();
70 * Call this method if sequences are removed from the main alignment
72 public void adjustHeightSequenceDeleted(int seqIndex)
74 if (hiddenSequences == null)
79 int alHeight = alignment.getHeight();
81 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
82 int deletionIndex = adjustForHiddenSeqs(seqIndex);
84 for (int i = 0; i < hiddenSequences.length; i++)
86 if (hiddenSequences[i] == null)
91 if (i > deletionIndex)
93 tmp[i - 1] = hiddenSequences[i];
97 tmp[i] = hiddenSequences[i];
101 hiddenSequences = tmp;
106 * Call this method if sequences are added to or removed from the main
109 public void adjustHeightSequenceAdded()
111 if (hiddenSequences == null)
116 int alHeight = alignment.getHeight();
118 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
119 System.arraycopy(hiddenSequences, 0, tmp, 0, hiddenSequences.length);
120 hiddenSequences = tmp;
123 public void hideSequence(SequenceI sequence)
125 if (hiddenSequences == null)
127 hiddenSequences = new SequenceI[alignment.getHeight()];
130 int alignmentIndex = alignment.findIndex(sequence);
131 alignmentIndex = adjustForHiddenSeqs(alignmentIndex);
133 if (hiddenSequences[alignmentIndex] != null)
135 System.out.println("ERROR!!!!!!!!!!!");
138 hiddenSequences[alignmentIndex] = sequence;
140 alignment.deleteSequence(sequence);
143 public Vector showAll(
144 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
146 Vector revealedSeqs = new Vector();
147 for (int i = 0; i < hiddenSequences.length; i++)
149 if (hiddenSequences[i] != null)
151 Vector tmp = showSequence(i, hiddenRepSequences);
152 for (int t = 0; t < tmp.size(); t++)
154 revealedSeqs.addElement(tmp.elementAt(t));
161 public Vector showSequence(int alignmentIndex,
162 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
164 Vector revealedSeqs = new Vector();
165 SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);
166 if (repSequence != null && hiddenRepSequences != null
167 && hiddenRepSequences.containsKey(repSequence))
169 hiddenRepSequences.remove(repSequence);
170 revealedSeqs.addElement(repSequence);
173 int start = adjustForHiddenSeqs(alignmentIndex - 1);
174 int end = adjustForHiddenSeqs(alignmentIndex);
175 if (end >= hiddenSequences.length)
177 end = hiddenSequences.length - 1;
180 List<SequenceI> asequences;
181 synchronized (asequences = alignment.getSequences())
183 for (int index = end; index > start; index--)
185 SequenceI seq = hiddenSequences[index];
186 hiddenSequences[index] = null;
190 if (seq.getLength() > 0)
192 revealedSeqs.addElement(seq);
193 asequences.add(alignmentIndex, seq);
197 System.out.println(seq.getName()
198 + " has been deleted whilst hidden");
208 public SequenceI getHiddenSequence(int alignmentIndex)
210 return hiddenSequences[alignmentIndex];
213 public int findIndexWithoutHiddenSeqs(int alignmentIndex)
217 if (hiddenSequences.length <= alignmentIndex)
219 alignmentIndex = hiddenSequences.length - 1;
222 while (index <= alignmentIndex)
224 if (hiddenSequences[index] != null)
232 return (alignmentIndex - hiddenSeqs);
235 public int adjustForHiddenSeqs(int alignmentIndex)
238 int hSize = hiddenSequences.length;
239 while (index <= alignmentIndex && index < hSize)
241 if (hiddenSequences[index] != null)
249 return alignmentIndex;
252 public AlignmentI getFullAlignment()
254 int isize = hiddenSequences.length;
255 SequenceI[] seq = new Sequence[isize];
258 for (int i = 0; i < hiddenSequences.length; i++)
260 if (hiddenSequences[i] != null)
262 seq[i] = hiddenSequences[i];
266 seq[i] = alignment.getSequenceAt(index);
271 return new Alignment(seq);
274 public boolean isHidden(SequenceI seq)
276 for (int i = 0; i < hiddenSequences.length; i++)
278 if (hiddenSequences[i] != null && hiddenSequences[i] == seq)