From: gmungoc Date: Fri, 16 Mar 2018 15:03:11 +0000 (+0000) Subject: Merge remote-tracking branch 'origin/releases/Release_2_10_4_Branch' into develop X-Git-Tag: Release_2_11_0~51 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=c697eb1e696468bddf7c976a85528fbedbebfbd6;p=jalview.git Merge remote-tracking branch 'origin/releases/Release_2_10_4_Branch' into develop Conflicts: src/jalview/ext/ensembl/EnsemblLookup.java --- c697eb1e696468bddf7c976a85528fbedbebfbd6 diff --cc src/jalview/ext/ensembl/EnsemblLookup.java index ed1b4fa,877331d..102dffb --- a/src/jalview/ext/ensembl/EnsemblLookup.java +++ b/src/jalview/ext/ensembl/EnsemblLookup.java @@@ -46,14 -41,7 +46,9 @@@ import org.json.simple.parser.ParseExce */ 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() @@@ -227,198 -215,4 +222,148 @@@ return geneId; } + /** + * Calls the Ensembl lookup REST endpoint and retrieves the 'species' for the + * given identifier, or null if not found + * + * @param identifier + * @return + */ + public String getSpecies(String identifier) + { + String species = null; + JSONObject json = getResult(identifier, null); + if (json != null) + { + Object o = json.get(SPECIES); + if (o != null) + { + species = o.toString(); + } + } + return species; + } + + /** + * Calls the /lookup/id rest service and returns the response as a JSONObject, + * or null if any error + * + * @param identifier + * @param objectType + * (optional) + * @return + */ + protected JSONObject 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) + { + 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 + * + * @param geneId + * @return + */ + public GeneLociI getGeneLoci(String geneId) + { + return parseGeneLoci(getResult(geneId, OBJECT_TYPE_GENE)); + } + + /** + * Parses the /lookup/id response for species, asssembly_name, + * seq_region_name, start, end and returns an object that wraps them, or null + * if unsuccessful + * + * @param json + * @return + */ + GeneLociI parseGeneLoci(JSONObject json) + { + if (json == null) + { + return null; + } + + try + { + final String species = json.get("species").toString(); + final String assembly = json.get("assembly_name").toString(); + final String chromosome = json.get("seq_region_name").toString(); + String strand = json.get("strand").toString(); + int start = Integer.parseInt(json.get("start").toString()); + int end = Integer.parseInt(json.get("end").toString()); + int fromEnd = end - start + 1; + boolean reverseStrand = "-1".equals(strand); + int toStart = reverseStrand ? end : start; + int toEnd = reverseStrand ? start : end; + List fromRange = Collections.singletonList(new int[] { 1, + 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; + } + }; + } catch (NullPointerException | NumberFormatException e) + { + Cache.log.error("Error looking up gene loci: " + e.getMessage()); + e.printStackTrace(); + } + return null; + } + } diff --cc src/jalview/gui/FeatureSettings.java index dedbba0,12f9db9..821454f --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@@ -1031,9 -964,10 +1031,10 @@@ public class FeatureSettings extends JP Object[][] data = ((FeatureTableModel) table.getModel()).getData(); for (int i = 0; i < data.length; i++) { -- data[i][2] = !(Boolean) data[i][2]; ++ data[i][SHOW_COLUMN] = !(Boolean) data[i][SHOW_COLUMN]; } - af.alignPanel.paintAlignment(true, true); + updateFeatureRenderer(data, true); + table.repaint(); } public void orderByAvWidth() diff --cc test/jalview/io/CrossRef2xmlTests.java index b3db4de,ef7615b..2b8a62f --- a/test/jalview/io/CrossRef2xmlTests.java +++ b/test/jalview/io/CrossRef2xmlTests.java @@@ -93,12 -104,12 +107,12 @@@ public class CrossRef2xmlTests extends // . codonframes // // - HashMap dbtoviewBit = new HashMap<>(); + Map dbtoviewBit = new HashMap<>(); List keyseq = new ArrayList<>(); - HashMap savedProjects = new HashMap<>(); + Map savedProjects = new HashMap<>(); - for (String[] did : new String[][] { { "UNIPROT", "P00338" } }) - { + // for (String[] did : new String[][] { { "UNIPROT", "P00338" } }) + // { // pass counters - 0 - first pass, 1 means retrieve project rather than // perform action int pass1 = 0, pass2 = 0, pass3 = 0;