598dba1f839a155bf8fe0bb781fed3c66d4d8ae7
[jalview.git] / src / jalview / ext / ensembl / EnsemblSequenceFetcher.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.ext.ensembl;
22
23 import jalview.datamodel.DBRefSource;
24 import jalview.ws.seqfetcher.DbSourceProxyImpl;
25
26 import com.stevesoft.pat.Regex;
27
28 /**
29  * A base class for Ensembl sequence fetchers
30  * 
31  * @author gmcarstairs
32  */
33 abstract class EnsemblSequenceFetcher extends DbSourceProxyImpl
34 {
35   /*
36    * accepts ENSG/T/E/P with 11 digits
37    * or ENSMUSP or similar for other species
38    * or CCDSnnnnn.nn with at least 3 digits
39    */
40   private static final Regex ACCESSION_REGEX = new Regex(
41           "(ENS([A-Z]{3}|)[GTEP]{1}[0-9]{11}$)" + "|"
42                   + "(CCDS[0-9.]{3,}$)");
43
44   protected static final String ENSEMBL_GENOMES_REST = "http://rest.ensemblgenomes.org";
45
46   protected static final String ENSEMBL_REST = "http://rest.ensembl.org";
47
48   /*
49    * possible values for the 'feature' parameter of the /overlap REST service
50    * @see http://rest.ensembl.org/documentation/info/overlap_id
51    */
52   protected enum EnsemblFeatureType
53   {
54     gene, transcript, cds, exon, repeat, simple, misc, variation,
55     somatic_variation, structural_variation, somatic_structural_variation,
56     constrained, regulatory
57   }
58
59   private String domain = ENSEMBL_REST;
60
61   @Override
62   public String getDbSource()
63   {
64     // NB ensure Uniprot xrefs are canonicalised from "Ensembl" to "ENSEMBL"
65     if (ENSEMBL_GENOMES_REST.equals(getDomain()))
66     {
67       return DBRefSource.ENSEMBLGENOMES;
68     }
69     return DBRefSource.ENSEMBL;
70   }
71
72   @Override
73   public String getAccessionSeparator()
74   {
75     return " ";
76   }
77
78   /**
79    * Ensembl accession are ENST + 11 digits for human transcript, ENSG for human
80    * gene. Other species insert 3 letters e.g. ENSMUST..., ENSMUSG...
81    * 
82    * @see http://www.ensembl.org/Help/View?id=151
83    */
84   @Override
85   public Regex getAccessionValidator()
86   {
87     return ACCESSION_REGEX;
88   }
89
90   @Override
91   public boolean isValidReference(String accession)
92   {
93     return getAccessionValidator().search(accession);
94   }
95
96   @Override
97   public int getTier()
98   {
99     return 0;
100   }
101
102   /**
103    * Default test query is a transcript
104    */
105   @Override
106   public String getTestQuery()
107   {
108     // has CDS on reverse strand:
109     return "ENST00000288602";
110     // ENST00000461457 // forward strand
111   }
112
113   @Override
114   public boolean isDnaCoding()
115   {
116     return true;
117   }
118
119   /**
120    * Returns the domain name to query e.g. http://rest.ensembl.org or
121    * http://rest.ensemblgenomes.org
122    * 
123    * @return
124    */
125   protected String getDomain()
126   {
127     return domain;
128   }
129
130   protected void setDomain(String d)
131   {
132     domain = d;
133   }
134 }