JAL-3193 removal of rest.ensemblgenomes.org
[jalview.git] / src / jalview / ext / ensembl / EnsemblCds.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.SequenceFeature;
24 import jalview.datamodel.SequenceI;
25 import jalview.io.gff.SequenceOntologyFactory;
26 import jalview.io.gff.SequenceOntologyI;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31 /**
32  * A client for direct fetching of CDS sequences from Ensembl (i.e. that part of
33  * the genomic sequence that is translated to protein)
34  * 
35  * TODO: not currently used as CDS sequences are computed from CDS features on
36  * transcripts - delete this class?
37  * 
38  * @author gmcarstairs
39  *
40  */
41 public class EnsemblCds extends EnsemblSeqProxy
42 {
43   /*
44    * fetch cds features on genomic sequence (to identify the CDS regions)
45    * and exon and variation features (to retain for display)
46    */
47   private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
48       EnsemblFeatureType.cds, EnsemblFeatureType.exon,
49       EnsemblFeatureType.variation };
50
51   /**
52    * Default constructor (to use rest.ensembl.org)
53    */
54   public EnsemblCds()
55   {
56     super();
57   }
58
59   @Override
60   public String getDbName()
61   {
62     return "ENSEMBL (CDS)";
63   }
64
65   @Override
66   protected EnsemblSeqType getSourceEnsemblType()
67   {
68     return EnsemblSeqType.CDS;
69   }
70
71   @Override
72   protected EnsemblFeatureType[] getFeaturesToFetch()
73   {
74     return FEATURES_TO_FETCH;
75   }
76
77   /**
78    * Answers true unless the feature type is 'CDS' (or a sub-type of CDS in the
79    * Sequence Ontology). CDS features are only retrieved in order to identify
80    * the cds sequence range, and are redundant information on the cds sequence
81    * itself.
82    */
83   @Override
84   protected boolean retainFeature(SequenceFeature sf, String accessionId)
85   {
86     if (SequenceOntologyFactory.getInstance().isA(sf.getType(),
87             SequenceOntologyI.CDS))
88     {
89       return false;
90     }
91     return featureMayBelong(sf, accessionId);
92   }
93
94   /**
95    * Answers a list of sequence features (if any) whose type is 'CDS' (or a
96    * subtype of CDS in the Sequence Ontology), and whose Parent is the
97    * transcript we are retrieving
98    */
99   @Override
100   protected List<SequenceFeature> getIdentifyingFeatures(SequenceI seq,
101           String accId)
102   {
103     List<SequenceFeature> result = new ArrayList<>();
104     List<SequenceFeature> sfs = seq.getFeatures()
105             .getFeaturesByOntology(SequenceOntologyI.CDS);
106     for (SequenceFeature sf : sfs)
107     {
108       String parentFeature = (String) sf.getValue(PARENT);
109       if ( accId.equals(parentFeature))
110       {
111         result.add(sf);
112       }
113     }
114     return result;
115   }
116
117   /**
118    * Overrides this method to trivially return a range which is the whole of the
119    * nucleotide sequence. This is both faster than scanning for CDS features,
120    * and also means we don't need to keep CDS features on CDS sequence (where
121    * they are redundant information).
122    */
123   protected List<int[]> getCdsRanges(SequenceI dnaSeq)
124   {
125     int len = dnaSeq.getLength();
126     List<int[]> ranges = new ArrayList<>();
127     ranges.add(new int[] { 1, len });
128     return ranges;
129   }
130
131 }