package lectures.composite.visitors;
import util.annotations.WebDocuments;

import java.awt.Component;
import java.awt.Container;

import lectures.animation.threads_commands.ThreadSupport;

@WebDocuments({"Lectures/CompositeVisitors.pptx", "Lectures/CompositeVisitors.pdf", "Videos/CompositeVisitors.avi"})
public class SwingComponentTreeTraverser {  
    public static void traversePreOrder(Component aComponent, ComponentVisitor aVisitor) {  
        aVisitor.visit(aComponent);
        ThreadSupport.sleep(1000);
        if (!(aComponent instanceof Container)) return;
        Container aContainer = (Container) aComponent;
        Component[] components = aContainer.getComponents();
        for (int i = 0; i < components.length; i++) {
            traversePreOrder(components[i], aVisitor);          
        }       
    }
    public static void traversePostOrder(Component aComponent, ComponentVisitor aVisitor) {     
        if (aComponent instanceof Container) {;
        Container aContainer = (Container) aComponent;
        Component[] components = aContainer.getComponents();
        for (int i = 0; i < components.length; i++) {
            traversePostOrder(components[i], aVisitor);         
        }
        }
        aVisitor.visit(aComponent);
        ThreadSupport.sleep(1000);
    }
}