Jalview.isJS() --> Platform.isJS(), DBRefEntry[] --> List<DBRefEntry>
[jalview.git] / src / jalview / io / StockholmFile.java
index 0e73af1..84e629e 100644 (file)
@@ -76,9 +76,9 @@ public class StockholmFile extends AlignFile
 {
   private static final String ANNOTATION = "annotation";
 
-  private static final Regex OPEN_PAREN = new Regex("(<|\\[)", "(");
-
-  private static final Regex CLOSE_PAREN = new Regex("(>|\\])", ")");
+//  private static final Regex OPEN_PAREN = new Regex("(<|\\[)", "(");
+//
+//  private static final Regex CLOSE_PAREN = new Regex("(>|\\])", ")");
 
   public static final Regex DETECT_BRACKETS = new Regex(
           "(<|>|\\[|\\]|\\(|\\)|\\{|\\})");
@@ -239,8 +239,8 @@ public class StockholmFile extends AlignFile
     Regex openparen = new Regex("(<|\\[)", "(");
     Regex closeparen = new Regex("(>|\\])", ")");
 
-    // Detect if file is RNA by looking for bracket types
-    Regex detectbrackets = new Regex("(<|>|\\[|\\]|\\(|\\))");
+//    // Detect if file is RNA by looking for bracket types
+//    Regex detectbrackets = new Regex("(<|>|\\[|\\]|\\(|\\))");
 
     rend.optimize();
     p.optimize();
@@ -261,7 +261,7 @@ public class StockholmFile extends AlignFile
         // End of the alignment, pass stuff back
         this.noSeqs = seqs.size();
 
-        String seqdb, dbsource = null;
+        String dbsource = null;
         Regex pf = new Regex("PF[0-9]{5}(.*)"); // Finds AC for Pfam
         Regex rf = new Regex("RF[0-9]{5}(.*)"); // Finds AC for Rfam
         if (getAlignmentProperty("AC") != null)
@@ -941,28 +941,33 @@ public class StockholmFile extends AlignFile
     int max = 0;
     int maxid = 0;
     int in = 0;
-    Hashtable dataRef = null;
-    while ((in < s.length) && (s[in] != null))
+    int slen = s.length;
+    SequenceI seq;
+    Hashtable<String, String> dataRef = null;
+    while ((in < slen) && ((seq = s[in]) != null))
     {
-      String tmp = printId(s[in], jvSuffix);
-      max = Math.max(max, s[in].getLength());
+      String tmp = printId(seq, jvSuffix);
+      max = Math.max(max, seq.getLength());
 
       if (tmp.length() > maxid)
       {
         maxid = tmp.length();
       }
-      if (s[in].getDBRefs() != null)
+      List<DBRefEntry> seqrefs = seq.getDBRefs();
+      int ndb;
+      if (seqrefs != null && (ndb = seqrefs.size()) > 0)
       {
-        for (int idb = 0; idb < s[in].getDBRefs().length; idb++)
+        if (dataRef == null)
+        {
+          dataRef = new Hashtable<>();
+        }
+        for (int idb = 0; idb < ndb; idb++)
         {
-          if (dataRef == null)
-          {
-            dataRef = new Hashtable();
-          }
 
-          String datAs1 = s[in].getDBRefs()[idb].getSource().toString()
+          DBRefEntry ref = seqrefs.get(idb);
+          String datAs1 = ref.getSource().toString()
                   + " ; "
-                  + s[in].getDBRefs()[idb].getAccessionId().toString();
+                  + ref.getAccessionId().toString();
           dataRef.put(tmp, datAs1);
         }
       }
@@ -989,7 +994,7 @@ public class StockholmFile extends AlignFile
     // output database accessions
     if (dataRef != null)
     {
-      Enumeration en = dataRef.keys();
+      Enumeration<String> en = dataRef.keys();
       while (en.hasMoreElements())
       {
         Object idd = en.nextElement();
@@ -1010,13 +1015,13 @@ public class StockholmFile extends AlignFile
     }
 
     // output annotations
-    while (i < s.length && s[i] != null)
+    while (i < slen && (seq = s[i]) != null)
     {
-      AlignmentAnnotation[] alAnot = s[i].getAnnotation();
+      AlignmentAnnotation[] alAnot = seq.getAnnotation();
       if (alAnot != null)
       {
         Annotation[] ann;
-        for (int j = 0; j < alAnot.length; j++)
+        for (int j = 0, nj = alAnot.length; j < nj; j++)
         {
 
           String key = type2id(alAnot[j].label);
@@ -1036,37 +1041,38 @@ public class StockholmFile extends AlignFile
 
           // out.append("#=GR ");
           out.append(new Format("%-" + maxid + "s").form(
-                  "#=GR " + printId(s[i], jvSuffix) + " " + key + " "));
+                  "#=GR " + printId(seq, jvSuffix) + " " + key + " "));
           ann = alAnot[j].annotations;
-          String seq = "";
-          for (int k = 0; k < ann.length; k++)
+          String sseq = "";
+          for (int k = 0, nk = ann.length; k < nk; k++)
           {
-            seq += outputCharacter(key, k, isrna, ann, s[i]);
+            sseq += outputCharacter(key, k, isrna, ann, seq);
           }
-          out.append(seq);
+          out.append(sseq);
           out.append(newline);
         }
       }
 
       out.append(new Format("%-" + maxid + "s")
-              .form(printId(s[i], jvSuffix) + " "));
-      out.append(s[i].getSequenceAsString());
+              .form(printId(seq, jvSuffix) + " "));
+      out.append(seq.getSequenceAsString());
       out.append(newline);
       i++;
     }
 
     // alignment annotation
     AlignmentAnnotation aa;
-    if (al.getAlignmentAnnotation() != null)
+    AlignmentAnnotation[] an = al.getAlignmentAnnotation();
+    if (an != null)
     {
-      for (int ia = 0; ia < al.getAlignmentAnnotation().length; ia++)
+      for (int ia = 0, na = an.length; ia < na; ia++)
       {
-        aa = al.getAlignmentAnnotation()[ia];
+        aa = an[ia];
         if (aa.autoCalculated || !aa.visible || aa.sequenceRef != null)
         {
           continue;
         }
-        String seq = "";
+        String sseq = "";
         String label;
         String key = "";
         if (aa.label.equals("seq"))
@@ -1094,11 +1100,11 @@ public class StockholmFile extends AlignFile
         out.append(
                 new Format("%-" + maxid + "s").form("#=GC " + label + " "));
         boolean isrna = aa.isValidStruc();
-        for (int j = 0; j < aa.annotations.length; j++)
+        for (int j = 0, nj = aa.annotations.length; j < nj; j++)
         {
-          seq += outputCharacter(key, j, isrna, aa.annotations, null);
+          sseq += outputCharacter(key, j, isrna, aa.annotations, null);
         }
-        out.append(seq);
+        out.append(sseq);
         out.append(newline);
       }
     }