d935db92629803b4e07ec5d860409f12f781d582
[jalview.git] / src / jalview / ws / dbsources / Pfam.java
1 /**\r
2  * \r
3  */\r
4 package jalview.ws.dbsources;\r
5 \r
6 import java.util.Hashtable;\r
7 \r
8 import com.stevesoft.pat.Regex;\r
9 \r
10 import jalview.datamodel.AlignmentI;\r
11 import jalview.datamodel.DBRefEntry;\r
12 import jalview.io.FastaFile;\r
13 import jalview.ws.seqfetcher.DbSourceProxy;\r
14 import jalview.ws.seqfetcher.DbSourceProxyImpl;\r
15 /**\r
16  * TODO: later PFAM is a complex datasource - it currently returns a seed alignment, but could optionally return a full alignment.\r
17  * TODO: later PFAM is a complex datasource - it could return a tree in addition to an alignment\r
18  * TODO: HP: Incorporate jalview.gui.SequenceFetcher retrieval code here.\r
19  * @author JimP\r
20  *\r
21  */\r
22 public class Pfam extends DbSourceProxyImpl implements DbSourceProxy\r
23 {\r
24 \r
25   public Pfam()\r
26   {\r
27     super();\r
28     \r
29   }\r
30 \r
31   /* (non-Javadoc)\r
32    * @see jalview.ws.DbSourceProxy#getAccessionSeparator()\r
33    */\r
34   public String getAccessionSeparator()\r
35   {\r
36     // TODO Auto-generated method stub\r
37     return null;\r
38   }\r
39 \r
40   /* (non-Javadoc)\r
41    * @see jalview.ws.DbSourceProxy#getAccessionValidator()\r
42    */\r
43   public Regex getAccessionValidator()\r
44   {\r
45     // TODO Auto-generated method stub\r
46     return null;\r
47   }\r
48 \r
49   /* (non-Javadoc)\r
50    * @see jalview.ws.DbSourceProxy#getDbSource()\r
51    */\r
52   public String getDbSource()\r
53   {\r
54     return jalview.datamodel.DBRefSource.PFAM;\r
55   }\r
56 \r
57   /* (non-Javadoc)\r
58    * @see jalview.ws.DbSourceProxy#getDbSourceProperties()\r
59    */\r
60   public Hashtable getDbSourceProperties()\r
61   {\r
62     // TODO Auto-generated method stub\r
63     return null;\r
64   }\r
65 \r
66   /* (non-Javadoc)\r
67    * @see jalview.ws.DbSourceProxy#getDbVersion()\r
68    */\r
69   public String getDbVersion()\r
70   {\r
71     // TODO Auto-generated method stub\r
72     return null;\r
73   }\r
74   public static String PFAMURL = "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=";\r
75   /* (non-Javadoc)\r
76    * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])\r
77    */\r
78   public AlignmentI getSequenceRecords(String queries) throws Exception\r
79   {\r
80     // TODO: this is not a perfect implementation. We need to be able to add individual references to each sequence in each family alignment that's retrieved. \r
81     startQuery();\r
82     results = new StringBuffer();\r
83     // split queries into many little ones.\r
84     results.append(new FastaFile(\r
85                 PFAMURL+queries.trim().toUpperCase(), "URL").print());\r
86     stopQuery();\r
87     AlignmentI rcds = parseResult(results.toString());\r
88     for (int s=0,sNum=rcds.getHeight(); s<sNum;s++)\r
89     {\r
90       rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getDbSource(), getDbVersion(), queries.trim().toUpperCase()));\r
91     }\r
92     return rcds;\r
93   }\r
94 \r
95   /* (non-Javadoc)\r
96    * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)\r
97    */\r
98   public boolean isValidReference(String accession)\r
99   {\r
100     return accession.indexOf("PF")==0;\r
101   }\r
102 \r
103   public String getTestQuery()\r
104   {\r
105     return "PF00535";\r
106   }\r
107 \r
108   public String getDbName()\r
109   {\r
110     return getDbSource();\r
111   }\r
112 }\r