Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
EnsemblXref | 46 | 26 | 14 |
1 | /* | |
2 | * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) | |
3 | * Copyright (C) $$Year-Rel$$ The Jalview Authors | |
4 | * | |
5 | * This file is part of Jalview. | |
6 | * | |
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. | |
11 | * | |
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. | |
16 | * | |
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. | |
20 | */ | |
21 | package jalview.ext.ensembl; | |
22 | ||
23 | import jalview.datamodel.AlignmentI; | |
24 | import jalview.datamodel.DBRefEntry; | |
25 | import jalview.util.DBRefUtils; | |
26 | import jalview.util.JSONUtils; | |
27 | ||
28 | import java.io.BufferedReader; | |
29 | import java.io.IOException; | |
30 | import java.net.MalformedURLException; | |
31 | import java.net.URL; | |
32 | import java.util.ArrayList; | |
33 | import java.util.Iterator; | |
34 | import java.util.List; | |
35 | import java.util.Map; | |
36 | ||
37 | import org.json.simple.parser.ParseException; | |
38 | ||
39 | /** | |
40 | * A class to fetch cross-references from Ensembl by calling the /xrefs REST | |
41 | * service | |
42 | * | |
43 | * @author gmcarstairs | |
44 | * @see http://rest.ensembl.org/documentation/info/xref_id | |
45 | */ | |
46 | class EnsemblXref extends EnsemblRestClient | |
47 | { | |
48 | ||
49 | private static final String GO_GENE_ONTOLOGY = "GO"; | |
50 | ||
51 | private String dbName = "ENSEMBL (xref)"; | |
52 | ||
53 | /** | |
54 | * Constructor given the target domain to fetch data from | |
55 | * | |
56 | * @param d | |
57 | */ | |
58 | 1 | public EnsemblXref(String d, String dbSource, String version) |
59 | { | |
60 | 1 | super(d); |
61 | 1 | dbName = dbSource; |
62 | 1 | xrefVersion = dbSource + ":" + version; |
63 | ||
64 | } | |
65 | ||
66 | 0 | @Override |
67 | public String getDbName() | |
68 | { | |
69 | 0 | return dbName; |
70 | } | |
71 | ||
72 | 0 | @Override |
73 | public AlignmentI getSequenceRecords(String queries) throws Exception | |
74 | { | |
75 | 0 | return null; |
76 | } | |
77 | ||
78 | 0 | @Override |
79 | protected URL getUrl(List<String> ids) throws MalformedURLException | |
80 | { | |
81 | 0 | return getUrl(ids.get(0)); |
82 | } | |
83 | ||
84 | 0 | @Override |
85 | protected boolean useGetRequest() | |
86 | { | |
87 | 0 | return true; |
88 | } | |
89 | ||
90 | /** | |
91 | * Calls the Ensembl xrefs REST endpoint and retrieves any cross-references | |
92 | * ("primary_id") for the given identifier (Ensembl accession id) and database | |
93 | * names. The "dbname" returned by Ensembl is canonicalised to Jalview's | |
94 | * standard version, and a DBRefEntry constructed. Currently takes all | |
95 | * identifiers apart from GO terms and synonyms. | |
96 | * | |
97 | * @param identifier | |
98 | * an Ensembl stable identifier | |
99 | * @return | |
100 | */ | |
101 | 1 | @SuppressWarnings("unchecked") |
102 | public List<DBRefEntry> getCrossReferences(String identifier) | |
103 | { | |
104 | 1 | List<DBRefEntry> result = new ArrayList<>(); |
105 | 1 | List<String> ids = new ArrayList<>(); |
106 | 1 | ids.add(identifier); |
107 | ||
108 | 1 | try |
109 | { | |
110 | 1 | Iterator<Object> rvals = (Iterator<Object>) getJSON( |
111 | getUrl(identifier), ids, -1, MODE_ITERATOR, null); | |
112 | 4 | while (rvals.hasNext()) |
113 | { | |
114 | 3 | Map<String, Object> val = (Map<String, Object>) rvals.next(); |
115 | 3 | String db = val.get("dbname").toString(); |
116 | 3 | String id = val.get("primary_id").toString(); |
117 | 3 | if (db != null && id != null && !GO_GENE_ONTOLOGY.equals(db)) |
118 | { | |
119 | 2 | db = DBRefUtils.getCanonicalName(db); |
120 | 2 | DBRefEntry dbref = new DBRefEntry(db, getXRefVersion(), id); |
121 | 2 | result.add(dbref); |
122 | } | |
123 | } | |
124 | } catch (ParseException | IOException e) | |
125 | { | |
126 | // ignore | |
127 | } | |
128 | 1 | return result; |
129 | } | |
130 | ||
131 | // /** | |
132 | // * Parses "primary_id" and "dbname" values from the JSON response and | |
133 | // * constructs a DBRefEntry. Returns a list of the DBRefEntry created. Note | |
134 | // we | |
135 | // * don't parse "synonyms" as they appear to be either redirected or obsolete | |
136 | // * in Uniprot. | |
137 | // * | |
138 | // * @param br | |
139 | // * @return | |
140 | // * @throws IOException | |
141 | // */ | |
142 | // @SuppressWarnings("unchecked") | |
143 | // protected List<DBRefEntry> parseResponse(BufferedReader br) | |
144 | // throws IOException | |
145 | // { | |
146 | // return result; | |
147 | // } | |
148 | // | |
149 | private String xrefVersion = "ENSEMBL:0"; | |
150 | ||
151 | /** | |
152 | * version string for Xrefs - for 2.10, hardwired for ENSEMBL:0 | |
153 | * | |
154 | * @return | |
155 | */ | |
156 | 2 | public String getXRefVersion() |
157 | { | |
158 | 2 | return xrefVersion; |
159 | } | |
160 | ||
161 | /** | |
162 | * Returns the URL for the REST endpoint to fetch all cross-references for an | |
163 | * identifier. Note this may return protein cross-references for nucleotide. | |
164 | * Filter the returned list as required. | |
165 | * | |
166 | * @param identifier | |
167 | * @return | |
168 | */ | |
169 | 1 | protected URL getUrl(String identifier) |
170 | { | |
171 | 1 | String url = getDomain() + "/xrefs/id/" + identifier + CONTENT_TYPE_JSON |
172 | + "&all_levels=1"; | |
173 | 1 | try |
174 | { | |
175 | 1 | return new URL(url); |
176 | } catch (MalformedURLException e) | |
177 | { | |
178 | 0 | return null; |
179 | } | |
180 | } | |
181 | ||
182 | } |