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