private static void fill(Tree<OWLAxiom> tree, List<OWLAxiom> ordering, Map<OWLAxiom, Integer> indentMap) { if (!tree.isRoot()) { ordering.add(tree.getUserObject()); indentMap.put(tree.getUserObject(), tree.getPathToRoot().size() - 2); } for(Tree<OWLAxiom> child : tree.getChildren()) { fill(child, ordering, indentMap); } }
private static int childDiff(Tree<OWLAxiom> o1, Tree<OWLAxiom> o2) { int childCount1 = o1.getChildCount(); childCount1 = childCount1 > 0 ? 0 : 1; int childCount2 = o2.getChildCount(); childCount2 = childCount2 > 0 ? 0 : 1; return childCount1 - childCount2; }
private int getMaxDepth(Tree<N> tree) { int maxChildDepth = tree.getPathToRoot().size(); return tree.getChildren().stream().mapToInt(this::getMaxDepth).max().orElse(maxChildDepth); } }
private void fillDepthFirst(Tree<N> tree, List<N> bin) { bin.add(tree.getUserObject()); tree.getChildren().forEach(c -> fillDepthFirst(c, bin)); }
@Override public List<N> getUserObjectPathToRoot() { List<N> path = new ArrayList<>(); path.add(0, this.getUserObject()); Tree<N> par = parent; while (par != null) { path.add(0, par.getUserObject()); par = par.getParent(); } return path; }
@Override public int compare(Tree<OWLAxiom> o1, Tree<OWLAxiom> o2) { OWLAxiom ax1 = o1.getUserObject(); OWLAxiom ax2 = o2.getUserObject(); return -1; int childCount1 = o1.getChildCount(); childCount1 = childCount1 > 0 ? 0 : 1; int childCount2 = o2.getChildCount(); childCount2 = childCount2 > 0 ? 0 : 1; int diff = childCount1 - childCount2;
@Override public String render(Tree<OWLAxiom> node) { if (justification.contains(node.getUserObject())) { return "*\t" + node; } else { return " \t" + node; } } });
@Override public void dump(PrintWriter writer, int indent) { int depth = getPathToRoot().size(); char[] chars = new char[depth + indent]; Arrays.fill(chars, '\t'); String tabs = new String(chars); writer.print(tabs); String ren = toStringRenderer.render(this); ren = ren.replace("\n", "\n" + tabs); writer.println(ren); for (Tree<N> child : getChildren()) { Object edge = getEdge(child); if (edge != null) { writer.print("\t--- "); writer.print(edge); writer.print(" ---\n\n"); } child.dump(writer, indent); } writer.flush(); }
ExplanationOrderer orderer = new ExplanationOrdererImplNoManager(); Tree<OWLAxiom> tree = orderer.getOrderedExplanation((OWLAxiom) checker.getEntailment(), expandedAxioms); List<OWLAxiom> axiomList = tree.fillDepthFirst(); for (OWLAxiom ax : axiomList) { if (justification.contains(ax)) { tree.setNodeRenderer(new NodeRenderer<OWLAxiom>() { @Override public String render(Tree<OWLAxiom> node) { tree.dump(new PrintWriter(sw)); sb.append(sw); log(sb.toString());
@Override public List<Tree<N>> getPathToRoot() { List<Tree<N>> path = new ArrayList<>(); path.add(0, this); Tree<N> par = parent; while (par != null) { path.add(0, par); par = par.getParent(); } return path; }
private void getUserObjectClosure(Tree<N> tree, Set<N> bin) { bin.add(tree.getUserObject()); tree.getChildren().forEach(c -> getUserObjectClosure(c, bin)); }
private int getMaxDepth(Tree<N> tree) { int maxChildDepth = tree.getPathToRoot().size(); return tree.getChildren().stream().mapToInt(this::getMaxDepth).max().orElse(maxChildDepth); } }
@Override public List<N> getUserObjectPathToRoot() { List<N> path = new ArrayList<>(); path.add(0, this.getUserObject()); Tree<N> par = parent; while (par != null) { path.add(0, par.getUserObject()); par = par.getParent(); } return path; }
@Override public void dump(PrintWriter writer, int indent) { int depth = getPathToRoot().size(); char[] chars = new char[depth + indent]; Arrays.fill(chars, '\t'); String tabs = new String(chars); writer.print(tabs); String ren = toStringRenderer.render(this); ren = ren.replace("\n", "\n" + tabs); writer.println(ren); for (Tree<N> child : getChildren()) { Object edge = getEdge(child); if (edge != null) { writer.print("\t--- "); writer.print(edge); writer.print(" ---\n\n"); } child.dump(writer, indent); } writer.flush(); }
@Override public List<Tree<N>> getPathToRoot() { List<Tree<N>> path = new ArrayList<>(); path.add(0, this); Tree<N> par = parent; while (par != null) { path.add(0, par); par = par.getParent(); } return path; }
private void fillDepthFirst(Tree<N> tree, List<N> bin) { bin.add(tree.getUserObject()); tree.getChildren().forEach(c -> fillDepthFirst(c, bin)); }
/** * Render axiom tree in indented Markdown using the provided renderer. * * @param tree indented collection of axioms * @param renderer renderer for displaying axioms and entities * @return */ private static String renderTree(Tree<OWLAxiom> tree, OWLObjectRenderer renderer) { StringBuilder builder = new StringBuilder(); if (tree.isRoot()) { builder.append("## "); builder.append(renderer.render(tree.getUserObject())); builder.append(" ##"); builder.append("\n"); } else { String padding = tree.getPathToRoot().stream().skip(1).map(x -> " ").collect(Collectors.joining()); builder.append(padding); builder.append("- "); builder.append(renderer.render(tree.getUserObject())); } if (!tree.isLeaf()) builder.append("\n"); String children = tree.getChildren() .stream() .map(child -> renderTree(child, renderer)) .collect(Collectors.joining("\n")); builder.append(children); return builder.toString(); }
private int getMaxDepth(Tree<N> tree) { int maxChildDepth = tree.getPathToRoot().size(); return tree.getChildren().stream().mapToInt(this::getMaxDepth).max().orElse(maxChildDepth); } }
@Override public List<N> getUserObjectPathToRoot() { List<N> path = new ArrayList<>(); path.add(0, this.getUserObject()); Tree<N> par = parent; while (par != null) { path.add(0, par.getUserObject()); par = par.getParent(); } return path; }
private static int childDiff(Tree<OWLAxiom> o1, Tree<OWLAxiom> o2) { int childCount1 = o1.getChildCount(); childCount1 = childCount1 > 0 ? 0 : 1; int childCount2 = o2.getChildCount(); childCount2 = childCount2 > 0 ? 0 : 1; return childCount1 - childCount2; }