JAL-3032 adds Java 8 functionality (2/2)
[jalview.git] / src2 / fr / orsay / lri / varna / factories / StockholmIO.java
diff --git a/src2/fr/orsay/lri/varna/factories/StockholmIO.java b/src2/fr/orsay/lri/varna/factories/StockholmIO.java
new file mode 100644 (file)
index 0000000..a237251
--- /dev/null
@@ -0,0 +1,91 @@
+package fr.orsay.lri.varna.factories;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+
+public class StockholmIO {
+       public static RNAAlignment readAlignementFromFile(String path) throws IOException
+       {
+               return StockholmIO.readAlignement(new BufferedReader(new FileReader(path)));
+       }
+       public static RNAAlignment readAlignementFromURL(String url) throws UnsupportedEncodingException, IOException
+       {
+               URL urlAb = new URL(url);
+               URLConnection urlConn = urlAb.openConnection(); 
+               urlConn.setUseCaches(false);
+               Reader r = new InputStreamReader(urlConn.getInputStream(),"UTF-8");
+               return readAlignement(new BufferedReader(r));
+       }
+
+       
+       /*public static Alignment readAlignement(Reader r) throws IOException
+       {
+               return readAlignement(new BufferedReader(r));
+       }*/
+       
+       public static RNAAlignment readAlignement(BufferedReader r) throws IOException
+       {
+               LinkedHashMap<String,StringBuffer> rawSeqs = new LinkedHashMap<String,StringBuffer>();
+               RNAAlignment result = new RNAAlignment();
+               String line = r.readLine(); 
+               String str = "";
+
+               while(line!=null)
+               {
+                       if (!line.startsWith("#"))
+                       {
+                               String[] data = line.split("\\s+");
+                               if (data.length>1)
+                               {
+                                       String seqName = data[0].trim();
+                                       String seq = data[1].trim();
+                                       if (!rawSeqs.containsKey(seqName))
+                                       {
+                                               rawSeqs.put(seqName,new StringBuffer());
+                                       }
+                                       StringBuffer val =  rawSeqs.get(seqName);
+                                       val.append(seq);
+                               }
+                               
+                       }
+                       else if (line.startsWith("#"))
+                       {
+                               String[] data = line.split("\\s+");
+                               if (line.startsWith("#=GC SS_cons"))
+                               {
+                                       str += data[2].trim();  
+                               }
+                               else if (line.startsWith("#=GS"))
+                               {
+                                       if (data[2].trim().equals("AC"))
+                                       {
+                                         result.setAccession(data[1].trim(),data[3].trim());
+                                         
+                                       }
+                               }
+                       }
+                               
+                       line = r.readLine(); 
+               }
+               result.setSecStr(str);
+               for(Map.Entry<String,StringBuffer> entry : rawSeqs.entrySet())
+               {
+                       String s = entry.getValue().toString();
+                       result.addSequence(entry.getKey(), s);
+               }
+               return result;
+       }
+}