JAL-1705 regular expression updates, tests, other refactoring
[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   /*
24    * possible values for the 'feature' parameter of the /overlap REST service
25    * @see http://rest.ensembl.org/documentation/info/overlap_id
26    */
27   protected enum EnsemblFeatureType
28   {
29     gene, transcript, cds, exon, repeat, simple, misc, variation,
30     somatic_variation, structural_variation, somatic_structural_variation,
31     constrained, regulatory
32   }
33
34   @Override
35   public String getDbSource()
36   {
37     // NB ensure Uniprot xrefs are canonicalised from "Ensembl" to "ENSEMBL"
38     return DBRefSource.ENSEMBL; // "ENSEMBL"
39   }
40
41   @Override
42   public String getDbVersion()
43   {
44     return "0";
45   }
46
47   @Override
48   public String getAccessionSeparator()
49   {
50     return " ";
51   }
52
53   /**
54    * Ensembl accession are ENST + 11 digits for human transcript, ENSG for human
55    * gene. Other species insert 3 letters e.g. ENSMUST..., ENSMUSG...
56    * 
57    * @see http://www.ensembl.org/Help/View?id=151
58    */
59   @Override
60   public Regex getAccessionValidator()
61   {
62     return ACCESSION_REGEX;
63   }
64
65   @Override
66   public boolean isValidReference(String accession)
67   {
68     return getAccessionValidator().search(accession);
69   }
70
71   @Override
72   public int getTier()
73   {
74     return 0;
75   }
76
77   /**
78    * Default test query is a transcript
79    */
80   @Override
81   public String getTestQuery()
82   {
83     // has CDS on reverse strand:
84     return "ENST00000288602";
85     // ENST00000461457 // forward strand
86   }
87
88   @Override
89   public boolean isDnaCoding()
90   {
91     return true;
92   }
93 }