JAL-1705 reworked Ensembl clients now fetching and mapping features &
[jalview.git] / src / jalview / ext / ensembl / EnsemblGenome.java
index 39dfac0..6b4a1f6 100644 (file)
@@ -1,9 +1,17 @@
 package jalview.ext.ensembl;
 
-import jalview.ext.ensembl.SeqFetcher.EnsemblSeqType;
+import jalview.datamodel.SequenceFeature;
+import jalview.io.gff.SequenceOntology;
 
 public class EnsemblGenome extends EnsemblSeqProxy
 {
+  /*
+   * fetch transcript features on genomic sequence (to identify the transcript 
+   * regions) and cds, exon and variation features (to retain)
+   */
+  private static final EnsemblFeatureType[] FEATURES_TO_FETCH = {
+      EnsemblFeatureType.transcript, EnsemblFeatureType.exon,
+      EnsemblFeatureType.cds, EnsemblFeatureType.variation };
 
   public EnsemblGenome()
   {
@@ -22,4 +30,43 @@ public class EnsemblGenome extends EnsemblSeqProxy
     return EnsemblSeqType.GENOMIC;
   }
 
+  @Override
+  protected EnsemblFeatureType[] getFeaturesToFetch()
+  {
+    return FEATURES_TO_FETCH;
+  }
+
+  /**
+   * Answers true unless the feature type is 'transcript' (or a sub-type of
+   * transcript in the Sequence Ontology). Transcript features are only
+   * retrieved in order to identify the transcript sequence range, and are
+   * redundant information on the transcript sequence itself.
+   */
+  @Override
+  protected boolean retainFeature(String type)
+  {
+    return !SequenceOntology.getInstance().isA(type,
+            SequenceOntology.TRANSCRIPT);
+  }
+
+  /**
+   * Answers true if the sequence feature type is 'transcript' (or a subtype of
+   * transcript in the Sequence Ontology), and the ID of the feature is the
+   * transcript we are retrieving
+   */
+  @Override
+  protected boolean identifiesSequence(SequenceFeature sf, String accId)
+  {
+    if (SequenceOntology.getInstance().isA(sf.getType(),
+            SequenceOntology.TRANSCRIPT))
+    {
+      String parentFeature = (String) sf.getValue("ID");
+      if (("transcript:" + accId).equals(parentFeature))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }