JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / fr / orsay / lri / varna / factories / StockholmIO.java
1 package fr.orsay.lri.varna.factories;
2
3 import java.io.BufferedReader;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.io.Reader;
9 import java.io.UnsupportedEncodingException;
10 import java.net.MalformedURLException;
11 import java.net.URL;
12 import java.net.URLConnection;
13 import java.util.ArrayList;
14 import java.util.HashMap;
15 import java.util.LinkedHashMap;
16 import java.util.Map;
17
18
19 public class StockholmIO {
20         public static RNAAlignment readAlignementFromFile(String path) throws IOException
21         {
22                 return StockholmIO.readAlignement(new BufferedReader(new FileReader(path)));
23         }
24         public static RNAAlignment readAlignementFromURL(String url) throws UnsupportedEncodingException, IOException
25         {
26                 URL urlAb = new URL(url);
27                 URLConnection urlConn = urlAb.openConnection(); 
28                 urlConn.setUseCaches(false);
29                 Reader r = new InputStreamReader(urlConn.getInputStream(),"UTF-8");
30                 return readAlignement(new BufferedReader(r));
31         }
32
33         
34         /*public static Alignment readAlignement(Reader r) throws IOException
35         {
36                 return readAlignement(new BufferedReader(r));
37         }*/
38         
39         public static RNAAlignment readAlignement(BufferedReader r) throws IOException
40         {
41                 LinkedHashMap<String,StringBuffer> rawSeqs = new LinkedHashMap<String,StringBuffer>();
42                 RNAAlignment result = new RNAAlignment();
43                 String line = r.readLine(); 
44                 String str = "";
45
46                 while(line!=null)
47                 {
48                         if (!line.startsWith("#"))
49                         {
50                                 String[] data = line.split("\\s+");
51                                 if (data.length>1)
52                                 {
53                                         String seqName = data[0].trim();
54                                         String seq = data[1].trim();
55                                         if (!rawSeqs.containsKey(seqName))
56                                         {
57                                                 rawSeqs.put(seqName,new StringBuffer());
58                                         }
59                                         StringBuffer val =  rawSeqs.get(seqName);
60                                         val.append(seq);
61                                 }
62                                 
63                         }
64                         else if (line.startsWith("#"))
65                         {
66                                 String[] data = line.split("\\s+");
67                                 if (line.startsWith("#=GC SS_cons"))
68                                 {
69                                         str += data[2].trim();  
70                                 }
71                                 else if (line.startsWith("#=GS"))
72                                 {
73                                         if (data[2].trim().equals("AC"))
74                                         {
75                                           result.setAccession(data[1].trim(),data[3].trim());
76                                           
77                                         }
78                                 }
79                         }
80                                 
81                         line = r.readLine(); 
82                 }
83                 result.setSecStr(str);
84                 for(Map.Entry<String,StringBuffer> entry : rawSeqs.entrySet())
85                 {
86                         String s = entry.getValue().toString();
87                         result.addSequence(entry.getKey(), s);
88                 }
89                 return result;
90         }
91 }