X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fcommands%2FEditCommand.java;h=ed9e5518d1574ebbd78065b7f68d0a9852b0605f;hb=b55d5f8c5ce50ee068c8345c1bdb3dbc711a74df;hp=6740b7f5b0da4da853b348af4dd58b9c07285fe1;hpb=418cee6e0cd56c6bdc9d7f5fc7c020d4eb94ffc8;p=jalview.git
diff --git a/src/jalview/commands/EditCommand.java b/src/jalview/commands/EditCommand.java
index 6740b7f..ed9e551 100644
--- a/src/jalview/commands/EditCommand.java
+++ b/src/jalview/commands/EditCommand.java
@@ -1,20 +1,20 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
+ * Copyright (C) 2014 The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see
Title: EditCommmand
- * - *Description: Essential information for performing - * undo and redo for cut/paste insert/delete gap - * which can be stored in the HistoryList
- * - *Copyright: Copyright (c) 2006
- * - *Company: Dundee University
- * + * + *+ * Title: EditCommmand + *
+ * + *+ * Description: Essential information for performing undo and redo for cut/paste + * insert/delete gap which can be stored in the HistoryList + *
+ * + *+ * Copyright: Copyright (c) 2006 + *
+ * + *+ * Company: Dundee University + *
+ * * @author not attributable * @version 1.0 */ -public class EditCommand - implements CommandI +public class EditCommand implements CommandI { public static final int INSERT_GAP = 0; + public static final int DELETE_GAP = 1; + public static final int CUT = 2; + public static final int PASTE = 3; + public static final int REPLACE = 4; + public static final int INSERT_NUC = 5; + Edit[] edits; String description; public EditCommand() - {} + { + } public EditCommand(String description) { this.description = description; } - public EditCommand(String description, - int command, - SequenceI[] seqs, - int position, - int number, - AlignmentI al) + public EditCommand(String description, int command, SequenceI[] seqs, + int position, int number, AlignmentI al) { this.description = description; if (command == CUT || command == PASTE) { edits = new Edit[] - { - new Edit(command, seqs, position, number, al)}; + { new Edit(command, seqs, position, number, al) }; } performEdit(0, null); } - public EditCommand(String description, - int command, - String replace, - SequenceI[] seqs, - int position, - int number, - AlignmentI al) + public EditCommand(String description, int command, String replace, + SequenceI[] seqs, int position, int number, AlignmentI al) { this.description = description; if (command == REPLACE) { edits = new Edit[] - { new Edit(command, seqs, position, number, al, replace)}; + { new Edit(command, seqs, position, number, al, replace) }; } performEdit(0, null); } + @Override final public String getDescription() { return description; } + @Override public int getSize() { return edits == null ? 0 : edits.length; @@ -110,9 +115,11 @@ public class EditCommand } /** - * append a new editCommand - * Note. this shouldn't be called if the edit is an operation affects more alignment objects than the one referenced - * in al (for example, cut or pasting whole sequences). Use the form with an additional AlignmentI[] views parameter. + * append a new editCommand Note. this shouldn't be called if the edit is an + * operation affects more alignment objects than the one referenced in al (for + * example, cut or pasting whole sequences). Use the form with an additional + * AlignmentI[] views parameter. + * * @param command * @param seqs * @param position @@ -120,17 +127,16 @@ public class EditCommand * @param al * @param performEdit */ - final public void appendEdit(int command, - SequenceI[] seqs, - int position, - int number, - AlignmentI al, - boolean performEdit) + final public void appendEdit(int command, SequenceI[] seqs, int position, + int number, AlignmentI al, boolean performEdit) { appendEdit(command, seqs, position, number, al, performEdit, null); } + /** - * append a new edit command with a set of alignment views that may be operated on + * append a new edit command with a set of alignment views that may be + * operated on + * * @param command * @param seqs * @param position @@ -139,14 +145,11 @@ public class EditCommand * @param performEdit * @param views */ - final public void appendEdit(int command, - SequenceI[] seqs, - int position, - int number, - AlignmentI al, - boolean performEdit, AlignmentI[] views) + final public void appendEdit(int command, SequenceI[] seqs, int position, + int number, AlignmentI al, boolean performEdit, AlignmentI[] views) { - Edit edit = new Edit(command, seqs, position, number, al.getGapCharacter()); + Edit edit = new Edit(command, seqs, position, number, + al.getGapCharacter()); if (al.getHeight() == seqs.length) { edit.al = al; @@ -163,8 +166,7 @@ public class EditCommand else { edits = new Edit[] - { - edit}; + { edit }; } if (performEdit) @@ -178,32 +180,38 @@ public class EditCommand int eSize = edits.length; for (int e = commandIndex; e < eSize; e++) { - switch(edits[e].command) + switch (edits[e].command) { - case INSERT_GAP: + case INSERT_GAP: insertGap(edits[e]); - break; - case DELETE_GAP: + break; + case DELETE_GAP: deleteGap(edits[e]); - break; - case CUT: + break; + case CUT: cut(edits[e], views); - break; - case PASTE: + break; + case PASTE: paste(edits[e], views); - break; - case REPLACE: - replace(edits[e]); - break; + break; + case REPLACE: + replace(edits[e]); + break; + // TODO:add deleteNuc for UNDO + // case INSERT_NUC: + // insertNuc(edits[e]); + // break; } } } + @Override final public void doCommand(AlignmentI[] views) { - performEdit(0,views); + performEdit(0, views); } + @Override final public void undoCommand(AlignmentI[] views) { int e = 0, eSize = edits.length; @@ -211,21 +219,21 @@ public class EditCommand { switch (edits[e].command) { - case INSERT_GAP: + case INSERT_GAP: deleteGap(edits[e]); - break; - case DELETE_GAP: + break; + case DELETE_GAP: insertGap(edits[e]); - break; - case CUT: + break; + case CUT: paste(edits[e], views); - break; - case PASTE: + break; + case PASTE: cut(edits[e], views); - break; - case REPLACE: - replace(edits[e]); - break; + break; + case REPLACE: + replace(edits[e]); + break; } } } @@ -235,20 +243,33 @@ public class EditCommand for (int s = 0; s < command.seqs.length; s++) { - command.seqs[s].insertCharAt(command.position, - command.number, - command.gapChar); + command.seqs[s].insertCharAt(command.position, command.number, + command.gapChar); + // System.out.println("pos: "+command.position+" number: "+command.number); } adjustAnnotations(command, true, false, null); } + // + // final void insertNuc(Edit command) + // { + // + // for (int s = 0; s < command.seqs.length; s++) + // { + // System.out.println("pos: "+command.position+" number: "+command.number); + // command.seqs[s].insertCharAt(command.position, command.number,'A'); + // } + // + // adjustAnnotations(command, true, false, null); + // } + final void deleteGap(Edit command) { for (int s = 0; s < command.seqs.length; s++) { - command.seqs[s].deleteChars(command.position, - command.position + command.number); + command.seqs[s].deleteChars(command.position, command.position + + command.number); } adjustAnnotations(command, false, false, null); @@ -256,7 +277,7 @@ public class EditCommand void cut(Edit command, AlignmentI[] views) { - boolean seqDeleted=false; + boolean seqDeleted = false; command.string = new char[command.seqs.length][]; for (int i = 0; i < command.seqs.length; i++) @@ -264,35 +285,38 @@ public class EditCommand if (command.seqs[i].getLength() > command.position) { command.string[i] = command.seqs[i].getSequence(command.position, - command.position + command.number); + command.position + command.number); SequenceI oldds = command.seqs[i].getDatasetSequence(); - if (command.oldds!=null && command.oldds[i]!=null) + if (command.oldds != null && command.oldds[i] != null) { // we are redoing an undone cut. command.seqs[i].setDatasetSequence(null); } - command.seqs[i].deleteChars(command.position, - command.position + command.number); - if (command.oldds!=null && command.oldds[i]!=null) + command.seqs[i].deleteChars(command.position, command.position + + command.number); + if (command.oldds != null && command.oldds[i] != null) { // oldds entry contains the cut dataset sequence. command.seqs[i].setDatasetSequence(command.oldds[i]); command.oldds[i] = oldds; - } else { + } + else + { // modify the oldds if necessary - if (oldds!=command.seqs[i].getDatasetSequence() - || command.seqs[i].getSequenceFeatures() != null) + if (oldds != command.seqs[i].getDatasetSequence() + || command.seqs[i].getSequenceFeatures() != null) { - if (command.oldds==null) + if (command.oldds == null) { command.oldds = new SequenceI[command.seqs.length]; } command.oldds[i] = oldds; - adjustFeatures(command, i, + adjustFeatures( + command, + i, command.seqs[i].findPosition(command.position), - command.seqs[i].findPosition(command.position + - command.number), - false); + command.seqs[i].findPosition(command.position + + command.number), false); } } } @@ -300,7 +324,7 @@ public class EditCommand if (command.seqs[i].getLength() < 1) { command.al.deleteSequence(command.seqs[i]); - seqDeleted=true; + seqDeleted = true; } } @@ -312,42 +336,46 @@ public class EditCommand StringBuffer tmp; boolean newDSNeeded; boolean newDSWasNeeded; - int newstart,newend; - boolean seqWasDeleted=false; + int newstart, newend; + boolean seqWasDeleted = false; int start = 0, end = 0; for (int i = 0; i < command.seqs.length; i++) { newDSNeeded = false; - newDSWasNeeded = command.oldds!=null && command.oldds[i]!=null; + newDSWasNeeded = command.oldds != null && command.oldds[i] != null; if (command.seqs[i].getLength() < 1) { // ie this sequence was deleted, we need to // read it to the alignment if (command.alIndex[i] < command.al.getHeight()) { - command.al.getSequences().insertElementAt(command.seqs[i], - command.alIndex[i]); + List