Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
JustifyLeftOrRightCommand | 30 | 24 | 10 |
1 | /* | |
2 | * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) | |
3 | * Copyright (C) $$Year-Rel$$ The Jalview Authors | |
4 | * | |
5 | * This file is part of Jalview. | |
6 | * | |
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. | |
11 | * | |
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. | |
16 | * | |
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. | |
20 | */ | |
21 | package jalview.commands; | |
22 | ||
23 | import java.util.List; | |
24 | ||
25 | import jalview.datamodel.AlignmentI; | |
26 | import jalview.datamodel.ContiguousI; | |
27 | import jalview.datamodel.SequenceI; | |
28 | import jalview.util.Comparison; | |
29 | ||
30 | public class JustifyLeftOrRightCommand extends EditCommand | |
31 | { | |
32 | /** | |
33 | * Constructs and performs a trim alignment command | |
34 | * | |
35 | * @param description | |
36 | * (to show in Undo/Redo menu) | |
37 | * @param justifyLeft | |
38 | * if true left justify, otherwise right | |
39 | * @param seqs | |
40 | * the sequences to justify | |
41 | * @param start | |
42 | * - leftmost column (base 0) to justify | |
43 | * | |
44 | * @param end | |
45 | * - rightmost column (base 0) to justify | |
46 | * | |
47 | * @param al | |
48 | */ | |
49 | 2 | public JustifyLeftOrRightCommand(String description, boolean left, |
50 | List<SequenceI> seqs, int from, int to, AlignmentI al) | |
51 | { | |
52 | 2 | this.description = description; |
53 | ||
54 | 2 | for (SequenceI seq : seqs) |
55 | { | |
56 | 6 | ContiguousI cont = seq.findPositions(from + 1, to + 1); |
57 | 6 | if (cont == null) |
58 | { | |
59 | 0 | continue; |
60 | } | |
61 | 6 | char[] range = seq.getSequence(from, to + 1); |
62 | 6 | if (range == null || range.length == 0) |
63 | { | |
64 | 0 | continue; |
65 | } | |
66 | 6 | int dsstart = seq.getDatasetSequence().getStart(); |
67 | 6 | char[] sqchar = seq.getDatasetSequence().getSequence( |
68 | -dsstart + cont.getBegin(), -dsstart + cont.getEnd() + 1); | |
69 | // debug | |
70 | // println sqchar; | |
71 | 6 | char[] alseq = new char[to - from + 1]; |
72 | 6 | int sqstart = left ? 0 : alseq.length - sqchar.length; |
73 | 6 | int gaps = alseq.length - sqchar.length; |
74 | 6 | int gapstart = left ? sqchar.length : 0; |
75 | 6 | char gc = al.getGapCharacter(); |
76 | 23 | for (int gp = 0; gp < gaps; gp++) |
77 | { | |
78 | 17 | alseq[gapstart + gp] = gc; |
79 | } | |
80 | ||
81 | 45 | for (int sqp = 0, insp = 0; sqp < alseq.length; sqp++) |
82 | { | |
83 | 39 | if (sqp < range.length && !Comparison.isGap(range[sqp])) |
84 | { | |
85 | 22 | alseq[insp++ + sqstart] = range[sqp]; |
86 | } | |
87 | } | |
88 | 6 | SequenceI[] sqa = new SequenceI[1]; |
89 | 6 | sqa[0] = seq; |
90 | ||
91 | 6 | addEdit(new jalview.commands.EditCommand.Edit( |
92 | jalview.commands.EditCommand.Action.REPLACE, sqa, from, | |
93 | to + 1, al, new String(alseq))); | |
94 | } | |
95 | ||
96 | 2 | performEdit(0, null); |
97 | } | |
98 | } |