1 package jalview.ext.ensembl;
3 import jalview.datamodel.AlignmentI;
4 import jalview.datamodel.DBRefSource;
6 import java.io.BufferedReader;
7 import java.io.IOException;
8 import java.net.MalformedURLException;
10 import java.util.Iterator;
11 import java.util.List;
13 import org.json.simple.JSONArray;
14 import org.json.simple.JSONObject;
15 import org.json.simple.parser.JSONParser;
16 import org.json.simple.parser.ParseException;
18 public class EnsemblMap extends EnsemblRestClient
22 * Default constructor (to use rest.ensembl.org)
30 * Constructor given the target domain to fetch data from
34 public EnsemblMap(String domain)
40 public String getDbName()
42 return DBRefSource.ENSEMBL;
46 public AlignmentI getSequenceRecords(String queries) throws Exception
48 return null; // not used
51 protected URL getUrl(String species, String chromosome, String fromRef,
52 String toRef, int startPos, int endPos)
53 throws MalformedURLException
55 String url = getDomain() + "/map/" + species + "/" + fromRef + "/"
56 + chromosome + ":" + startPos + ".." + endPos + ":1/" + toRef
57 + "?content-type=application/json";
61 } catch (MalformedURLException e)
68 protected boolean useGetRequest()
74 protected String getRequestMimeType(boolean multipleIds)
76 return "application/json";
80 protected String getResponseMimeType()
82 return "application/json";
86 protected URL getUrl(List<String> ids) throws MalformedURLException
88 return null; // not used
91 public int[] getMapping(String species, String chromosome,
92 String fromRef, String toRef, int[] queryRange)
95 BufferedReader br = null;
99 url = getUrl(species, chromosome, fromRef, toRef, queryRange[0],
101 br = getHttpResponse(url, null);
102 return (parseResponse(br));
103 } catch (Throwable t)
105 System.out.println("Error calling " + url + ": " + t.getMessage());
111 * Parses the JSON response from the /map REST service. The format is (with
112 * some fields omitted)
117 * "original": {"end":45109016,"start":45051610},
118 * "mapped" : {"end":43186384,"start":43128978}
125 protected int[] parseResponse(BufferedReader br)
128 JSONParser jp = new JSONParser();
132 JSONObject parsed = (JSONObject) jp.parse(br);
133 JSONArray mappings = (JSONArray) parsed.get("mappings");
135 Iterator rvals = mappings.iterator();
136 while (rvals.hasNext())
138 // todo check for "mapped"
139 JSONObject val = (JSONObject) rvals.next();
140 JSONObject mapped = (JSONObject) val.get("mapped");
141 String start = mapped.get("start").toString();
142 String end = mapped.get("end").toString();
143 result = new int[] { Integer.parseInt(start), Integer.parseInt(end) };
145 } catch (IOException | ParseException | NumberFormatException e)