Merge branch 'patch/JAL-3874_newJmolAndGradleDedup' into develop
[jalview.git] / src / jalview / commands / EditCommand.java
index 1a227c5..30595bc 100644 (file)
  */
 package jalview.commands;
 
+import java.util.Locale;
+
 import jalview.analysis.AlignSeq;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.ContiguousI;
 import jalview.datamodel.Range;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
@@ -526,8 +529,8 @@ public class EditCommand implements CommandI
         command.string[i] = sequence.getSequence(command.position,
                 command.position + command.number);
         SequenceI oldds = sequence.getDatasetSequence();
-        Range cutPositions = sequence.findPositions(command.position + 1,
-                command.position + command.number);
+        ContiguousI cutPositions = sequence.findPositions(
+                command.position + 1, command.position + command.number);
         boolean cutIsInternal = cutPositions != null
                 && sequence.getStart() != cutPositions
                 .getBegin() && sequence.getEnd() != cutPositions.getEnd();
@@ -618,8 +621,8 @@ public class EditCommand implements CommandI
          */
         if (command.alIndex[i] < command.al.getHeight())
         {
-          List<SequenceI> sequences;
-          synchronized (sequences = command.al.getSequences())
+          List<SequenceI> sequences = command.al.getSequences();
+          synchronized (sequences)
           {
             if (!(command.alIndex[i] < 0))
             {
@@ -763,9 +766,9 @@ public class EditCommand implements CommandI
        * EditCommand.PASTE, sequences, 0, alignment.getWidth(), alignment) );
        * 
        */
-
-      Range beforeEditedPositions = command.seqs[i].findPositions(1, start);
-      Range afterEditedPositions = command.seqs[i]
+      ContiguousI beforeEditedPositions = command.seqs[i].findPositions(1,
+              start);
+      ContiguousI afterEditedPositions = command.seqs[i]
               .findPositions(end + 1, command.seqs[i].getLength());
       
       oldstring = command.seqs[i].getSequenceAsString();
@@ -788,7 +791,7 @@ 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)
@@ -837,7 +840,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)
             {
@@ -890,7 +893,7 @@ 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)
@@ -1443,45 +1446,51 @@ public class EditCommand implements CommandI
 
   public class Edit
   {
-    private SequenceI[] oldds;
+    SequenceI[] oldds;
 
     /**
      * start and end of sequence prior to edit
      */
-    private Range[] oldStartEnd;
+    Range[] oldStartEnd;
 
-    private boolean fullAlignmentHeight = false;
+    boolean fullAlignmentHeight = false;
 
-    private Map<SequenceI, AlignmentAnnotation[]> deletedAnnotationRows;
+    Map<SequenceI, AlignmentAnnotation[]> deletedAnnotationRows;
 
-    private Map<String, Annotation[]> deletedAnnotations;
+    Map<String, Annotation[]> deletedAnnotations;
 
     /*
      * features deleted by the cut (re-add on Undo)
      * (including the original of any shortened features)
      */
-    private Map<SequenceI, List<SequenceFeature>> deletedFeatures;
+    Map<SequenceI, List<SequenceFeature>> deletedFeatures;
 
     /*
      * shortened features added by the cut (delete on Undo)
      */
-    private Map<SequenceI, List<SequenceFeature>> truncatedFeatures;
+    Map<SequenceI, List<SequenceFeature>> truncatedFeatures;
 
-    private AlignmentI al;
+    AlignmentI al;
 
-    final private Action command;
+    final Action command;
 
     char[][] string;
 
     SequenceI[] seqs;
 
-    private int[] alIndex;
+    int[] alIndex;
 
-    private int position;
+    int position;
 
-    private int number;
+    int number;
 
-    private char gapChar;
+    char gapChar;
+
+    /*
+     * flag that identifies edits inserted to balance 
+     * user edits in a 'locked editing' region
+     */
+    private boolean systemGenerated;
 
     public Edit(Action cmd, SequenceI[] sqs, int pos, int count,
             char gap)
@@ -1555,6 +1564,16 @@ public class EditCommand implements CommandI
     {
       return gapChar;
     }
+
+    public void setSystemGenerated(boolean b)
+    {
+      systemGenerated = b;
+    }
+
+    public boolean isSystemGenerated()
+    {
+      return systemGenerated;
+    }
   }
 
   /**