Merge branch 'develop' into releases/Release_2_11_3_Branch
[jalview.git] / src / jalview / io / SequenceAnnotationReport.java
index 369839a..0a1172c 100644 (file)
  */
 package jalview.io;
 
-import java.util.Locale;
-
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import jalview.api.FeatureColourI;
@@ -55,7 +55,7 @@ public class SequenceAnnotationReport
 
   private static final int MAX_REFS_PER_SOURCE = 4;
 
-  private static final int MAX_SOURCES = 40;
+  private static final int MAX_SOURCES = 5;
 
   private static String linkImageURL;
 
@@ -79,10 +79,19 @@ public class SequenceAnnotationReport
       {
         return 1;
       }
+      
       String s1 = ref1.getSource();
       String s2 = ref2.getSource();
       boolean s1Primary = DBRefSource.isPrimarySource(s1);
       boolean s2Primary = DBRefSource.isPrimarySource(s2);
+      if (ref1.isCanonical() && !ref2.isCanonical())
+      {
+        return -1;
+      }
+      if (!ref1.isCanonical() && ref2.isCanonical())
+      {
+        return 1;
+      }
       if (s1Primary && !s2Primary)
       {
         return -1;
@@ -423,7 +432,7 @@ public class SequenceAnnotationReport
             }
           } catch (Exception x)
           {
-            System.err.println(
+            jalview.bin.Console.errPrintln(
                     "problem when creating links from " + urlstring);
             x.printStackTrace();
           }
@@ -446,7 +455,7 @@ public class SequenceAnnotationReport
     UrlLink urlLink = new UrlLink(link);
     if (!urlLink.isValid())
     {
-      System.err.println(urlLink.getInvalidMessage());
+      jalview.bin.Console.errPrintln(urlLink.getInvalidMessage());
       return null;
     }
 
@@ -536,12 +545,19 @@ public class SequenceAnnotationReport
   protected int appendDbRefs(final StringBuilder sb, SequenceI ds,
           boolean summary)
   {
-    List<DBRefEntry> dbrefs = ds.getDBRefs();
-    if (dbrefs == null)
+    List<DBRefEntry> dbrefs, dbrefset = ds.getDBRefs();
+
+    if (dbrefset == null)
     {
       return 0;
     }
 
+    // PATCH for JAL-3980 defensive copy
+
+    dbrefs = new ArrayList<DBRefEntry>();
+
+    dbrefs.addAll(dbrefset);
+
     // note this sorts the refs held on the sequence!
     dbrefs.sort(comparator);
     boolean ellipsis = false;
@@ -586,7 +602,7 @@ public class SequenceAnnotationReport
         lineLength += accessionId.length() + 1;
         if (countForSource > 1 && summary)
         {
-          sb.append(", ").append(accessionId);
+          sb.append(",\n ").append(accessionId);
           lineLength++;
         }
         else
@@ -604,11 +620,11 @@ public class SequenceAnnotationReport
     }
     if (moreSources)
     {
-      sb.append("<br/>").append(source).append(COMMA).append(ELLIPSIS);
+      sb.append("<br/>\n").append(source).append(COMMA).append(ELLIPSIS);
     }
     if (ellipsis)
     {
-      sb.append("<br/>(");
+      sb.append("<br/>\n(");
       sb.append(MessageManager.getString("label.output_seq_details"));
       sb.append(")");
     }