2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
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 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/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
19 package jalview.datamodel;
23 public class HiddenSequences
26 * holds a list of hidden sequences associated with an alignment.
28 public SequenceI[] hiddenSequences;
32 public HiddenSequences(AlignmentI al)
39 if (hiddenSequences == null)
44 for (int i = 0; i < hiddenSequences.length; i++)
46 if (hiddenSequences[i] != null)
58 for (int i = 0; i < hiddenSequences.length; i++)
60 if (hiddenSequences[i] != null
61 && hiddenSequences[i].getLength() > width)
63 width = hiddenSequences[i].getLength();
71 * Call this method if sequences are removed from the main alignment
73 public void adjustHeightSequenceDeleted(int seqIndex)
75 if (hiddenSequences == null)
80 int alHeight = alignment.getHeight();
82 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
83 int deletionIndex = adjustForHiddenSeqs(seqIndex);
85 for (int i = 0; i < hiddenSequences.length; i++)
87 if (hiddenSequences[i] == null)
92 if (i > deletionIndex)
94 tmp[i - 1] = hiddenSequences[i];
98 tmp[i] = hiddenSequences[i];
102 hiddenSequences = tmp;
107 * Call this method if sequences are added to or removed from the main
110 public void adjustHeightSequenceAdded()
112 if (hiddenSequences == null)
117 int alHeight = alignment.getHeight();
119 SequenceI[] tmp = new SequenceI[alHeight + getSize()];
120 System.arraycopy(hiddenSequences, 0, tmp, 0, hiddenSequences.length);
121 hiddenSequences = tmp;
124 public void hideSequence(SequenceI sequence)
126 if (hiddenSequences == null)
128 hiddenSequences = new SequenceI[alignment.getHeight()];
131 int alignmentIndex = alignment.findIndex(sequence);
132 alignmentIndex = adjustForHiddenSeqs(alignmentIndex);
134 if (hiddenSequences[alignmentIndex] != null)
136 System.out.println("ERROR!!!!!!!!!!!");
139 hiddenSequences[alignmentIndex] = sequence;
141 alignment.deleteSequence(sequence);
144 public Vector showAll(
145 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
147 Vector revealedSeqs = new Vector();
148 for (int i = 0; i < hiddenSequences.length; i++)
150 if (hiddenSequences[i] != null)
152 Vector tmp = showSequence(i, hiddenRepSequences);
153 for (int t = 0; t < tmp.size(); t++)
155 revealedSeqs.addElement(tmp.elementAt(t));
162 public Vector showSequence(int alignmentIndex,
163 Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
165 Vector revealedSeqs = new Vector();
166 SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);
167 if (repSequence != null && hiddenRepSequences != null
168 && hiddenRepSequences.containsKey(repSequence))
170 hiddenRepSequences.remove(repSequence);
171 revealedSeqs.addElement(repSequence);
174 int start = adjustForHiddenSeqs(alignmentIndex - 1);
175 int end = adjustForHiddenSeqs(alignmentIndex);
176 if (end >= hiddenSequences.length)
178 end = hiddenSequences.length - 1;
181 List<SequenceI> asequences;
182 synchronized (asequences = alignment.getSequences())
184 for (int index = end; index > start; index--)
186 SequenceI seq = hiddenSequences[index];
187 hiddenSequences[index] = null;
191 if (seq.getLength() > 0)
193 revealedSeqs.addElement(seq);
194 asequences.add(alignmentIndex, seq);
198 System.out.println(seq.getName()
199 + " has been deleted whilst hidden");
209 public SequenceI getHiddenSequence(int alignmentIndex)
211 return hiddenSequences[alignmentIndex];
214 public int findIndexWithoutHiddenSeqs(int alignmentIndex)
218 if (hiddenSequences.length <= alignmentIndex)
220 alignmentIndex = hiddenSequences.length - 1;
223 while (index <= alignmentIndex)
225 if (hiddenSequences[index] != null)
233 return (alignmentIndex - hiddenSeqs);
236 public int adjustForHiddenSeqs(int alignmentIndex)
239 int hSize = hiddenSequences.length;
240 while (index <= alignmentIndex && index < hSize)
242 if (hiddenSequences[index] != null)
250 return alignmentIndex;
253 public AlignmentI getFullAlignment()
255 int isize = hiddenSequences.length;
256 SequenceI[] seq = new Sequence[isize];
259 for (int i = 0; i < hiddenSequences.length; i++)
261 if (hiddenSequences[i] != null)
263 seq[i] = hiddenSequences[i];
267 seq[i] = alignment.getSequenceAt(index);
272 return new Alignment(seq);
275 public boolean isHidden(SequenceI seq)
277 for (int i = 0; i < hiddenSequences.length; i++)
279 if (hiddenSequences[i] != null && hiddenSequences[i] == seq)