From b40bbf24867e2f44c40e9af6cf43bdfee29c337c Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 23 Mar 2016 15:36:25 +0000 Subject: [PATCH] JAL-1705 add DBRefEntry for 'self' to retrieved transcripts so they are not reported as failed when fetching a gene --- src/jalview/ext/ensembl/EnsemblSeqProxy.java | 6 +++ src/jalview/ext/ensembl/EnsemblXref.java | 13 +++-- test/jalview/ext/ensembl/EnsemblXrefTest.java | 68 +++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 test/jalview/ext/ensembl/EnsemblXrefTest.java diff --git a/src/jalview/ext/ensembl/EnsemblSeqProxy.java b/src/jalview/ext/ensembl/EnsemblSeqProxy.java index 59f5941..5f3f1c8 100644 --- a/src/jalview/ext/ensembl/EnsemblSeqProxy.java +++ b/src/jalview/ext/ensembl/EnsemblSeqProxy.java @@ -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); } /** diff --git a/src/jalview/ext/ensembl/EnsemblXref.java b/src/jalview/ext/ensembl/EnsemblXref.java index f19b4d4..7b5f9da 100644 --- a/src/jalview/ext/ensembl/EnsemblXref.java +++ b/src/jalview/ext/ensembl/EnsemblXref.java @@ -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 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 index 0000000..5073423 --- /dev/null +++ b/test/jalview/ext/ensembl/EnsemblXrefTest.java @@ -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 ids) + throws IOException + { + return new BufferedReader(new StringReader(JSON)); + } + }; + + /* + * with no filter + */ + List 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()); + } +} -- 1.7.10.2