JAL-2089 patch broken merge to master for Release 2.10.0b1
[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.datamodel.DBRefSource;
26 import jalview.io.FormatAdapter;
27
28 import com.stevesoft.pat.Regex;
29
30 /**
31  * TODO: later PFAM is a complex datasource - it could return a tree in addition
32  * to an alignment TODO: create interface to pass alignment properties and tree
33  * back to sequence fetcher
34  * 
35  * @author JimP
36  * 
37  */
38 abstract public class Pfam extends Xfam
39 {
40
41   public Pfam()
42   {
43     super();
44   }
45
46   /*
47    * (non-Javadoc)
48    * 
49    * @see jalview.ws.DbSourceProxy#getAccessionSeparator()
50    */
51   @Override
52   public String getAccessionSeparator()
53   {
54     // TODO Auto-generated method stub
55     return null;
56   }
57
58   /*
59    * (non-Javadoc)
60    * 
61    * @see jalview.ws.DbSourceProxy#getAccessionValidator()
62    */
63   @Override
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   @Override
115   public AlignmentI getSequenceRecords(String queries) throws Exception
116   {
117     // TODO: this is not a perfect implementation. We need to be able to add
118     // individual references to each sequence in each family alignment that's
119     // retrieved.
120     startQuery();
121     AlignmentI rcds = new FormatAdapter().readFile(getXFAMURL()
122             + queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,
123             "STH");
124     for (int s = 0, sNum = rcds.getHeight(); s < sNum; s++)
125     {
126       rcds.getSequenceAt(s).addDBRef(new DBRefEntry(DBRefSource.PFAM,
127       // getDbSource(),
128               getDbVersion(), queries.trim().toUpperCase()));
129       if (!getDbSource().equals(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   @Override
146   public boolean isValidReference(String accession)
147   {
148     return accession.indexOf("PF") == 0;
149   }
150
151   /*
152    * public String getDbName() { return "PFAM"; // getDbSource(); }
153    */
154
155   @Override
156   public String getXfamSource()
157   {
158     return DBRefSource.PFAM;
159   }
160
161 }