JAL-2105 capture Ensembl data version, check REST version (per domain)
[jalview.git] / src / jalview / ext / ensembl / EnsemblSeqProxy.java
index b4c708d..c86469f 100644 (file)
@@ -14,6 +14,7 @@ import jalview.io.FastaFile;
 import jalview.io.FileParse;
 import jalview.io.gff.SequenceOntologyFactory;
 import jalview.io.gff.SequenceOntologyI;
+import jalview.util.Comparison;
 import jalview.util.DBRefUtils;
 import jalview.util.MapList;
 
@@ -36,12 +37,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
 {
   private static final String ALLELES = "alleles";
 
-  private static final List<String> CROSS_REFERENCES = Arrays
-          .asList(new String[] { "CCDS", "Uniprot/SWISSPROT",
-              "Uniprot/SPTREMBL" });
-
-  protected static final String CONSEQUENCE_TYPE = "consequence_type";
-
   protected static final String PARENT = "Parent";
 
   protected static final String ID = "ID";
@@ -61,7 +56,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     GENOMIC("genomic"),
 
     /**
-     * type=cdna to fetch dna including UTRs
+     * type=cdna to fetch coding dna including UTRs
      */
     CDNA("cdna"),
 
@@ -283,9 +278,10 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
         // clunky: ensure Uniprot xref if we have one is on mapped sequence
         SequenceI ds = proteinSeq.getDatasetSequence();
         ds.setSourceDBRef(proteinSeq.getSourceDBRef());
+
         Mapping map = new Mapping(ds, mapList);
-        DBRefEntry dbr = new DBRefEntry(getDbSource(), getDbVersion(),
-                accId, map);
+        DBRefEntry dbr = new DBRefEntry(getDbSource(),
+                getEnsemblDataVersion(), proteinSeq.getName(), map);
         querySeq.getDatasetSequence().addDBRef(dbr);
         
         /*
@@ -315,8 +311,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     }
 
     EnsemblXref xrefFetcher = new EnsemblXref(getDomain());
-    List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(seq.getName(),
-            getCrossReferenceDatabases());
+    List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(seq.getName());
     for (DBRefEntry xref : xrefs)
     {
       seq.addDBRef(xref);
@@ -328,18 +323,13 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
         seq.setSourceDBRef(xref);
       }
     }
-  }
 
-  /**
-   * Returns a list of database names to be used when fetching cross-references.
-   * Specifically, the names are used to filter data returned by the Ensembl
-   * xrefs REST service on the value in field 'dbname'.
-   * 
-   * @return
-   */
-  protected List<String> getCrossReferenceDatabases()
-  {
-    return CROSS_REFERENCES;
+    /*
+     * and add a reference to itself
+     */
+    DBRefEntry self = new DBRefEntry(getDbSource(),
+            getEnsemblDataVersion(), seq.getName());
+    seq.addDBRef(self);
   }
 
   /**
@@ -397,7 +387,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
         if (ids.contains(name)
                 || ids.contains(name.replace("ENSP", "ENST")))
         {
-          DBRefUtils.parseToDbRef(sq, DBRefSource.ENSEMBL, "0", name);
+          DBRefUtils.parseToDbRef(sq, getDbSource(),
+                  getEnsemblDataVersion(), name);
         }
       }
       if (alignment == null)
@@ -691,16 +682,21 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
     {
       complement.append(",");
     }
-    if ("HGMD_MUTATION".equalsIgnoreCase(allele))
+
+    /*
+     * some 'alleles' are actually descriptive terms 
+     * e.g. HGMD_MUTATION, PhenCode_variation
+     * - we don't want to 'reverse complement' these
+     */
+    if (!Comparison.isNucleotideSequence(allele, true))
     {
       complement.append(allele);
     }
     else
     {
-      char[] alleles = allele.toCharArray();
-      for (int i = alleles.length - 1; i >= 0; i--)
+      for (int i = allele.length() - 1; i >= 0; i--)
       {
-        complement.append(Dna.getComplement(alleles[i]));
+        complement.append(Dna.getComplement(allele.charAt(i)));
       }
     }
   }