1e62d1300c1395db84c0f273265296397649eb47
[jalview.git] / src / jalview / ws / seqfetcher / DbSourceProxy.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.seqfetcher;
22
23 import jalview.datamodel.AlignmentI;
24
25 import java.util.Hashtable;
26
27 import com.stevesoft.pat.Regex;
28
29 /**
30  * generic Reference Retrieval interface for a particular database
31  * source/version as cited in DBRefEntry. TODO: add/define property to describe
32  * max number of queries that this source can cope with at once. TODO:
33  * add/define mechanism for retrieval of Trees and distance matrices from a
34  * database (unify with io)
35  * 
36  * @author JimP TODO: promote to API
37  */
38 public interface DbSourceProxy
39 {
40   /**
41    * 
42    * @return source string constant used for this DB source
43    */
44   public String getDbSource();
45
46   /**
47    * Short meaningful name for this data source for display in menus or
48    * selection boxes.
49    * 
50    * @return String
51    */
52   public String getDbName();
53
54   /**
55    * 
56    * @return version string for this database.
57    */
58   public String getDbVersion();
59
60   /**
61    * Separator between individual accession queries for a database that allows
62    * multiple IDs to be fetched in a single query. Null implies that only a
63    * single ID can be fetched at a time.
64    * 
65    * @return string for separating concatenated queries (as individually
66    *         validated by the accession validator)
67    */
68   public String getAccessionSeparator();
69
70   /**
71    * Regular expression for checking form of query string understood by this
72    * source. If the Regex includes parenthesis, then the first parenthesis
73    * should yield the same accession string as the one used to annotate the
74    * sequence. This is used to match query strings to returned sequences.
75    * 
76    * @return null or a validation regex
77    */
78   public Regex getAccessionValidator();
79
80   /**
81    * 
82    * @return a test/example query that can be used to validate retrieval and
83    *         parsing mechanisms
84    */
85   public String getTestQuery();
86
87   /**
88    * Required for sources supporting multiple query retrieval for use with the
89    * DBRefFetcher, which attempts to limit its queries with putative accession
90    * strings for a source to only those that are likely to be valid.
91    * 
92    * @param accession
93    * @return
94    */
95   public boolean isValidReference(String accession);
96
97   /**
98    * make one or more queries to the database and attempt to parse the response
99    * into an alignment
100    * 
101    * @param queries
102    *          - one or more queries for database in expected form
103    * @return null if queries were successful but result was not parsable.
104    *         Otherwise, an AlignmentI object containing properly annotated data
105    *         (e.g. sequences with accessions for this datasource)
106    * @throws Exception
107    *           - propagated from underlying transport to database (note -
108    *           exceptions are not raised if query not found in database)
109    * 
110    */
111   public AlignmentI getSequenceRecords(String queries) throws Exception;
112
113   /**
114    * 
115    * @return true if a query is currently being made
116    */
117   public boolean queryInProgress();
118
119   /**
120    * get the raw reponse from the last set of queries
121    * 
122    * @return one or more string buffers for each individual query
123    */
124   public StringBuffer getRawRecords();
125
126   /**
127    * Tier for this data source
128    * 
129    * @return 0 - primary datasource, 1 - das primary source, 2 - secondary
130    */
131   public int getTier();
132
133   /**
134    * Extracts valid accession strings from a query string. If there is an
135    * accession id validator, returns the the matched region or the first
136    * subgroup match from the matched region; else just returns the whole query.
137    * 
138    * @param query
139    * @return
140    */
141   String getAccessionIdFromQuery(String query);
142
143   /**
144    * Returns the maximum number of accession ids that can be queried in one
145    * request.
146    * 
147    * @return
148    */
149   public int getMaximumQueryCount();
150
151   /**
152    * Returns true if the source may provide coding DNA i.e. sequences with
153    * implicit peptide products
154    * 
155    * @return
156    */
157   public boolean isDnaCoding();
158
159   /**
160    * Answers true if the database is a source of alignments (for example, domain
161    * families)
162    * 
163    * @return
164    */
165   public boolean isAlignmentSource();
166 }