Annotation adjustment moved to EditCommand
[jalview.git] / src / jalview / commands / RemoveGapsCommand.java
1 package jalview.commands;\r
2   /*\r
3  * Jalview - A Sequence Alignment Editor and Viewer\r
4  * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
5  *\r
6  * This program is free software; you can redistribute it and/or\r
7  * modify it under the terms of the GNU General Public License\r
8  * as published by the Free Software Foundation; either version 2\r
9  * of the License, or (at your option) any later version.\r
10  *\r
11  * This program is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  * GNU General Public License for more details.\r
15  *\r
16  * You should have received a copy of the GNU General Public License\r
17  * along with this program; if not, write to the Free Software\r
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
19  */\r
20 \r
21 import jalview.datamodel.*;\r
22 \r
23 public class RemoveGapsCommand  extends EditCommand\r
24 {\r
25   public RemoveGapsCommand(  String description,\r
26                              SequenceI[] seqs, AlignmentI al)\r
27   {\r
28     this.description = description;\r
29     int width = 0;\r
30     for(int i=0; i<seqs.length; i++)\r
31       if(seqs[i].getLength()>width)\r
32         width = seqs[i].getLength();\r
33 \r
34     findGaps(seqs, 0, width, al);\r
35   }\r
36 \r
37   public RemoveGapsCommand(  String description,\r
38                              SequenceI[] seqs,\r
39                              int start, int end, AlignmentI al)\r
40   {\r
41     this.description = description;\r
42     findGaps(seqs, start, end, al);\r
43   }\r
44 \r
45   void findGaps(SequenceI [] seqs, int start, int end, AlignmentI al)\r
46   {\r
47 \r
48     int startCol = -1, endCol = -1;\r
49     int deletedCols = 0;\r
50 \r
51     int j, jSize;\r
52 \r
53     edits = new Edit[0];\r
54 \r
55     boolean delete = true;\r
56     char [] sequence;\r
57 \r
58     for(int s=0; s<seqs.length; s++)\r
59     {\r
60       deletedCols = 0;\r
61       startCol = -1;\r
62       endCol = -1;\r
63       sequence = seqs[s].getSequence(start, end+1);\r
64 \r
65       jSize = sequence.length;\r
66       for (j=0; j<jSize; j++)\r
67       {\r
68         delete = true;\r
69 \r
70 \r
71         if (!jalview.util.Comparison.isGap(sequence[j]))\r
72         {\r
73           if (delete)\r
74             endCol = j;\r
75 \r
76           delete = false;\r
77         }\r
78 \r
79 \r
80         if (delete && startCol == -1)\r
81         {\r
82           startCol = j;\r
83         }\r
84 \r
85         if (!delete && startCol > -1)\r
86         {\r
87           this.appendEdit(DELETE_GAP, new SequenceI[]{seqs[s]},\r
88                           start + startCol - deletedCols,\r
89                           endCol - startCol,\r
90                           al,\r
91                           false);\r
92 \r
93           deletedCols += (endCol - startCol);\r
94           startCol = -1;\r
95           endCol = -1;\r
96         }\r
97       }\r
98       if (delete && startCol > -1)\r
99       {\r
100         this.appendEdit(DELETE_GAP, new SequenceI[]{seqs[s]},\r
101                         start + startCol - deletedCols,\r
102                         jSize - startCol,\r
103                         al,\r
104                         false);\r
105       }\r
106 \r
107     }\r
108 \r
109     performEdit(0);\r
110   }\r
111 \r
112 }\r