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