JAL-4091 JAL-4147 - revised annotation label display so consecutive runs of rows...
[jalview.git] / src / jalview / analysis / AnnotationSorter.java
index 92ed9be..0f0cf68 100644 (file)
@@ -156,8 +156,15 @@ public class AnnotationSorter
       {
         return showAutocalcAbove ? 1 : -1;
       }
-      int sequenceOrder = compareSequences(o1, o2);
-      return sequenceOrder == 0 ? compareLabels(o1, o2) : sequenceOrder;
+      int computedOrder = compareSequences(o1, o2);
+      if (computedOrder==0) {
+        computedOrder = compareLabels(o1, o2);
+      }
+      if (computedOrder==0)
+      {
+        computedOrder = compareDescriptions(o1,o2);
+      }
+      return computedOrder;
     }
 
     @Override
@@ -358,6 +365,29 @@ public class AnnotationSorter
     }
     String label1 = o1.label;
     String label2 = o2.label;
+    return compareString(label1,label2);
+  }
+
+  /**
+   * Non-case-sensitive comparison of annotation descriptions. Returns zero if either
+   * argument is null.
+   * 
+   * @param o1
+   * @param o2
+   * @return
+   */
+  private int compareDescriptions(AlignmentAnnotation o1, AlignmentAnnotation o2)
+  {
+    if (o1 == null || o2 == null)
+    {
+      return 0;
+    }
+    String label1 = o1.description;
+    String label2 = o2.description;
+    return compareString(label1,label2);
+  }
+  private int compareString(String label1, String label2)
+  {
     if (label1 == null && label2 == null)
     {
       return 0;