예제 #1
0
  private <T> void walkTree(
      final JsonPointer pwd,
      final SchemaTree tree,
      final SchemaListener<T> listener,
      final ProcessingReport report)
      throws ProcessingException {
    listener.enteringPath(pwd, report);
    final SchemaTree resolvedTree = resolveTree(tree, report);
    listener.visiting(resolvedTree, report);

    /*
     * Grab pointer collectors
     */
    final Map<String, PointerCollector> map = Maps.newTreeMap();

    map.putAll(collectors);
    map.keySet().retainAll(Sets.newHashSet(resolvedTree.getNode().fieldNames()));

    /*
     * Collect pointers to visit next
     */
    final List<JsonPointer> pointers = Lists.newArrayList();
    for (final PointerCollector collector : map.values()) collector.collect(pointers, resolvedTree);

    /*
     * Now, visit the collected set of pointers
     */
    for (final JsonPointer ptr : pointers) {
      walkTree(pwd.append(ptr), resolvedTree.append(ptr), listener, report);
    }
    listener.exitingPath(pwd, report);
  }