2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.ext.ensembl;
23 import java.io.BufferedReader;
24 import java.io.IOException;
25 import java.net.MalformedURLException;
27 import java.util.ArrayList;
28 import java.util.Iterator;
29 import java.util.List;
31 import org.json.simple.JSONArray;
32 import org.json.simple.JSONObject;
33 import org.json.simple.parser.JSONParser;
34 import org.json.simple.parser.ParseException;
37 * A client for the Ensembl xrefs/symbol REST service;
39 * @see http://rest.ensembl.org/documentation/info/xref_external
43 public class EnsemblSymbol extends EnsemblXref
46 * Constructor given the target domain to fetch data from
52 public EnsemblSymbol(String domain, String dbName, String dbVersion)
54 super(domain, dbName, dbVersion);
58 * Returns the first "id" value in gene identifier format from the JSON
59 * response, or null if none found
65 protected String parseSymbolResponse(BufferedReader br)
68 JSONParser jp = new JSONParser();
72 JSONArray responses = (JSONArray) jp.parse(br);
73 Iterator rvals = responses.iterator();
74 while (rvals.hasNext())
76 JSONObject val = (JSONObject) rvals.next();
77 String id = val.get("id").toString();
78 if (id != null && isGeneIdentifier(id))
84 } catch (ParseException e)
91 protected URL getUrl(String id, Species species)
93 String url = getDomain() + "/xrefs/symbol/" + species.toString() + "/"
94 + id + "?content-type=application/json";
98 } catch (MalformedURLException e)
105 * Calls the Ensembl xrefs REST 'symbol' endpoint and retrieves any gene ids
106 * for the given identifier, for any known model organisms
111 public List<String> getIds(String identifier)
113 List<String> result = new ArrayList<String>();
114 List<String> ids = new ArrayList<String>();
117 String[] queries = identifier.split(getAccessionSeparator());
118 BufferedReader br = null;
121 for (String query : queries)
123 for (Species taxon : Species.values())
125 if (taxon.isModelOrganism())
127 URL url = getUrl(query, taxon);
130 br = getHttpResponse(url, ids);
132 String geneId = parseSymbolResponse(br);
140 } catch (IOException e)
150 } catch (IOException e)