Merge branch 'task/JAL-3597memoryLeakTest' into develop
[jalview.git] / src / jalview / commands / EditCommand.java
index 1a227c5..d0790c8 100644 (file)
@@ -24,6 +24,7 @@ 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 +527,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 +619,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 +764,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();
@@ -837,7 +838,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());
 
             if (command.oldds == null)
             {
@@ -1443,45 +1444,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 +1562,16 @@ public class EditCommand implements CommandI
     {
       return gapChar;
     }
+
+    public void setSystemGenerated(boolean b)
+    {
+      systemGenerated = b;
+    }
+
+    public boolean isSystemGenerated()
+    {
+      return systemGenerated;
+    }
   }
 
   /**