X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblFeatures.java;h=bc94619b55a00b89b3d7348c4e2f3e37fb4e5075;hb=5d60cda87940311cfff2679e6f0e96890d3e1fd6;hp=2772498cd49039120292bfa651203c68a01a3e35;hpb=26b115b0a77d521da92a06572d9b7819c2d0d49a;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblFeatures.java b/src/jalview/ext/ensembl/EnsemblFeatures.java index 2772498..bc94619 100644 --- a/src/jalview/ext/ensembl/EnsemblFeatures.java +++ b/src/jalview/ext/ensembl/EnsemblFeatures.java @@ -20,16 +20,6 @@ */ package jalview.ext.ensembl; -import jalview.datamodel.Alignment; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.Sequence; -import jalview.datamodel.SequenceFeature; -import jalview.datamodel.SequenceI; -import jalview.io.gff.SequenceOntologyI; -import jalview.util.JSONUtils; -import jalview.util.Platform; - -import java.io.BufferedReader; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -40,6 +30,14 @@ import java.util.Map; import org.json.simple.parser.ParseException; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.io.gff.SequenceOntologyI; +import jalview.util.JSONUtils; + /** * A client for fetching and processing Ensembl feature data in GFF format by * calling the overlap REST service @@ -91,12 +89,12 @@ class EnsemblFeatures extends EnsemblRestClient public AlignmentI getSequenceRecords(String query) throws IOException { // TODO: use a vararg String... for getSequenceRecords instead? - + List queries = new ArrayList<>(); queries.add(query); SequenceI seq = parseFeaturesJson(queries); if (seq == null) - return null; + return null; return new Alignment(new SequenceI[] { seq }); } @@ -109,20 +107,19 @@ class EnsemblFeatures extends EnsemblRestClient * @return */ @SuppressWarnings("unchecked") -private SequenceI parseFeaturesJson(List queries) + private SequenceI parseFeaturesJson(List queries) { - - SequenceI seq = new Sequence("Dummy", ""); - try { - - Iterator rvals = (Iterator) getJSON(null, queries, -1, MODE_ITERATOR, null); + Iterator rvals = (Iterator) getJSON(null, queries, -1, + MODE_ITERATOR, null); if (rvals == null) - return null; + { + return null; + } while (rvals.hasNext()) - { + { try { Map obj = (Map) rvals.next(); @@ -131,11 +128,11 @@ private SequenceI parseFeaturesJson(List queries) int end = Integer.parseInt(obj.get("end").toString()); String source = obj.get("source").toString(); String strand = obj.get("strand").toString(); + Object phase = obj.get("phase"); String alleles = JSONUtils .arrayToStringList((List) obj.get("alleles")); - String clinSig = JSONUtils - .arrayToStringList( - (List) obj.get("clinical_significance")); + String clinSig = JSONUtils.arrayToStringList( + (List) obj.get("clinical_significance")); /* * convert 'variation' to 'sequence_variant', and 'cds' to 'CDS' @@ -156,6 +153,10 @@ private SequenceI parseFeaturesJson(List queries) SequenceFeature sf = new SequenceFeature(type, desc, start, end, source); sf.setStrand("1".equals(strand) ? "+" : "-"); + if (phase != null) + { + sf.setPhase(phase.toString()); + } setFeatureAttribute(sf, obj, "id"); setFeatureAttribute(sf, obj, "Parent"); setFeatureAttribute(sf, obj, "consequence_type"); @@ -163,7 +164,7 @@ private SequenceI parseFeaturesJson(List queries) sf.setValue("clinical_significance", clinSig); seq.addSequenceFeature(sf); - + } catch (Throwable t) { // ignore - keep trying other features @@ -171,38 +172,40 @@ private SequenceI parseFeaturesJson(List queries) } } catch (ParseException | IOException e) { - e.printStackTrace(); + e.printStackTrace(); // ignore } return seq; } - -/** - * Returns the first non-null attribute found (if any) as a string + /** + * Returns the first non-null attribute found (if any) as a string, formatted + * suitably for display as feature description or tooltip. Answers null if + * none of the attribute keys is present. * * @param obj * @param keys * @return */ + @SuppressWarnings("unchecked") protected String getFirstNotNull(Map obj, String... keys) { - String desc = null; - for (String key : keys) { Object val = obj.get(key); if (val != null) { - String s = val.toString(); + String s = val instanceof List + ? JSONUtils.arrayToStringList((List) val) + : val.toString(); if (!s.isEmpty()) { return s; } } } - return desc; + return null; } /** @@ -213,8 +216,8 @@ private SequenceI parseFeaturesJson(List queries) * @param obj * @param key */ - protected void setFeatureAttribute(SequenceFeature sf, Map obj, - String key) + protected void setFeatureAttribute(SequenceFeature sf, + Map obj, String key) { Object object = obj.get(key); if (object != null)