001 /***************************************************************************** 002 * Copyright (C) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 *****************************************************************************/ 008 package org.picocontainer; 009 010 /** 011 * Interface realizing a visitor pattern for {@link PicoContainer} as described in the GoF. 012 * The visitor should visit the container, its children, all registered {@link ComponentAdapter} 013 * instances and all instantiated components. 014 * 015 * @author Aslak Hellesøy 016 * @author Jörg Schaible 017 * @version $Revision: 1753 $ 018 * @since 1.1 019 */ 020 public interface PicoVisitor { 021 /** 022 * Entry point for the PicoVisitor traversal. The given node is the first object, that is 023 * asked for acceptance. Only objects of type {@link PicoContainer}, {@link ComponentAdapter}, 024 * or {@link Parameter} are valid. 025 * 026 * @param node the start node of the traversal. 027 * @return a visitor-specific value. 028 * @throws IllegalArgumentException in case of an argument of invalid type. 029 * @since 1.1 030 */ 031 Object traverse(Object node); 032 033 /** 034 * Visit a {@link PicoContainer} that has to accept the visitor. 035 * 036 * @param pico the visited container. 037 * @since 1.1 038 */ 039 040 void visitContainer(PicoContainer pico); 041 /** 042 * Visit a {@link ComponentAdapter} that has to accept the visitor. 043 * 044 * @param componentAdapter the visited ComponentAdapter. 045 * @since 1.1 046 */ 047 048 void visitComponentAdapter(ComponentAdapter componentAdapter); 049 /** 050 * Visit a {@link Parameter} that has to accept the visitor. 051 * 052 * @param parameter the visited Parameter. 053 * @since 1.1 054 */ 055 void visitParameter(Parameter parameter); 056 }