001    /*
002     @license.text@ 
003     */
004    package biz.hammurapi.xml.dom;
005    
006    import org.w3c.dom.Node;
007    import org.w3c.dom.NodeList;
008    
009    import biz.hammurapi.util.PoliteVisitor;
010    import biz.hammurapi.util.Visitable;
011    import biz.hammurapi.util.Visitor;
012    
013    /**
014     * Navigates Visitor through DOM tree.
015     * @author Pavel Vlasov
016     * @version $Revision: 1.2 $
017     */
018    public class DomVisitable implements Visitable {
019            private Node node;
020    
021            public boolean accept(Visitor visitor) {
022                    return accept(node, visitor);
023            }
024            
025            /**
026             * @param node
027             * @param visitor
028             * @return
029             */
030            private boolean accept(Node node, Visitor visitor) {
031                    if (visitor.visit(node)) {
032                            NodeList list = node.getChildNodes();
033                            for (int i=0, j=list.getLength(); i<j; i++) {
034                                    accept(list.item(i), visitor);
035                            }
036                            if (visitor instanceof PoliteVisitor) {
037                                    ((PoliteVisitor) visitor).leave(node);
038                            }
039                            return true;
040                    }
041                    return false;
042            }
043    
044            /**
045             * @param node
046             */
047            public DomVisitable(Node node) {
048                    super();
049                    this.node = node;
050            }
051    }