*/
package jalview.commands;
+import java.util.Locale;
+
import jalview.analysis.AlignSeq;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
return null;
}
};
+
public abstract Action getUndoAction();
};
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)
{
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);
}
}
}
{
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,
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]);
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)
{
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
? 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..
// old ds and edited ds are different, so
// create the new dataset sequence
SequenceI newds = new Sequence(oldds);
- newds.setSequence(fullseq.toUpperCase());
+ newds.setSequence(fullseq.toUpperCase(Locale.ROOT));
if (command.oldds == null)
{
&& 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)
// 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)
}
// 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)
{
* 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);
}
*/
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;
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());
* @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);
}
List<SequenceFeature> added = new ArrayList<>();
List<SequenceFeature> 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<SequenceFeature> toAmend = featureStore.findFeatures(
- cutStartPos, cutEndPos);
-
+ List<SequenceFeature> toAmend = featureStore.findFeatures(cutStartPos,
+ cutEndPos);
+
/*
* add any contact features that span the cut region
* (not returned by findFeatures)
int newEnd = sfEnd;
boolean toDelete = false;
boolean follows = false;
-
+
if (sfBegin >= cutStartPos && sfEnd <= cutEndPos)
{
/*
toDelete = true;
}
}
-
+
seq.deleteFeature(sf);
if (!follows)
{
}
}
}
-
+
/*
* and left shift any features lying to the right of the cut region
*/