JAL-1569 formatting
[jalview.git] / src / jalview / io / StockholmFile.java
index 9d21a40..85f9455 100644 (file)
@@ -23,7 +23,6 @@
  */
 package jalview.io;
 
-import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
@@ -33,6 +32,7 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.util.Format;
+import jalview.util.MessageManager;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -40,7 +40,9 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
@@ -185,7 +187,7 @@ public class StockholmFile extends AlignFile
     String version;
     // String id;
     Hashtable seqAnn = new Hashtable(); // Sequence related annotations
-    Hashtable seqs = new Hashtable();
+    LinkedHashMap<String, String> seqs = new LinkedHashMap<String, String>();
     Regex p, r, rend, s, x;
     // Temporary line for processing RNA annotation
     // String RNAannot = "";
@@ -198,7 +200,8 @@ public class StockholmFile extends AlignFile
     if (!r.search(nextLine()))
     {
       throw new IOException(
-              "This file is not in valid STOCKHOLM format: First line does not contain '# STOCKHOLM'");
+              MessageManager
+                      .getString("exception.stockholm_invalid_format"));
     }
     else
     {
@@ -258,12 +261,11 @@ public class StockholmFile extends AlignFile
           }
         }
         // logger.debug("Number of sequences: " + this.noSeqs);
-        Enumeration accs = seqs.keys();
-        while (accs.hasMoreElements())
+        for (Map.Entry<String, String> skey : seqs.entrySet())
         {
-          String acc = (String) accs.nextElement();
           // logger.debug("Processing sequence " + acc);
-          String seq = (String) seqs.remove(acc);
+          String acc = skey.getKey();
+          String seq = skey.getValue();
           if (maxLength < seq.length())
           {
             maxLength = seq.length();
@@ -367,6 +369,7 @@ public class StockholmFile extends AlignFile
                     AlignmentAnnotation an = (AlignmentAnnotation) vv
                             .elementAt(ii);
                     seqO.addAlignmentAnnotation(an);
+                    annotations.add(an);
                   }
                 }
               }
@@ -416,9 +419,11 @@ public class StockholmFile extends AlignFile
         if (!x.search(line))
         {
           // logger.error("Could not parse sequence line: " + line);
-          throw new IOException("Could not parse sequence line: " + line);
+          throw new IOException(MessageManager.formatMessage(
+                  "exception.couldnt_parse_sequence_line", new String[]
+                  { line }));
         }
-        String ns = (String) seqs.get(x.stringMatched(1));
+        String ns = seqs.get(x.stringMatched(1));
         if (ns == null)
         {
           ns = "";
@@ -528,7 +533,9 @@ public class StockholmFile extends AlignFile
           }
           else
           {
-            throw new IOException("Error parsing " + line);
+            throw new IOException(MessageManager.formatMessage(
+                    "exception.error_parsing_line", new String[]
+                    { line }));
           }
         }
         else if (annType.equals("GC"))
@@ -636,9 +643,13 @@ public class StockholmFile extends AlignFile
               strucAnn = new Hashtable();
             }
 
-            Vector newStruc = new Vector();
+            Vector<AlignmentAnnotation> newStruc = new Vector<AlignmentAnnotation>();
             parseAnnotationRow(newStruc, type, ns);
-
+            for (AlignmentAnnotation alan : newStruc)
+            {
+              alan.visible = false;
+            }
+            // annotations.addAll(newStruc);
             strucAnn.put(type, newStruc);
             seqAnn.put(acc, strucAnn);
           }
@@ -653,8 +664,9 @@ public class StockholmFile extends AlignFile
         }
         else
         {
-          throw new IOException("Unknown annotation detected: " + annType
-                  + " " + annContent);
+          throw new IOException(MessageManager.formatMessage(
+                  "exception.unknown_annotation_detected", new String[]
+                  { annType, annContent }));
         }
       }
     }
@@ -843,7 +855,9 @@ public class StockholmFile extends AlignFile
     {
       annot = (AlignmentAnnotation) e.nextElement();
       if (annot.label.equals(type))
+      {
         break;
+      }
       annot = null;
     }
     if (annot == null)
@@ -888,7 +902,9 @@ public class StockholmFile extends AlignFile
         for (int idb = 0; idb < s[in].getDBRef().length; idb++)
         {
           if (dataRef == null)
+          {
             dataRef = new Hashtable();
+          }
 
           String datAs1 = s[in].getDBRef()[idb].getSource().toString()
                   + " ; "
@@ -961,7 +977,9 @@ public class StockholmFile extends AlignFile
             String key = type2id(feature);
 
             if (key == null)
+            {
               continue;
+            }
 
             // out.append("#=GR ");
             out.append(new Format("%-" + maxid + "s").form("#=GR "
@@ -1022,26 +1040,37 @@ public class StockholmFile extends AlignFile
         String label;
 
         if (aa.label.equals("seq"))
+        {
           label = "seq_cons";
+        }
         else
+        {
           label = type2id(aa.label.toLowerCase()) + "_cons";
+        }
 
         if (label == null)
+        {
           label = aa.label;
+        }
 
         out.append(new Format("%-" + maxid + "s").form("#=GC " + label
                 + " "));
+        boolean isrna = aa.isValidStruc();
         for (int j = 0; j < aa.annotations.length; j++)
         {
           String ch = (aa.annotations[j] == null) ? "-"
                   : aa.annotations[j].displayCharacter;
-          if (ch.length() == 0)
+          if (ch.length() == 0 || isrna)
           {
             char ll = aa.annotations[j].secondaryStructure;
             if (Character.toString(ll).equals(" "))
+            {
               seq += "C";
+            }
             else
+            {
               seq += ll;
+            }
           }
           else if (ch.length() == 1)
           {
@@ -1122,7 +1151,7 @@ public class StockholmFile extends AlignFile
     }
     if (key != null)
     {
-      return (String) key;
+      return key;
     }
     System.err.println("Warning : Unknown Stockholm annotation type: "
             + type);