4136e62834a95b9ec8159b4970df9675affde5b6
[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.AppletFormatAdapter;\r
13 import jalview.io.FastaFile;\r
14 import jalview.io.StockholmFile;\r
15 import jalview.ws.seqfetcher.DbSourceProxy;\r
16 import jalview.ws.seqfetcher.DbSourceProxyImpl;\r
17 /**\r
18  * TODO: later PFAM is a complex datasource - it could return a tree in addition to an alignment\r
19  * TODO: create interface to pass alignment properties and tree back to sequence fetcher\r
20  * @author JimP\r
21  *\r
22  */\r
23 abstract public class Pfam extends DbSourceProxyImpl implements DbSourceProxy\r
24 {\r
25 \r
26   public Pfam()\r
27   {\r
28     super();\r
29     // all extensions of this PFAM source base class are DOMAINDB sources \r
30     addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);\r
31   }\r
32 \r
33   /* (non-Javadoc)\r
34    * @see jalview.ws.DbSourceProxy#getAccessionSeparator()\r
35    */\r
36   public String getAccessionSeparator()\r
37   {\r
38     // TODO Auto-generated method stub\r
39     return null;\r
40   }\r
41 \r
42   /* (non-Javadoc)\r
43    * @see jalview.ws.DbSourceProxy#getAccessionValidator()\r
44    */\r
45   public Regex getAccessionValidator()\r
46   {\r
47     // TODO Auto-generated method stub\r
48     return null;\r
49   }\r
50 \r
51   /* (non-Javadoc)\r
52    * @see jalview.ws.DbSourceProxy#getDbSource()\r
53   public String getDbSource()\r
54   {\r
55     ** this doesn't work - DbSource is key for the hash of DbSourceProxy instances - 1:many mapping for DbSource to proxy will be lost.\r
56     ** suggest : PFAM is an 'alignment' source - means proxy is higher level than a sequence source.\r
57     return jalview.datamodel.DBRefSource.PFAM;\r
58   }\r
59    */\r
60 \r
61   \r
62   /* (non-Javadoc)\r
63    * @see jalview.ws.DbSourceProxy#getDbSourceProperties()\r
64   public Hashtable getDbSourceProperties()\r
65   {\r
66     \r
67     return null;\r
68   }\r
69  */\r
70   \r
71   /* (non-Javadoc)\r
72    * @see jalview.ws.DbSourceProxy#getDbVersion()\r
73    */\r
74   public String getDbVersion()\r
75   {\r
76     // TODO Auto-generated method stub\r
77     return null;\r
78   }\r
79   /**\r
80    * \r
81    * @return PFAM URL stub for this DbSource\r
82    */\r
83   protected abstract String getPFAMURL();\r
84   /* (non-Javadoc)\r
85    * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])\r
86    */\r
87   public AlignmentI getSequenceRecords(String queries) throws Exception\r
88   {\r
89     // 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
90     startQuery();\r
91     AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getPFAMURL()+queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,"STH");\r
92     for (int s=0,sNum=rcds.getHeight(); s<sNum;s++)\r
93     {\r
94       rcds.getSequenceAt(s).addDBRef(new DBRefEntry(jalview.datamodel.DBRefSource.PFAM,\r
95               // getDbSource(), \r
96               getDbVersion(), queries.trim().toUpperCase()));\r
97       if (!getDbSource().equals(jalview.datamodel.DBRefSource.PFAM))\r
98       {         // add the specific ref too\r
99         rcds.getSequenceAt(s).addDBRef(\r
100                 new DBRefEntry( getDbSource(), \r
101                         getDbVersion(), queries.trim().toUpperCase()));\r
102       }\r
103     }\r
104     stopQuery();\r
105     return rcds;\r
106   }\r
107 \r
108   /* (non-Javadoc)\r
109    * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)\r
110    */\r
111   public boolean isValidReference(String accession)\r
112   {\r
113     return accession.indexOf("PF")==0;\r
114   }\r
115 \r
116 \r
117   /*public String getDbName()\r
118   {\r
119     return "PFAM"; // getDbSource();\r
120   } */\r
121 }\r