0c21d42d3969876752c0be2c7e6e3dbffeee249b
[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 java.util.Locale;
24
25 import jalview.bin.Cache;
26 import jalview.datamodel.DBRefSource;
27 import jalview.util.Platform;
28
29 import com.stevesoft.pat.Regex;
30
31 /**
32  * TODO: later PFAM is a complex datasource - it could return a tree in addition
33  * to an alignment TODO: create interface to pass alignment properties and tree
34  * back to sequence fetcher
35  * 
36  * @author JimP
37  * 
38  */
39 abstract public class Pfam extends Xfam
40 {
41     public static final String FULL="full",RP35="rp35",RP15="rp15",RP75="rp75",RP55="rp55",SEED="seed";
42         
43    public String getPfamDownloadURL(String id,String alType) {
44         String url = Cache.getDefault(PFAM_BASEURL_KEY,DEFAULT_PFAM_BASEURL);
45         url = url.replace("$PFAMID$",id);
46         url = url.replace("$ALTYPE$",alType);
47         return url;
48     }
49   static final String PFAM_BASEURL_KEY = "PFAM_INTERPRO_URL_TEMPLATE";
50
51   protected String alignmentType;
52   private static final String DEFAULT_PFAM_BASEURL = "https://www.ebi.ac.uk/interpro/wwwapi/entry/pfam/$PFAMID$/?annotation=alignment:$ALTYPE$&download";
53
54   static
55   {
56     Platform.addJ2SDirectDatabaseCall(DEFAULT_PFAM_BASEURL);
57   }
58
59   public Pfam()
60   {
61     super();
62   }
63
64     
65     String getURL(String queries)
66   {
67       return getPfamDownloadURL(
68                                  queries.trim().toUpperCase(Locale.ROOT), alignmentType);
69   }
70
71   /*
72    * (non-Javadoc)
73    * 
74    * @see jalview.ws.DbSourceProxy#getAccessionSeparator()
75    */
76   @Override
77   public String getAccessionSeparator()
78   {
79     return null;
80   }
81
82   /*
83    * (non-Javadoc)
84    * 
85    * @see jalview.ws.DbSourceProxy#getAccessionValidator()
86    */
87   @Override
88   public Regex getAccessionValidator()
89   {
90     return null;
91   }
92
93   /*
94    * (non-Javadoc)
95    * 
96    * @see jalview.ws.DbSourceProxy#getDbSource() public String getDbSource() { *
97    * this doesn't work - DbSource is key for the hash of DbSourceProxy instances
98    * - 1:many mapping for DbSource to proxy will be lost. * suggest : PFAM is an
99    * 'alignment' source - means proxy is higher level than a sequence source.
100    * return jalview.datamodel.DBRefSource.PFAM; }
101    */
102
103   /*
104    * (non-Javadoc)
105    * 
106    * @see jalview.ws.DbSourceProxy#getDbSourceProperties() public Hashtable
107    * getDbSourceProperties() {
108    * 
109    * return null; }
110    */
111
112   /*
113    * (non-Javadoc)
114    * 
115    * @see jalview.ws.DbSourceProxy#getDbVersion()
116    */
117   @Override
118   public String getDbVersion()
119   {
120     return null;
121   }
122
123   @Override
124   protected String getURLPrefix()
125   {
126     return Cache.getDefault(PFAM_BASEURL_KEY, DEFAULT_PFAM_BASEURL);
127   }
128
129   /*
130    * (non-Javadoc)
131    * 
132    * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String)
133    */
134   @Override
135   public boolean isValidReference(String accession)
136   {
137     return accession.indexOf("PF") == 0;
138   }
139
140   /*
141    * public String getDbName() { return "PFAM"; // getDbSource(); }
142    */
143
144   @Override
145   public String getXfamSource()
146   {
147     return DBRefSource.PFAM;
148   }
149 }