X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblLookup.java;h=2507e876273816bf40a2f2f26eb9b57833dae687;hb=a1984b1c8c273ed33c7ce9283039f4027dcae2de;hp=ed1b4fa4e00d91c7b67aa0e137bc94aa82ef2895;hpb=8ab24374eabe70d3d55bc92bcbbae401c743baa5;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblLookup.java b/src/jalview/ext/ensembl/EnsemblLookup.java index ed1b4fa..2507e87 100644 --- a/src/jalview/ext/ensembl/EnsemblLookup.java +++ b/src/jalview/ext/ensembl/EnsemblLookup.java @@ -23,18 +23,18 @@ package jalview.ext.ensembl; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; import jalview.datamodel.GeneLociI; +import jalview.datamodel.GeneLocus; +import jalview.datamodel.Mapping; import jalview.util.MapList; -import java.io.BufferedReader; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; /** @@ -49,11 +49,6 @@ public class EnsemblLookup extends EnsemblRestClient private static final String SPECIES = "species"; /** - * keep track of last identifier retrieved to break loops - */ - private String lastId; - - /** * Default constructor (to use rest.ensembl.org) */ public EnsemblLookup() @@ -122,21 +117,9 @@ public class EnsemblLookup extends EnsemblRestClient return true; } - @Override - protected String getRequestMimeType(boolean multipleIds) - { - return "application/json"; - } - - @Override - protected String getResponseMimeType() - { - return "application/json"; - } - /** * Returns the gene id related to the given identifier (which may be for a - * gene, transcript or protein) + * gene, transcript or protein), or null if none is found * * @param identifier * @return @@ -148,7 +131,7 @@ public class EnsemblLookup extends EnsemblRestClient /** * Returns the gene id related to the given identifier (which may be for a - * gene, transcript or protein) + * gene, transcript or protein), or null if none is found * * @param identifier * @param objectType @@ -156,34 +139,7 @@ public class EnsemblLookup extends EnsemblRestClient */ public String getGeneId(String identifier, String objectType) { - List ids = Arrays.asList(new String[] { identifier }); - - BufferedReader br = null; - try - { - URL url = getUrl(identifier, objectType); - if (url != null) - { - br = getHttpResponse(url, ids); - } - return br == null ? null : parseResponse(br); - } catch (IOException e) - { - // ignore - return null; - } finally - { - if (br != null) - { - try - { - br.close(); - } catch (IOException e) - { - // ignore - } - } - } + return parseGeneId(getResult(identifier, objectType)); } /** @@ -194,36 +150,32 @@ public class EnsemblLookup extends EnsemblRestClient * * @param br * @return - * @throws IOException */ - protected String parseResponse(BufferedReader br) throws IOException + protected String parseGeneId(Map val) { + if (val == null) + { + return null; + } String geneId = null; - JSONParser jp = new JSONParser(); - try + String type = val.get(OBJECT_TYPE).toString(); + if (OBJECT_TYPE_GENE.equalsIgnoreCase(type)) { - JSONObject val = (JSONObject) jp.parse(br); - String type = val.get(OBJECT_TYPE).toString(); - if (OBJECT_TYPE_GENE.equalsIgnoreCase(type)) - { - // got the gene - just returns its id - geneId = val.get(JSON_ID).toString(); - } - else if (OBJECT_TYPE_TRANSCRIPT.equalsIgnoreCase(type)) - { - // got the transcript - return its (Gene) Parent - geneId = val.get(PARENT).toString(); - } - else if (OBJECT_TYPE_TRANSLATION.equalsIgnoreCase(type)) - { - // got the protein - get its Parent, restricted to type Transcript - String transcriptId = val.get(PARENT).toString(); - geneId = getGeneId(transcriptId, OBJECT_TYPE_TRANSCRIPT); - } - } catch (ParseException e) + // got the gene - just returns its id + geneId = val.get(JSON_ID).toString(); + } + else if (OBJECT_TYPE_TRANSCRIPT.equalsIgnoreCase(type)) { - // ignore + // got the transcript - return its (Gene) Parent + geneId = val.get(PARENT).toString(); } + else if (OBJECT_TYPE_TRANSLATION.equalsIgnoreCase(type)) + { + // got the protein - get its Parent, restricted to type Transcript + String transcriptId = val.get(PARENT).toString(); + geneId = getGeneId(transcriptId, OBJECT_TYPE_TRANSCRIPT); + } + return geneId; } @@ -237,7 +189,7 @@ public class EnsemblLookup extends EnsemblRestClient public String getSpecies(String identifier) { String species = null; - JSONObject json = getResult(identifier, null); + Map json = getResult(identifier, null); if (json != null) { Object o = json.get(SPECIES); @@ -250,7 +202,7 @@ public class EnsemblLookup extends EnsemblRestClient } /** - * Calls the /lookup/id rest service and returns the response as a JSONObject, + * Calls the /lookup/id rest service and returns the response as a Map, * or null if any error * * @param identifier @@ -258,91 +210,24 @@ public class EnsemblLookup extends EnsemblRestClient * (optional) * @return */ - protected JSONObject getResult(String identifier, String objectType) + @SuppressWarnings("unchecked") + protected Map getResult(String identifier, String objectType) { List ids = Arrays.asList(new String[] { identifier }); - BufferedReader br = null; try { - - URL url = getUrl(identifier, objectType); - - if (identifier.equals(lastId)) - { - System.err.println("** Ensembl lookup " + url.toString() - + " looping on Parent!"); - return null; - } - - lastId = identifier; - - if (url != null) - { - br = getHttpResponse(url, ids); - } - return br == null ? null : (JSONObject) (new JSONParser().parse(br)); - } catch (IOException | ParseException e) + return (Map) getJSON(getUrl(identifier, objectType), ids, -1, MODE_MAP, null); + } + catch (IOException | ParseException e) { System.err.println("Error parsing " + identifier + " lookup response " + e.getMessage()); return null; - } finally - { - if (br != null) - { - try - { - br.close(); - } catch (IOException e) - { - // ignore - } - } } } /** - * Parses the JSON response and returns the gene identifier, or null if not - * found. If the returned object_type is Gene, returns the id, if Transcript - * returns the Parent. If it is Translation (peptide identifier), then the - * Parent is the transcript identifier, so we redo the search with this value, - * specifying that object_type should be Transcript. - * - * @param jsonObject - * @return - */ - protected String parseGeneId(JSONObject json) - { - if (json == null) - { - // e.g. lookup failed with 404 not found - return null; - } - - String geneId = null; - String type = json.get(OBJECT_TYPE).toString(); - if (OBJECT_TYPE_GENE.equalsIgnoreCase(type)) - { - // got the gene - just returns its id - geneId = json.get(JSON_ID).toString(); - } - else if (OBJECT_TYPE_TRANSCRIPT.equalsIgnoreCase(type)) - { - // got the transcript - return its (Gene) Parent - geneId = json.get(PARENT).toString(); - } - else if (OBJECT_TYPE_TRANSLATION.equalsIgnoreCase(type)) - { - // got the protein - look up its Parent, restricted to type Transcript - String transcriptId = json.get(PARENT).toString(); - geneId = parseGeneId(getResult(transcriptId, OBJECT_TYPE_TRANSCRIPT)); - } - - return geneId; - } - - /** * Calls the /lookup/id rest service for the given id, and if successful, * parses and returns the gene's chromosomal coordinates * @@ -362,7 +247,7 @@ public class EnsemblLookup extends EnsemblRestClient * @param json * @return */ - GeneLociI parseGeneLoci(JSONObject json) + GeneLociI parseGeneLoci(Map json) { if (json == null) { @@ -385,37 +270,13 @@ public class EnsemblLookup extends EnsemblRestClient fromEnd }); List toRange = Collections.singletonList(new int[] { toStart, toEnd }); - final MapList map = new MapList(fromRange, toRange, 1, 1); - return new GeneLociI() - { - - @Override - public String getSpeciesId() - { - return species == null ? "" : species; - } - - @Override - public String getAssemblyId() - { - return assembly; - } - - @Override - public String getChromosomeId() - { - return chromosome; - } - - @Override - public MapList getMap() - { - return map; - } - }; + final Mapping map = new Mapping( + new MapList(fromRange, toRange, 1, 1)); + return new GeneLocus(species == null ? "" : species, assembly, + chromosome, map); } catch (NullPointerException | NumberFormatException e) { - Cache.log.error("Error looking up gene loci: " + e.getMessage()); + Cache.error("Error looking up gene loci: " + e.getMessage()); e.printStackTrace(); } return null;