0211bb14f7814dd3ccc357480c5f04f3621c39c9
[jalview.git] / src / jalview / ws / dbsources / Pfam.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.ws.dbsources;
22
23 import jalview.datamodel.AlignmentI;
24 import jalview.datamodel.DBRefEntry;
25 import jalview.ws.seqfetcher.DbSourceProxy;
26
27 import com.stevesoft.pat.Regex;
28
29 /**
30  * TODO: later PFAM is a complex datasource - it could return a tree in addition
31  * to an alignment TODO: create interface to pass alignment properties and tree
32  * back to sequence fetcher
33  * 
34  * @author JimP
35  * 
36  */
37 abstract public class Pfam extends Xfam implements DbSourceProxy
38 {
39
40   public Pfam()
41   {
42     super();
43     // all extensions of this PFAM source base class are DOMAINDB sources
44     addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);
45     addDbSourceProperty(jalview.datamodel.DBRefSource.ALIGNMENTDB);
46   }
47
48   /*
49    * (non-Javadoc)
50    * 
51    * @see jalview.ws.DbSourceProxy#getAccessionSeparator()
52    */
53   public String getAccessionSeparator()
54   {
55     // TODO Auto-generated method stub
56     return null;
57   }
58
59   /*
60    * (non-Javadoc)
61    * 
62    * @see jalview.ws.DbSourceProxy#getAccessionValidator()
63    */
64   public Regex getAccessionValidator()
65   {
66     // TODO Auto-generated method stub
67     return null;
68   }
69
70   /*
71    * (non-Javadoc)
72    * 
73    * @see jalview.ws.DbSourceProxy#getDbSource() public String getDbSource() { *
74    * this doesn't work - DbSource is key for the hash of DbSourceProxy instances
75    * - 1:many mapping for DbSource to proxy will be lost. * suggest : PFAM is an
76    * 'alignment' source - means proxy is higher level than a sequence source.
77    * return jalview.datamodel.DBRefSource.PFAM; }
78    */
79
80   /*
81    * (non-Javadoc)
82    * 
83    * @see jalview.ws.DbSourceProxy#getDbSourceProperties() public Hashtable
84    * getDbSourceProperties() {
85    * 
86    * return null; }
87    */
88
89   /*
90    * (non-Javadoc)
91    * 
92    * @see jalview.ws.DbSourceProxy#getDbVersion()
93    */
94   @Override
95   public String getDbVersion()
96   {
97     // TODO Auto-generated method stub
98     return null;
99   }
100
101   /**
102    * Returns base URL for selected Pfam alignment type
103    * 
104    * @return PFAM URL stub for this DbSource
105    */
106   @Override
107   protected abstract String getXFAMURL();
108
109   /*
110    * (non-Javadoc)
111    * 
112    * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])
113    */
114   public AlignmentI getSequenceRecords(String queries) throws Exception
115   {
116     // TODO: this is not a perfect implementation. We need to be able to add
117     // individual references to each sequence in each family alignment that's
118     // retrieved.
119     startQuery();
120     AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getXFAMURL()
121             + queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,
122             "STH");
123     for (int s = 0, sNum = rcds.getHeight(); s < sNum; s++)
124     {
125       rcds.getSequenceAt(s).addDBRef(
126               new DBRefEntry(jalview.datamodel.DBRefSource.PFAM,
127               // getDbSource(),
128                       getDbVersion(), queries.trim().toUpperCase()));
129       if (!getDbSource().equals(jalview.datamodel.DBRefSource.PFAM))
130       { // add the specific ref too
131         rcds.getSequenceAt(s).addDBRef(
132                 new DBRefEntry(getDbSource(), getDbVersion(), queries
133                         .trim().toUpperCase()));
134       }
135     }
136     stopQuery();
137     return rcds;
138   }
139
140   /*
141    * (non-Javadoc)
142    * 
143    * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
144    */
145   public boolean isValidReference(String accession)
146   {
147     return accession.indexOf("PF") == 0;
148   }
149
150   /*
151    * public String getDbName() { return "PFAM"; // getDbSource(); }
152    */
153
154   public String getXfamSource()
155   {
156     return jalview.datamodel.DBRefSource.PFAM;
157   }
158
159 }