X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fgff%2FSequenceOntologyLite.java;h=2cbec369e9e345945c6c31e3b1bc5942b0370751;hb=6a05eb3f55d97e685f0c723822384633d5636778;hp=670d8874fd42cb1563b41c2d4a1bdf38e15f56c4;hpb=cd61435e058e0bf9b60292149c20299be7b4cf1f;p=jalview.git diff --git a/src/jalview/io/gff/SequenceOntologyLite.java b/src/jalview/io/gff/SequenceOntologyLite.java index 670d887..2cbec36 100644 --- a/src/jalview/io/gff/SequenceOntologyLite.java +++ b/src/jalview/io/gff/SequenceOntologyLite.java @@ -73,6 +73,7 @@ public class SequenceOntologyLite extends OntologyBase { "snRNA", "transcript" }, { "miRNA", "transcript" }, { "lincRNA", "transcript" }, + { "lnc_RNA", "transcript" }, { "rRNA", "transcript" }, { "mRNA", "transcript" }, // there are many more sub-types of ncRNA... @@ -253,4 +254,70 @@ public class SequenceOntologyLite extends OntologyBase return termsNotFound; } } + + @Override + public List getRootParents(final String term) + { + /* + * check in cache first + */ + if (rootParents.containsKey(term)) + { + return rootParents.get(term); + } + + List top = new ArrayList<>(); + List query = new ArrayList<>(); + query.add(term); + + while (!query.isEmpty()) + { + List nextQuery = new ArrayList<>(); + for (String q : query) + { + List theParents = parents.get(q); + if (theParents != null) + { + if (theParents.size() == 1 && theParents.get(0).equals(q)) + { + /* + * top-level term + */ + if (!top.contains(q)) + { + top.add(q); + } + } + else + { + for (String p : theParents) + { + if (!p.equals(q)) + { + nextQuery.add(p); + } + } + } + } + } + query = nextQuery; + } + + rootParents.put(term, top); + + return top.isEmpty() ? null : top; + } + + @Override + public List getParents(String term) + { + List result = parents.get(term); + return result == null ? new ArrayList<>() : result; + } + + @Override + public boolean isValidTerm(String term) + { + return parents.containsKey(term); + } }