OntologyAlgorithm { public static boolean existsPath( Ontology ontology, final TermId sourceID, TermId destID) { if (sourceID.equals(destID)) return false; final DefaultDirectedGraph<TermId, IdLabeledEdge> graph = ontology.getGraph(); List<TermId> visited = new ArrayList<>(); BreadthFirstSearch<TermId, IdLabeledEdge> bfs = new BreadthFirstSearch<>(); bfs.startFromForward( graph, sourceID, (g, termId) -> { visited.add(termId); return true; }); return visited.contains(destID); } private  OntologyAlgorithm(); static boolean existsPath(
      Ontology ontology,
      final TermId sourceID,
      TermId destID); static Set<TermId> getChildTerms(
    Ontology ontology, TermId parentTermId); static Set<TermId> getChildTerms(
      Ontology ontology,
      TermId parentTermId,
      boolean includeOriginalTerm); static Set<TermId> getChildTerms(
    Ontology ontology, Set<TermId> parentTermIdSet); static Set<TermId> getParentTerms(
    Ontology ontology, Set<TermId> childTermIdSet); static Set<TermId> getParentTerms(
      Ontology ontology,
      Set<TermId> childTermIdSet,
      boolean includeOriginalTerm); static Set<TermId> getDescendents(
    Ontology ontology, TermId parentTermId); static Set<TermId> getParentTerms(
      Ontology ontology,
      TermId childTermId,
      boolean includeOriginalTerm); static Set<TermId> getAncestorTerms(
      Ontology ontology,
      TermId rootTerm,
      Set<TermId> children,
      boolean includeOriginalTerm); static Set<TermId> getAncestorTerms(
      Ontology ontology,
      TermId rootTerm,
      TermId child,
      boolean includeOriginalTerm); static Set<TermId> getAncestorTerms(
      Ontology ontology,
      Set<TermId> children,
      boolean includeOriginalTerm); static Set<TermId> getAncestorTerms(
      Ontology ontology,
      TermId child,
      boolean includeOriginalTerm); static Set<TermId> getParentTerms(
    Ontology ontology, TermId childTermId); static Set<TermId> getAncestorTerms(
    Ontology ontology, TermId childTermId); static boolean isSubclass(
    Ontology ontology, TermId source, TermId dest); static boolean termsAreSiblings(
    Ontology ontology, TermId t1, TermId t2); static boolean termsAreRelated(
    Ontology ontology, TermId t1, TermId t2); static boolean termsAreUnrelated(
    Ontology ontology, TermId t1, TermId t2);  }
@Test public void testPathExists() { assertTrue(existsPath(ontology, id1, id2)); assertFalse(existsPath(ontology, id2, id1)); assertTrue(existsPath(ontology, id1, id3)); assertFalse(existsPath(ontology, id3, id1)); assertTrue(existsPath(ontology, id1, id4)); assertFalse(existsPath(ontology, id4, id1)); assertTrue(existsPath(ontology, id1, id5)); assertFalse(existsPath(ontology, id5, id1)); assertTrue(existsPath(ontology, id2, id5)); assertFalse(existsPath(ontology, id5, id2)); assertTrue(existsPath(ontology, id4, id5)); assertFalse(existsPath(ontology, id5, id4)); assertFalse(existsPath(ontology, id5, id5)); }