X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcommands%2FEditCommand.java;h=c46271f504e4bb03640450c8dc6bb09264dfa357;hb=eb3e681d6e82ccdd5d312d1981dfb306e7f479f0;hp=f2b390402dc1df41e99705b2456cd037bb23fdd3;hpb=3da878124135ff033f42d19d8733891b09e953cd;p=jalview.git diff --git a/src/jalview/commands/EditCommand.java b/src/jalview/commands/EditCommand.java index f2b3904..c46271f 100644 --- a/src/jalview/commands/EditCommand.java +++ b/src/jalview/commands/EditCommand.java @@ -20,6 +20,8 @@ */ package jalview.commands; +import java.util.Locale; + import jalview.analysis.AlignSeq; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; @@ -116,6 +118,7 @@ public class EditCommand implements CommandI return null; } }; + public abstract Action getUndoAction(); }; @@ -470,7 +473,7 @@ public class EditCommand implements CommandI { command.seqs[s].insertCharAt(command.position, command.number, command.gapChar); - // System.out.println("pos: "+command.position+" number: + // jalview.bin.Console.outPrintln("pos: "+command.position+" number: // "+command.number); } @@ -483,7 +486,8 @@ public class EditCommand implements CommandI // // for (int s = 0; s < command.seqs.length; s++) // { - // System.out.println("pos: "+command.position+" number: "+command.number); + // jalview.bin.Console.outPrintln("pos: "+command.position+" number: + // "+command.number); // command.seqs[s].insertCharAt(command.position, command.number,'A'); // } // @@ -530,16 +534,16 @@ public class EditCommand implements CommandI ContiguousI cutPositions = sequence.findPositions( command.position + 1, command.position + command.number); boolean cutIsInternal = cutPositions != null - && sequence.getStart() != cutPositions - .getBegin() && sequence.getEnd() != cutPositions.getEnd(); + && sequence.getStart() != cutPositions.getBegin() + && sequence.getEnd() != cutPositions.getEnd(); /* * perform the cut; if this results in a new dataset sequence, add * that to the alignment dataset */ SequenceI ds = sequence.getDatasetSequence(); - sequence.deleteChars(command.position, command.position - + command.number); + sequence.deleteChars(command.position, + command.position + command.number); if (command.oldds != null && command.oldds[i] != null) { @@ -564,15 +568,14 @@ public class EditCommand implements CommandI command.oldds[i] = oldds;// todo not if !cutIsInternal? // do we need to edit sequence features for new sequence ? - if (oldds != sequence.getDatasetSequence() - || (cutIsInternal - && sequence.getFeatures().hasFeatures())) + if (oldds != sequence.getDatasetSequence() || (cutIsInternal + && sequence.getFeatures().hasFeatures())) // todo or just test cutIsInternal && cutPositions != null ? { if (cutPositions != null) { cutFeatures(command, sequence, cutPositions.getBegin(), - cutPositions.getEnd(), cutIsInternal); + cutPositions.getEnd(), cutIsInternal); } } } @@ -751,7 +754,8 @@ public class EditCommand implements CommandI { boolean newDSWasNeeded = command.oldds != null && command.oldds[i] != null; - boolean newStartEndWasNeeded = command.oldStartEnd!=null && command.oldStartEnd[i]!=null; + boolean newStartEndWasNeeded = command.oldStartEnd != null + && command.oldStartEnd[i] != null; /** * cut addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, @@ -768,7 +772,7 @@ public class EditCommand implements CommandI start); ContiguousI afterEditedPositions = command.seqs[i] .findPositions(end + 1, command.seqs[i].getLength()); - + oldstring = command.seqs[i].getSequenceAsString(); tmp = new StringBuilder(oldstring.substring(0, start)); tmp.append(command.string[i]); @@ -789,17 +793,18 @@ public class EditCommand implements CommandI String nogapold = AlignSeq.extractGaps(Comparison.GapChars, new String(command.string[i])); - if (!nogaprep.toLowerCase().equals(nogapold.toLowerCase())) + if (!nogaprep.toLowerCase(Locale.ROOT) + .equals(nogapold.toLowerCase(Locale.ROOT))) { // we may already have dataset and limits stashed... if (newDSWasNeeded || newStartEndWasNeeded) { if (newDSWasNeeded) { - // then just switch the dataset sequence - SequenceI oldds = command.seqs[i].getDatasetSequence(); - command.seqs[i].setDatasetSequence(command.oldds[i]); - command.oldds[i] = oldds; + // then just switch the dataset sequence + SequenceI oldds = command.seqs[i].getDatasetSequence(); + command.seqs[i].setDatasetSequence(command.oldds[i]); + command.oldds[i] = oldds; } if (newStartEndWasNeeded) { @@ -809,7 +814,7 @@ public class EditCommand implements CommandI command.seqs[i].setEnd(newStart.getEnd()); } } - else + else { // decide if we need a new dataset sequence or modify start/end // first edit the original dataset sequence string @@ -821,15 +826,11 @@ public class EditCommand implements CommandI ? afterEditedPositions.getBegin() - 1 : oldstartend.getBegin() + nogapold.length()) - : beforeEditedPositions.getEnd() - ); + : beforeEditedPositions.getEnd()); int afterEndOfEdit = -oldds.getStart() + 1 - + ((afterEditedPositions == null) - ? oldstartend.getEnd() + + ((afterEditedPositions == null) ? oldstartend.getEnd() : afterEditedPositions.getBegin() - 1); - String fullseq = osp.substring(0, - beforeStartOfEdit) - + nogaprep + String fullseq = osp.substring(0, beforeStartOfEdit) + nogaprep + osp.substring(afterEndOfEdit); // and check if new sequence data is different.. @@ -838,7 +839,7 @@ public class EditCommand implements CommandI // old ds and edited ds are different, so // create the new dataset sequence SequenceI newds = new Sequence(oldds); - newds.setSequence(fullseq); + newds.setSequence(fullseq.toUpperCase(Locale.ROOT)); if (command.oldds == null) { @@ -874,9 +875,8 @@ public class EditCommand implements CommandI && afterEditedPositions == null) { // modification at end - command.seqs[i].setEnd( - beforeEditedPositions.getEnd() + nogaprep.length() - - nogapold.length()); + command.seqs[i].setEnd(beforeEditedPositions.getEnd() + + nogaprep.length() - nogapold.length()); } else if (afterEditedPositions != null && beforeEditedPositions == null) @@ -891,7 +891,8 @@ public class EditCommand implements CommandI // new // start/end String nogapalseq = AlignSeq.extractGaps(Comparison.GapChars, - command.seqs[i].getSequenceAsString().toUpperCase()); + command.seqs[i].getSequenceAsString() + .toUpperCase(Locale.ROOT)); int newStart = command.seqs[i].getDatasetSequence() .getSequenceAsString().indexOf(nogapalseq); if (newStart == -1) @@ -1023,7 +1024,8 @@ public class EditCommand implements CommandI } // and then duplicate added annotation on every other alignment // view - for (int vnum = 0; views != null && vnum < views.length; vnum++) + for (int vnum = 0; views != null + && vnum < views.length; vnum++) { if (views[vnum] != command.al) { @@ -1297,9 +1299,9 @@ public class EditCommand implements CommandI * feature was shifted left to cut position (not truncated), * so shift it back right */ - SequenceFeature shifted = new SequenceFeature(sf, sf.getBegin() - + length, sf.getEnd() + length, sf.getFeatureGroup(), - sf.getScore()); + SequenceFeature shifted = new SequenceFeature(sf, + sf.getBegin() + length, sf.getEnd() + length, + sf.getFeatureGroup(), sf.getScore()); seq.addSequenceFeature(shifted); seq.deleteFeature(sf); } @@ -1432,7 +1434,8 @@ public class EditCommand implements CommandI } else { - System.err.println("Can't undo edit action " + action); + jalview.bin.Console + .errPrintln("Can't undo edit action " + action); // throw new IllegalStateException("Can't undo edit action " + // action); } @@ -1490,8 +1493,7 @@ public class EditCommand implements CommandI */ private boolean systemGenerated; - public Edit(Action cmd, SequenceI[] sqs, int pos, int count, - char gap) + public Edit(Action cmd, SequenceI[] sqs, int pos, int count, char gap) { this.command = cmd; this.seqs = sqs; @@ -1500,8 +1502,7 @@ public class EditCommand implements CommandI this.gapChar = gap; } - Edit(Action cmd, SequenceI[] sqs, int pos, int count, - AlignmentI align) + Edit(Action cmd, SequenceI[] sqs, int pos, int count, AlignmentI align) { this(cmd, sqs, pos, count, align.getGapCharacter()); @@ -1526,8 +1527,8 @@ public class EditCommand implements CommandI * @param align * @param replace */ - Edit(Action cmd, SequenceI[] sqs, int pos, int count, - AlignmentI align, String replace) + Edit(Action cmd, SequenceI[] sqs, int pos, int count, AlignmentI align, + String replace) { this(cmd, sqs, pos, count, align); @@ -1624,25 +1625,25 @@ public class EditCommand implements CommandI } List added = new ArrayList<>(); List removed = new ArrayList<>(); - + SequenceFeaturesI featureStore = seq.getFeatures(); if (toPosition < fromPosition || featureStore == null) { return; } - + int cutStartPos = fromPosition; int cutEndPos = toPosition; int cutWidth = cutEndPos - cutStartPos + 1; - + synchronized (featureStore) { /* * get features that overlap the cut region */ - List toAmend = featureStore.findFeatures( - cutStartPos, cutEndPos); - + List toAmend = featureStore.findFeatures(cutStartPos, + cutEndPos); + /* * add any contact features that span the cut region * (not returned by findFeatures) @@ -1669,7 +1670,7 @@ public class EditCommand implements CommandI int newEnd = sfEnd; boolean toDelete = false; boolean follows = false; - + if (sfBegin >= cutStartPos && sfEnd <= cutEndPos) { /* @@ -1708,7 +1709,7 @@ public class EditCommand implements CommandI toDelete = true; } } - + seq.deleteFeature(sf); if (!follows) { @@ -1725,7 +1726,7 @@ public class EditCommand implements CommandI } } } - + /* * and left shift any features lying to the right of the cut region */