X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcommands%2FEditCommand.java;h=62ef66086e78bd53271b95ac642db2bacdcc7b12;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=30595bce2afcec658ce343e5ee7067bcd3310c03;hpb=9d2408483e451285fd555c3cd6e0273977acbaa7;p=jalview.git diff --git a/src/jalview/commands/EditCommand.java b/src/jalview/commands/EditCommand.java index 30595bc..62ef660 100644 --- a/src/jalview/commands/EditCommand.java +++ b/src/jalview/commands/EditCommand.java @@ -118,6 +118,7 @@ public class EditCommand implements CommandI return null; } }; + public abstract Action getUndoAction(); }; @@ -532,16 +533,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) { @@ -566,15 +567,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); } } } @@ -753,7 +753,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, @@ -770,7 +771,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]); @@ -791,17 +792,18 @@ public class EditCommand implements CommandI String nogapold = AlignSeq.extractGaps(Comparison.GapChars, new String(command.string[i])); - if (!nogaprep.toLowerCase(Locale.ROOT).equals(nogapold.toLowerCase(Locale.ROOT))) + 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) { @@ -811,7 +813,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 @@ -823,15 +825,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.. @@ -876,9 +874,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) @@ -893,7 +890,8 @@ public class EditCommand implements CommandI // new // start/end String nogapalseq = AlignSeq.extractGaps(Comparison.GapChars, - command.seqs[i].getSequenceAsString().toUpperCase(Locale.ROOT)); + command.seqs[i].getSequenceAsString() + .toUpperCase(Locale.ROOT)); int newStart = command.seqs[i].getDatasetSequence() .getSequenceAsString().indexOf(nogapalseq); if (newStart == -1) @@ -1025,7 +1023,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) { @@ -1299,9 +1298,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); } @@ -1492,8 +1491,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; @@ -1502,8 +1500,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()); @@ -1528,8 +1525,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); @@ -1626,25 +1623,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) @@ -1671,7 +1668,7 @@ public class EditCommand implements CommandI int newEnd = sfEnd; boolean toDelete = false; boolean follows = false; - + if (sfBegin >= cutStartPos && sfEnd <= cutEndPos) { /* @@ -1710,7 +1707,7 @@ public class EditCommand implements CommandI toDelete = true; } } - + seq.deleteFeature(sf); if (!follows) { @@ -1727,7 +1724,7 @@ public class EditCommand implements CommandI } } } - + /* * and left shift any features lying to the right of the cut region */