001package org.hl7.fhir.r5.elementmodel;
002
003
004public class ElementVisitor {
005
006  public enum ElementVisitorInstruction {
007    VISIT_CHILDREN, NO_VISIT_CHILDREN;
008  }
009
010  public interface IElementVisitor {
011    public ElementVisitorInstruction visit(Object context, Element element);
012  }
013
014  private IElementVisitor visitor;
015  
016  public ElementVisitor(IElementVisitor visitor) {
017    this.visitor = visitor;
018  }
019
020  private void visitElement(Object context, Element e) {
021    for (Element c : e.getChildren()) {
022      visit(context, c);
023    }
024  }
025
026  public void visit(Object context, Element e) {
027    ElementVisitorInstruction c = visitor.visit(context, e);
028    if (c == ElementVisitorInstruction.VISIT_CHILDREN) {
029      visitElement(context, e);
030    }
031  }
032
033}