X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblSymbol.java;h=ef79d72df4b7a33f1c8863d4d1ca7b42e9e59118;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=9f86731d27b4e070e4cb787d520df4b103e8e496;hpb=3d0101179759ef157b088ea135423cd909512d9f;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblSymbol.java b/src/jalview/ext/ensembl/EnsemblSymbol.java index 9f86731..ef79d72 100644 --- a/src/jalview/ext/ensembl/EnsemblSymbol.java +++ b/src/jalview/ext/ensembl/EnsemblSymbol.java @@ -20,17 +20,14 @@ */ package jalview.ext.ensembl; -import java.io.BufferedReader; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Map; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; /** @@ -42,6 +39,10 @@ import org.json.simple.parser.ParseException; */ public class EnsemblSymbol extends EnsemblXref { + private static final String GENE = "gene"; + + private static final String TYPE = "type"; + /** * Constructor given the target domain to fetch data from * @@ -54,45 +55,44 @@ public class EnsemblSymbol extends EnsemblXref super(domain, dbName, dbVersion); } + // /** + // * Returns the first "id" value in gene identifier format from the JSON + // * response, or null if none found + // * + // * @param br + // * @return + // * @throws IOException + // */ + // @SuppressWarnings("unchecked") + // protected String parseSymbolResponse(BufferedReader br) throws IOException + // { + // } + /** - * Returns the first "id" value in gene identifier format from the JSON - * response, or null if none found + * Constructs the URL for the REST symbol endpoint * - * @param br + * @param id + * the accession id (Ensembl or external) + * @param species + * a species name recognisable by Ensembl + * @param type + * an optional type to filter the response (gene, transcript, + * translation) * @return - * @throws IOException */ - protected String parseSymbolResponse(BufferedReader br) throws IOException + protected URL getUrl(String id, Species species, String... type) { - JSONParser jp = new JSONParser(); - String result = null; - try + StringBuilder sb = new StringBuilder(); + sb.append(getDomain()).append("/xrefs/symbol/") + .append(species.toString()).append("/").append(id) + .append(CONTENT_TYPE_JSON); + for (String t : type) { - JSONArray responses = (JSONArray) jp.parse(br); - Iterator rvals = responses.iterator(); - while (rvals.hasNext()) - { - JSONObject val = (JSONObject) rvals.next(); - String id = val.get("id").toString(); - if (id != null && isGeneIdentifier(id)) - { - result = id; - break; - } - } - } catch (ParseException e) - { - // ignore + sb.append("&object_type=").append(t); } - return result; - } - - protected URL getUrl(String id, Species species) - { - String url = getDomain() + "/xrefs/symbol/" + species.toString() + "/" - + id + "?content-type=application/json"; try { + String url = sb.toString(); return new URL(url); } catch (MalformedURLException e) { @@ -107,50 +107,53 @@ public class EnsemblSymbol extends EnsemblXref * @param identifier * @return */ - public List getIds(String identifier) + @SuppressWarnings("unchecked") + public List getGeneIds(String identifier) { List result = new ArrayList(); List ids = new ArrayList(); ids.add(identifier); String[] queries = identifier.split(getAccessionSeparator()); - BufferedReader br = null; try { for (String query : queries) { - for (Species taxon : Species.values()) + for (Species taxon : Species.getModelOrganisms()) { - if (taxon.isModelOrganism()) + String geneId = null;/// parseSymbolResponse(br); + try { - URL url = getUrl(query, taxon); - if (url != null) - { - br = getHttpResponse(url, ids); - } - String geneId = parseSymbolResponse(br); - if (geneId != null) + Iterator rvals = (Iterator) getJSON( + getUrl(query, taxon, GENE), ids, -1, MODE_ITERATOR, + null); + if (rvals == null) + continue; + while (rvals.hasNext()) { - result.add(geneId); + Map val = (Map) rvals.next(); + String id = val.get(JSON_ID).toString(); + String type = val.get(TYPE).toString(); + if (id != null && GENE.equals(type)) + { + geneId = id; + break; + } } + } catch (ParseException e) + { + // ignore + } + + if (geneId != null && !result.contains(geneId)) + { + result.add(geneId); } } } } catch (IOException e) { // ignore - } finally - { - if (br != null) - { - try - { - br.close(); - } catch (IOException e) - { - // ignore - } - } } return result; }