X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblXref.java;h=c002c0856f9696730150dcdcc5a95b371835f758;hb=d3dd5dd279c8253afa522f11b3e944ba422d12d3;hp=36bd7c5431cfdd000361eaadaa3a7c92b68fdf45;hpb=949fed115506ff00c221669e096546f9c39a6ace;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblXref.java b/src/jalview/ext/ensembl/EnsemblXref.java index 36bd7c5..c002c08 100644 --- a/src/jalview/ext/ensembl/EnsemblXref.java +++ b/src/jalview/ext/ensembl/EnsemblXref.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ext.ensembl; import jalview.datamodel.AlignmentI; @@ -17,13 +37,37 @@ import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; -public class EnsemblXref extends EnsemblRestClient +/** + * A class to fetch cross-references from Ensembl by calling the /xrefs REST + * service + * + * @author gmcarstairs + * @see http://rest.ensembl.org/documentation/info/xref_id + */ +class EnsemblXref extends EnsemblRestClient { + private static final String GO_GENE_ONTOLOGY = "GO"; + + private String dbName = "ENSEMBL (xref)"; + + /** + * Constructor given the target domain to fetch data from + * + * @param d + */ + public EnsemblXref(String d, String dbSource, String version) + { + super(d); + dbName = dbSource; + xrefVersion = dbSource + ":" + version; + + } + @Override public String getDbName() { - return "ENSEMBL (xref)"; + return dbName; } @Override @@ -35,8 +79,7 @@ public class EnsemblXref extends EnsemblRestClient @Override protected URL getUrl(List ids) throws MalformedURLException { - // TODO Auto-generated method stub - return null; + return getUrl(ids.get(0)); } @Override @@ -61,15 +104,14 @@ public class EnsemblXref extends EnsemblRestClient * Calls the Ensembl xrefs REST endpoint and retrieves any cross-references * ("primary_id") for the given identifier (Ensembl accession id) and database * names. The "dbname" returned by Ensembl is canonicalised to Jalview's - * standard version, and a DBRefEntry constructed. If no databases are - * specified, all available cross-references are retrieved. + * standard version, and a DBRefEntry constructed. Currently takes all + * identifiers apart from GO terms and synonyms. * * @param identifier - * @param databases + * an Ensembl stable identifier * @return */ - public List getCrossReferences(String identifier, - List databases) + public List getCrossReferences(String identifier) { List result = new ArrayList(); List ids = new ArrayList(); @@ -79,11 +121,14 @@ public class EnsemblXref extends EnsemblRestClient try { URL url = getUrl(identifier); - if (url != null) + if (url != null) + { + br = getHttpResponse(url, ids); + if (br != null) { - br = getHttpResponse(url, ids); + result = parseResponse(br); } - return (parseResponse(br, databases)); + } } catch (IOException e) { // ignore @@ -106,16 +151,15 @@ public 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. + * constructs a DBRefEntry. Returns a 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 * @return * @throws IOException */ - protected List parseResponse(BufferedReader br, - List databases) + protected List parseResponse(BufferedReader br) throws IOException { JSONParser jp = new JSONParser(); @@ -127,17 +171,16 @@ public class EnsemblXref extends EnsemblRestClient while (rvals.hasNext()) { JSONObject val = (JSONObject) rvals.next(); - String dbName = val.get("dbname").toString(); - if (databases != null && !databases.isEmpty() - && !databases.contains(dbName)) + String dbname = val.get("dbname").toString(); + if (GO_GENE_ONTOLOGY.equals(dbname)) { continue; } String id = val.get("primary_id").toString(); - if (dbName != null && id != null) + if (dbname != null && id != null) { - dbName = DBRefUtils.getCanonicalName(dbName); - DBRefEntry dbref = new DBRefEntry(dbName, "0", id); + dbname = DBRefUtils.getCanonicalName(dbname); + DBRefEntry dbref = new DBRefEntry(dbname, getXRefVersion(), id); result.add(dbref); } } @@ -148,6 +191,18 @@ public class EnsemblXref extends EnsemblRestClient return result; } + private String xrefVersion = "ENSEMBL:0"; + + /** + * version string for Xrefs - for 2.10, hardwired for ENSEMBL:0 + * + * @return + */ + public String getXRefVersion() + { + return xrefVersion; + } + /** * Returns the URL for the REST endpoint to fetch all cross-references for an * identifier. Note this may return protein cross-references for nucleotide. @@ -158,7 +213,7 @@ public class EnsemblXref extends EnsemblRestClient */ protected URL getUrl(String identifier) { - String url = ENSEMBL_REST + "/xrefs/id/" + identifier + String url = getDomain() + "/xrefs/id/" + identifier + "?content-type=application/json&all_levels=1"; try {