Gethidden sequences
[jalview.git] / src / jalview / datamodel / HistoryItem.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 package jalview.datamodel;\r
20 \r
21 import java.util.*;\r
22 \r
23 \r
24 /**\r
25  * DOCUMENT ME!\r
26  *\r
27  * @author $author$\r
28  * @version $Revision$\r
29  */\r
30 public class HistoryItem\r
31 {\r
32   /** DOCUMENT ME!! */\r
33   public static final int EDIT = 0;\r
34 \r
35   /** DOCUMENT ME!! */\r
36   public static final int SORT = 1;\r
37 \r
38   /** DOCUMENT ME!! */\r
39   public static final int HIDE = 2;\r
40 \r
41   /** DOCUMENT ME!! */\r
42   public static final int PASTE = 3;\r
43 \r
44   final int type;\r
45 \r
46   AlignmentI alignment;\r
47   String description;\r
48 \r
49   Vector sequences;\r
50   Vector seqAsString;\r
51   Vector alignIndex;\r
52 \r
53   Vector hiddenSeqs;\r
54   Vector hiddenSeqsAsString;\r
55 \r
56 \r
57   /**\r
58    * Creates a new HistoryItem object.\r
59    *\r
60    * @param description DOCUMENT ME!\r
61    * @param al DOCUMENT ME!\r
62    * @param type DOCUMENT ME!\r
63    */\r
64   public HistoryItem(String description, AlignmentI al, int type)\r
65   {\r
66     alignment = al;\r
67     this.type = type;\r
68     this.description = description;\r
69     sequences = new Vector();\r
70     alignIndex = new Vector();\r
71     seqAsString = new Vector();\r
72 \r
73     for (int i = 0; i < al.getHeight(); i++)\r
74     {\r
75       SequenceI seq = al.getSequenceAt(i);\r
76       sequences.addElement(seq);\r
77       alignIndex.addElement(i + "");\r
78       seqAsString.addElement(seq.getSequence().toString());\r
79     }\r
80 \r
81     if(alignment.getHiddenSequences()!=null\r
82        && alignment.getHiddenSequences().getSize()>0)\r
83     {\r
84       hiddenSeqs = new Vector();\r
85       hiddenSeqsAsString = new Vector();\r
86       Enumeration en = alignment.getHiddenSequences().hiddenSequences.elements();\r
87       while (en.hasMoreElements())\r
88       {\r
89         SequenceI key = (SequenceI) en.nextElement();\r
90         hiddenSeqs.addElement(key);\r
91         hiddenSeqsAsString.addElement(key.getSequence().toString());\r
92       }\r
93     }\r
94   }\r
95 \r
96   /**\r
97    * DOCUMENT ME!\r
98    *\r
99    * @return DOCUMENT ME!\r
100    */\r
101   public String getDescription()\r
102   {\r
103     return description;\r
104   }\r
105 \r
106 \r
107   public void restore()\r
108   {\r
109     if (type == HistoryItem.SORT)\r
110     {\r
111       for (int i = 0; i < sequences.size(); i++)\r
112       {\r
113         alignment.getSequences().setElementAt(sequences.elementAt(i), i);\r
114       }\r
115     }\r
116     else\r
117     {\r
118 \r
119       for (int i = 0; i < sequences.size(); i++)\r
120       {\r
121         SequenceI restore = (SequenceI) sequences.elementAt(i);\r
122 \r
123         if (restore.getLength() == 0)\r
124         {\r
125           //This is for edits which remove all residues in a sequence\r
126           restore.setSequence(seqAsString.elementAt(i).toString());\r
127           alignment.getSequences().insertElementAt(restore,\r
128               Integer.parseInt(alignIndex.elementAt(i).toString()));\r
129         }\r
130         else\r
131         {\r
132           restore.setSequence(seqAsString.elementAt(i).toString());\r
133         }\r
134       }\r
135 \r
136       if(hiddenSeqs!=null)\r
137       {\r
138         for(int hs=0; hs<hiddenSeqs.size(); hs++)\r
139         {\r
140           SequenceI key = (SequenceI) hiddenSeqs.elementAt(hs);\r
141           key.setSequence(hiddenSeqsAsString.elementAt(hs).toString());\r
142         }\r
143       }\r
144 \r
145       if (type == HistoryItem.PASTE)\r
146       {\r
147         for (int i = alignment.getHeight() - 1;\r
148              i > (sequences.size() - 1); i--)\r
149         {\r
150           alignment.deleteSequence(i);\r
151         }\r
152       }\r
153     }\r
154 \r
155   }\r
156 }\r