JAL-1705 refactored cross-reference fetching (CCDS, Uniprot, PDB)
[jalview.git] / src / jalview / ext / ensembl / EnsemblSeqProxy.java
index 8698b78..0bfeda1 100644 (file)
@@ -36,6 +36,9 @@ import java.util.Map.Entry;
  */
 public abstract class EnsemblSeqProxy extends EnsemblRestClient
 {
+  private static final List<String> CROSS_REFERENCES = Arrays
+          .asList(new String[] { "CCDS" });
+
   protected static final String CONSEQUENCE_TYPE = "consequence_type";
 
   protected static final String PARENT = "Parent";
@@ -173,7 +176,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       addFeaturesAndProduct(accId, alignment);
     }
 
-    inProgress = false;
+    for (SequenceI seq : alignment.getSequences())
+    {
+      getCrossReferences(seq);
+    }
+
     System.out.println(getClass().getName() + " took "
             + (System.currentTimeMillis() - now) + "ms to fetch");
     return alignment;
@@ -265,8 +272,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
       proteinSeq.createDatasetSequence();
       querySeq.createDatasetSequence();
 
-      getProteinCrossReferences(proteinSeq);
-
       MapList mapList = mapCdsToProtein(querySeq, proteinSeq);
       if (mapList != null)
       {
@@ -293,26 +298,35 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
    * Get Uniprot and PDB xrefs from Ensembl, and attach them to the protein
    * sequence
    * 
-   * @param proteinSeq
+   * @param seq
    */
-  protected void getProteinCrossReferences(SequenceI proteinSeq)
+  protected void getCrossReferences(SequenceI seq)
   {
-    while (proteinSeq.getDatasetSequence() != null)
+    while (seq.getDatasetSequence() != null)
     {
-      proteinSeq = proteinSeq.getDatasetSequence();
+      seq = seq.getDatasetSequence();
     }
 
     EnsemblXref xrefFetcher = new EnsemblXref();
-    List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(
-            proteinSeq.getName(), "PDB", "Uniprot/SPTREMBL",
-            "Uniprot/SWISSPROT");
+    List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(seq.getName(),
+            getCrossReferenceDatabases());
     for (DBRefEntry xref : xrefs)
     {
-      proteinSeq.addDBRef(xref);
+      seq.addDBRef(xref);
     }
   }
 
   /**
+   * Returns a list of database names to be used when fetching cross-references.
+   * 
+   * @return
+   */
+  protected List<String> getCrossReferenceDatabases()
+  {
+    return CROSS_REFERENCES;
+  }
+
+  /**
    * Returns a mapping from dna to protein by inspecting sequence features of
    * type "CDS" on the dna.
    *