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 */ 018 public interface PicoVisitor { 019 020 021 /** 022 * Constant that indicates that the traversal should continue after the 023 * visit*() method has been called. 024 */ 025 boolean CONTINUE_TRAVERSAL = true; 026 027 /** 028 * Constant that indicates that the traversal should abort after the 029 * visit*() method has been called. 030 */ 031 boolean ABORT_TRAVERSAL = false; 032 033 /** 034 * Entry point for the PicoVisitor traversal. The given node is the first object, that is 035 * asked for acceptance. Only objects of type {@link PicoContainer}, {@link ComponentAdapter}, 036 * or {@link Parameter} are valid. 037 * 038 * @param node the start node of the traversal. 039 * @return a visitor-specific value. 040 * @throws IllegalArgumentException in case of an argument of invalid type. 041 */ 042 Object traverse(Object node); 043 044 /** 045 * Visit a {@link PicoContainer} that has to accept the visitor. 046 * 047 * @param pico the visited container. 048 * @return CONTINUE_TRAVERSAL if the traversal should continue. 049 * Any visitor callback that returns ABORT_TRAVERSAL indicates 050 * the desire to abort any further traversal. 051 */ 052 boolean visitContainer(PicoContainer pico); 053 054 /** 055 * Visit a {@link ComponentAdapter} that has to accept the visitor. 056 * 057 * @param componentAdapter the visited ComponentAdapter. 058 */ 059 void visitComponentAdapter(ComponentAdapter<?> componentAdapter); 060 061 /** 062 * Visit a {@link ComponentAdapter} that has to accept the visitor. 063 * 064 * @param componentAdapter the visited ComponentAdapter. 065 */ 066 void visitComponentFactory(ComponentFactory componentFactory); 067 068 /** 069 * Visit a {@link Parameter} that has to accept the visitor. 070 * 071 * @param parameter the visited Parameter. 072 */ 073 void visitParameter(Parameter parameter); 074 }