JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / io / RnamlFile.java
index 2b9a7b0..2948c92 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.io;
 
+import jalview.analysis.SecStrConsensus.SimpleBP;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+import jalview.util.MessageManager;
+
 import java.io.BufferedReader;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
 
-import jalview.analysis.SecStrConsensus.SimpleBP;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceI;
+import com.stevesoft.pat.Regex;
 
 import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax;
 import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
@@ -97,24 +100,29 @@ public class RnamlFile extends AlignFile
       _parse();
     } catch (ExceptionPermissionDenied pdx)
     {
-      errormessage = "Couldn't access datasource (" + pdx.getMessage()
-              + ")";
+      errormessage = MessageManager.formatMessage(
+              "exception.rnaml_couldnt_access_datasource",
+              new String[] { pdx.getMessage() });
       throw new IOException(pdx);
     } catch (ExceptionLoadingFailed lf)
     {
-      errormessage = "Couldn't process data as RNAML file ("
-              + lf.getMessage() + ")";
+      errormessage = MessageManager.formatMessage(
+              "exception.ranml_couldnt_process_data",
+              new String[] { lf.getMessage() });
       throw new IOException(lf);
     } catch (ExceptionFileFormatOrSyntax iff)
     {
-      errormessage = "Invalid RNAML file (" + iff.getMessage() + ")";
+      errormessage = MessageManager.formatMessage(
+              "exception.ranml_invalid_file",
+              new String[] { iff.getMessage() });
       throw new IOException(iff);
     } catch (Exception x)
     {
       error = true;
-      errormessage = "Problem parsing data as RNAML (" + x.getMessage()
-              + ")";
-      throw new IOException("Couldn't parse the datasource as RNAML", x);
+      errormessage = MessageManager.formatMessage(
+              "exception.ranml_problem_parsing_data",
+              new String[] { x.getMessage() });
+      throw new IOException(errormessage, x);
     }
   }
 
@@ -141,6 +149,14 @@ public class RnamlFile extends AlignFile
       int end = seq.length();
 
       id = current.getName();
+      if (id == null || id.trim().length() == 0)
+      {
+        id = safeName(getDataName());
+        if (result.size() > 1)
+        {
+          id += "." + i;
+        }
+      }
       seqs[i] = new Sequence(id, seq, begin, end);
 
       seqs[i].setEnd(seqs[i].findPosition(seqs[i].getLength()));
@@ -159,8 +175,11 @@ public class RnamlFile extends AlignFile
                         annot[k]).charAt(0), 0f);
       }
 
-      AlignmentAnnotation align = new AlignmentAnnotation("Sec. str.",
-              current.getID(), ann);
+      AlignmentAnnotation align = new AlignmentAnnotation(
+              "Secondary Structure",
+              current.getID().trim().length() > 0 ? "Secondary Structure for "
+                      + current.getID()
+                      : "", ann);
 
       seqs[i].addAlignmentAnnotation(align);
       seqs[i].setRNA(result.get(i));
@@ -206,13 +225,18 @@ public class RnamlFile extends AlignFile
   private String safeName(String dataName)
   {
     int b = 0;
-    while ((b = dataName.indexOf("/")) > -1 && b < dataName.length())
+    if ((b = dataName.lastIndexOf(".")) > 0)
     {
-      dataName = dataName.substring(b + 1).trim();
-
+      dataName = dataName.substring(0, b - 1);
+    }
+    b = 0;
+    Regex m = new Regex("[\\/]?([-A-Za-z0-9]+)\\.?");
+    String mm = dataName;
+    while (m.searchFrom(dataName, b))
+    {
+      mm = m.stringMatched();
+      b = m.matchedTo();
     }
-    int e = (dataName.length() - dataName.indexOf(".")) + 1;
-    dataName = dataName.substring(1, e).trim();
-    return dataName;
+    return mm;
   }
 }