001    package org.apache.tapestry.pageload;
002    
003    import org.apache.hivemind.PoolManageable;
004    import org.apache.tapestry.IComponent;
005    import org.apache.tapestry.IForm;
006    import org.apache.tapestry.IPage;
007    import org.apache.tapestry.dojo.IWidget;
008    
009    /**
010     * Looks for components of type {@link org.apache.tapestry.IForm} and {@link org.apache.tapestry.dojo.IWidget} so
011     * that the appropriate javascript includes can be made on an as needed basis by {@link org.apache.tapestry.dojo.AjaxShellDelegate}.
012     */
013    public class ComponentTypeVisitor implements IComponentVisitor, PoolManageable {
014    
015        IPage _page;
016    
017        public void visitComponent(IComponent component)
018        {
019            if (IPage.class.isInstance(component)) {
020    
021                _page = (IPage) component;
022                return;
023            }
024    
025            if (IForm.class.isInstance(component) && _page != null) {
026    
027                _page.setHasFormComponents(true);
028            }
029    
030            if (IWidget.class.isInstance(component) && _page != null) {
031    
032                _page.setHasWidgets(true);
033            }
034        }
035    
036        public void activateService()
037        {
038            _page = null;
039        }
040    
041        public void passivateService()
042        {
043            _page = null;
044        }
045    }