JAL-518 better test coverage and support for case preservation
[jalview.git] / src / jalview / commands / JustifyLeftOrRightCommand.java
index f83f754..2559662 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.ContiguousI;
 import jalview.datamodel.SequenceI;
+import jalview.util.Comparison;
 
 public class JustifyLeftOrRightCommand extends EditCommand
 {
@@ -57,6 +58,11 @@ public class JustifyLeftOrRightCommand extends EditCommand
       {
         continue;
       }
+      char[] range = seq.getSequence(from, to+1);
+      if (range==null || range.length==0)
+      {
+        continue;
+      }
       int dsstart = seq.getDatasetSequence().getStart();
       char[] sqchar = seq.getDatasetSequence().getSequence(
               -dsstart + cont.getBegin(), -dsstart + cont.getEnd() + 1);
@@ -72,9 +78,12 @@ public class JustifyLeftOrRightCommand extends EditCommand
         alseq[gapstart + gp] = gc;
       }
 
-      for (int sqp = 0; sqp < sqchar.length; sqp++)
+      for (int sqp = 0,insp=0; sqp<alseq.length; sqp++)
       {
-        alseq[sqp + sqstart] = sqchar[sqp];
+        if (sqp < range.length && !Comparison.isGap(range[sqp]))
+        {
+          alseq[insp++ + sqstart] = range[sqp];
+        }
       }
       SequenceI[] sqa = new SequenceI[1];
       sqa[0] = seq;
@@ -82,9 +91,6 @@ public class JustifyLeftOrRightCommand extends EditCommand
       addEdit(new jalview.commands.EditCommand.Edit(
               jalview.commands.EditCommand.Action.REPLACE, sqa, from,
               to + 1, al, new String(alseq)));
-      // addEdit(new jalview.commands.EditCommand("justify",
-      // jalview.commands.EditCommand.Action.REPLACE,
-      // new String(alseq), sqa, from, to + 1, al).getEdit(0));
     }
 
     performEdit(0, null);