JAL-1551 spotlessApply
[jalview.git] / src / jalview / analysis / AnnotationSorter.java
index 2f556f1..1f2e78f 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.analysis;
 
+import java.util.Locale;
+
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
@@ -154,8 +156,16 @@ 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
@@ -356,6 +366,31 @@ 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;
@@ -368,7 +403,8 @@ public class AnnotationSorter
     {
       return 1;
     }
-    return label1.toUpperCase().compareTo(label2.toUpperCase());
+    return label1.toUpperCase(Locale.ROOT)
+            .compareTo(label2.toUpperCase(Locale.ROOT));
   }
 
   /**