JAL-1705 add DBRefEntry for 'self' to retrieved transcripts so they are
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 23 Mar 2016 15:36:25 +0000 (15:36 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 23 Mar 2016 15:36:25 +0000 (15:36 +0000)
not reported as failed when fetching a gene

src/jalview/ext/ensembl/EnsemblSeqProxy.java
src/jalview/ext/ensembl/EnsemblXref.java
test/jalview/ext/ensembl/EnsemblXrefTest.java [new file with mode: 0644]

index 59f5941..5f3f1c8 100644 (file)
@@ -329,6 +329,12 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient
         seq.setSourceDBRef(xref);
       }
     }
+
+    /*
+     * and add a reference to itself
+     */
+    DBRefEntry self = new DBRefEntry(getDbSource(), "0", seq.getName());
+    seq.addDBRef(self);
   }
 
   /**
index f19b4d4..7b5f9da 100644 (file)
@@ -81,7 +81,9 @@ class EnsemblXref extends EnsemblRestClient
    * specified, all available cross-references are retrieved.
    * 
    * @param identifier
+   *          an Ensembl stable identifier
    * @param databases
+   *          optional list of Ensembl cross-referenced databases of interest
    * @return
    */
   public List<DBRefEntry> getCrossReferences(String identifier,
@@ -95,10 +97,10 @@ class EnsemblXref extends EnsemblRestClient
     try
     {
       URL url = getUrl(identifier);
-        if (url != null)
-        {
-          br = getHttpResponse(url, ids);
-        }
+      if (url != null)
+      {
+        br = getHttpResponse(url, ids);
+      }
       return (parseResponse(br, databases));
     } catch (IOException e)
     {
@@ -123,7 +125,8 @@ class EnsemblXref extends EnsemblRestClient
   /**
    * Parses "primary_id" and "dbname" values from the JSON response and
    * constructs a DBRefEntry if the dbname is in the list supplied. Returns a
-   * list of DBRefEntry created.
+   * list of the DBRefEntry created. Note we don't parse "synonyms" as they
+   * appear to be either redirected or obsolete in Uniprot.
    * 
    * @param br
    * @param databases
diff --git a/test/jalview/ext/ensembl/EnsemblXrefTest.java b/test/jalview/ext/ensembl/EnsemblXrefTest.java
new file mode 100644 (file)
index 0000000..5073423
--- /dev/null
@@ -0,0 +1,68 @@
+package jalview.ext.ensembl;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.datamodel.DBRefEntry;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+
+import org.testng.annotations.Test;
+
+public class EnsemblXrefTest
+{
+  //@formatter:off
+  private static final String JSON = 
+          "[{\"primary_id\":\"CCDS5863\",\"dbname\":\"CCDS\"}," +
+           "{\"primary_id\":\"P15056\",\"dbname\":\"Uniprot/SWISSPROT\"}]";
+  //@formatter:on
+
+  @Test(groups = "functional")
+  public void testGetCrossReferences()
+  {
+    System.out.println(JSON);
+    EnsemblXref testee = new EnsemblXref("http://rest.ensembl.org")
+    {
+      @Override
+      protected BufferedReader getHttpResponse(URL url, List<String> ids)
+              throws IOException
+      {
+        return new BufferedReader(new StringReader(JSON));
+      }
+    };
+
+    /*
+     * with no filter
+     */
+    List<DBRefEntry> dbrefs = testee.getCrossReferences("ABCDE", null);
+    assertEquals(2, dbrefs.size());
+    assertEquals("CCDS", dbrefs.get(0).getSource());
+    assertEquals("CCDS5863", dbrefs.get(0).getAccessionId());
+    // Uniprot name should get converted to Jalview canonical form
+    assertEquals("UNIPROT", dbrefs.get(1).getSource());
+    assertEquals("P15056", dbrefs.get(1).getAccessionId());
+
+    /*
+     * filter for Uniprot only
+     */
+    dbrefs = testee.getCrossReferences(
+            "ABCDE",
+            Arrays.asList(new String[] { "Uniprot/SWISSPROT",
+                "Uniprot/SPTREMBL" }));
+    assertEquals(1, dbrefs.size());
+    assertEquals("UNIPROT", dbrefs.get(0).getSource());
+    assertEquals("P15056", dbrefs.get(0).getAccessionId());
+
+    /*
+     * filter for PDB only
+     */
+    dbrefs = testee.getCrossReferences("ABCDE",
+            Arrays.asList(new String[] { "PDB" }));
+    assertTrue(dbrefs.isEmpty());
+  }
+}