@Override public void visit(Visitor visitor) { visitor.startVisit(getRootGroup()); visit(getRootGroup(), visitor); visitor.endVisit(getRootGroup()); }
@Override public void visit(G group, Visitor visitor) { if (visitor.isEntriesFirst()) { for (E entry : group.getEntries()) { visitor.visit(entry); } } for (G g : group.getGroups()) { visitor.startVisit(g); visit(g, visitor); visitor.endVisit(g); } if (!visitor.isEntriesFirst()) { for (Entry entry : group.getEntries()) { visitor.visit(entry); } } }