JAL-2189 apply license
[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}$)" + "|" + "(CCDS[0-9.]{3,}$)");
42
43   protected static final String ENSEMBL_GENOMES_REST = "http://rest.ensemblgenomes.org";
44
45   protected static final String ENSEMBL_REST = "http://rest.ensembl.org";
46
47   /*
48    * possible values for the 'feature' parameter of the /overlap REST service
49    * @see http://rest.ensembl.org/documentation/info/overlap_id
50    */
51   protected enum EnsemblFeatureType
52   {
53     gene, transcript, cds, exon, repeat, simple, misc, variation,
54     somatic_variation, structural_variation, somatic_structural_variation,
55     constrained, regulatory
56   }
57
58   private String domain = ENSEMBL_REST;
59
60   @Override
61   public String getDbSource()
62   {
63     // NB ensure Uniprot xrefs are canonicalised from "Ensembl" to "ENSEMBL"
64     if (ENSEMBL_GENOMES_REST.equals(getDomain()))
65     {
66       return DBRefSource.ENSEMBLGENOMES;
67     }
68     return DBRefSource.ENSEMBL;
69   }
70
71   @Override
72   public String getAccessionSeparator()
73   {
74     return " ";
75   }
76
77   /**
78    * Ensembl accession are ENST + 11 digits for human transcript, ENSG for human
79    * gene. Other species insert 3 letters e.g. ENSMUST..., ENSMUSG...
80    * 
81    * @see http://www.ensembl.org/Help/View?id=151
82    */
83   @Override
84   public Regex getAccessionValidator()
85   {
86     return ACCESSION_REGEX;
87   }
88
89   @Override
90   public boolean isValidReference(String accession)
91   {
92     return getAccessionValidator().search(accession);
93   }
94
95   @Override
96   public int getTier()
97   {
98     return 0;
99   }
100
101   /**
102    * Default test query is a transcript
103    */
104   @Override
105   public String getTestQuery()
106   {
107     // has CDS on reverse strand:
108     return "ENST00000288602";
109     // ENST00000461457 // forward strand
110   }
111
112   @Override
113   public boolean isDnaCoding()
114   {
115     return true;
116   }
117
118   /**
119    * Returns the domain name to query e.g. http://rest.ensembl.org or
120    * http://rest.ensemblgenomes.org
121    * 
122    * @return
123    */
124   protected String getDomain()
125   {
126     return domain;
127   }
128
129   protected void setDomain(String d)
130   {
131     domain = d;
132   }
133 }