2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3 * Copyright (C) 2014 The Jalview Authors
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
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.datamodel;
25 public class HiddenSequences
28 * holds a list of hidden sequences associated with an alignment.
30 public SequenceI[] hiddenSequences;
34 public HiddenSequences(AlignmentI al)
41 if (hiddenSequences == null)
46 for (int i = 0; i < hiddenSequences.length; i++)
48 if (hiddenSequences[i] != null)
60 for (int i = 0; i < hiddenSequences.length; i++)
62 if (hiddenSequences[i] != null
63 && hiddenSequences[i].getLength() > width)
65 width = hiddenSequences[i].getLength();
73 * Call this method if sequences are removed from the main alignment
75 public void adjustHeightSequenceDeleted(int seqIndex)
77 if (hiddenSequences == null)
82 int alHeight = alignment.getHeight();
84 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
85 int deletionIndex = adjustForHiddenSeqs(seqIndex);
87 for (int i = 0; i < hiddenSequences.length; i++)
89 if (hiddenSequences[i] == null)
94 if (i > deletionIndex)
96 tmp[i - 1] = hiddenSequences[i];
100 tmp[i] = hiddenSequences[i];
104 hiddenSequences = tmp;
109 * Call this method if sequences are added to or removed from the main
112 public void adjustHeightSequenceAdded()
114 if (hiddenSequences == null)
119 int alHeight = alignment.getHeight();
121 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
122 System.arraycopy(hiddenSequences, 0, tmp, 0, hiddenSequences.length);
123 hiddenSequences = tmp;
126 public void hideSequence(SequenceI sequence)
128 if (hiddenSequences == null)
130 hiddenSequences = new SequenceI[alignment.getHeight()];
133 int alignmentIndex = alignment.findIndex(sequence);
134 alignmentIndex = adjustForHiddenSeqs(alignmentIndex);
136 if (hiddenSequences[alignmentIndex] != null)
138 System.out.println("ERROR!!!!!!!!!!!");
141 hiddenSequences[alignmentIndex] = sequence;
143 alignment.deleteSequence(sequence);
146 public Vector showAll(
147 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
149 Vector revealedSeqs = new Vector();
150 for (int i = 0; i < hiddenSequences.length; i++)
152 if (hiddenSequences[i] != null)
154 Vector tmp = showSequence(i, hiddenRepSequences);
155 for (int t = 0; t < tmp.size(); t++)
157 revealedSeqs.addElement(tmp.elementAt(t));
164 public Vector showSequence(int alignmentIndex,
165 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
167 Vector revealedSeqs = new Vector();
168 SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);
169 if (repSequence != null && hiddenRepSequences != null
170 && hiddenRepSequences.containsKey(repSequence))
172 hiddenRepSequences.remove(repSequence);
173 revealedSeqs.addElement(repSequence);
176 int start = adjustForHiddenSeqs(alignmentIndex - 1);
177 int end = adjustForHiddenSeqs(alignmentIndex);
178 if (end >= hiddenSequences.length)
180 end = hiddenSequences.length - 1;
183 List<SequenceI> asequences;
184 synchronized (asequences = alignment.getSequences())
186 for (int index = end; index > start; index--)
188 SequenceI seq = hiddenSequences[index];
189 hiddenSequences[index] = null;
193 if (seq.getLength() > 0)
195 revealedSeqs.addElement(seq);
196 asequences.add(alignmentIndex, seq);
200 System.out.println(seq.getName()
201 + " has been deleted whilst hidden");
211 public SequenceI getHiddenSequence(int alignmentIndex)
213 return hiddenSequences[alignmentIndex];
216 public int findIndexWithoutHiddenSeqs(int alignmentIndex)
220 if (hiddenSequences.length <= alignmentIndex)
222 alignmentIndex = hiddenSequences.length - 1;
225 while (index <= alignmentIndex)
227 if (hiddenSequences[index] != null)
235 return (alignmentIndex - hiddenSeqs);
238 public int adjustForHiddenSeqs(int alignmentIndex)
241 int hSize = hiddenSequences.length;
242 while (index <= alignmentIndex && index < hSize)
244 if (hiddenSequences[index] != null)
252 return alignmentIndex;
255 public AlignmentI getFullAlignment()
257 int isize = hiddenSequences.length;
258 SequenceI[] seq = new Sequence[isize];
261 for (int i = 0; i < hiddenSequences.length; i++)
263 if (hiddenSequences[i] != null)
265 seq[i] = hiddenSequences[i];
269 seq[i] = alignment.getSequenceAt(index);
274 return new Alignment(seq);
277 public boolean isHidden(SequenceI seq)
279 for (int i = 0; i < hiddenSequences.length; i++)
281 if (hiddenSequences[i] != null && hiddenSequences[i] == seq)