JAL-1705 derive transcript sequences from gene sequence/GFF; handle CDS
[jalview.git] / src / jalview / ext / ensembl / EnsemblCdna.java
1 package jalview.ext.ensembl;
2
3 import jalview.datamodel.SequenceFeature;
4 import jalview.io.gff.SequenceOntology;
5
6 import com.stevesoft.pat.Regex;
7
8 public class EnsemblCdna extends EnsemblSeqProxy
9 {
10   /*
11    * fetch exon features on genomic sequence (to identify the cdnaregions)
12    * and cds and variation features (to retain)
13    */
14   private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
15       EnsemblFeatureType.exon, EnsemblFeatureType.cds,
16       EnsemblFeatureType.variation };
17
18   public EnsemblCdna()
19   {
20     super();
21   }
22
23   @Override
24   public String getDbName()
25   {
26     return "ENSEMBL (CDNA)";
27   }
28
29   @Override
30   protected EnsemblSeqType getSourceEnsemblType()
31   {
32     return EnsemblSeqType.CDNA;
33   }
34
35   @Override
36   public Regex getAccessionValidator()
37   {
38     return new Regex("((ENST|ENSG|CCDS)[0-9.]{3,})");
39   }
40
41   @Override
42   protected EnsemblFeatureType[] getFeaturesToFetch()
43   {
44     return FEATURES_TO_FETCH;
45   }
46
47   /**
48    * Answers true unless the feature type is 'transcript' or 'exon' (or a
49    * sub-type in the Sequence Ontology). These features are only retrieved in
50    * order to identify the exon sequence loci, and are redundant information on
51    * the exon sequence itself.
52    */
53   @Override
54   protected boolean retainFeature(SequenceFeature sf, String accessionId)
55   {
56     SequenceOntology so = SequenceOntology.getInstance();
57     String type = sf.getType();
58
59     if (isTranscript(type) || so.isA(type, SequenceOntology.EXON))
60     {
61       return false;
62     }
63     return featureMayBelong(sf, accessionId);
64   }
65
66   /**
67    * Answers true if the sequence feature type is 'exon' (or a subtype of exon
68    * in the Sequence Ontology), and the Parent of the feature is the transcript
69    * we are retrieving
70    */
71   @Override
72   protected boolean identifiesSequence(SequenceFeature sf, String accId)
73   {
74     if (SequenceOntology.getInstance().isA(sf.getType(),
75             SequenceOntology.EXON))
76     {
77       String parentFeature = (String) sf.getValue(PARENT);
78       if (("transcript:" + accId).equals(parentFeature))
79       {
80         return true;
81       }
82     }
83     return false;
84   }
85
86 }