KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > avalon > framework > component > DefaultComponentManager


1 /* ====================================================================
2  * The Apache Software License, Version 1.1
3  *
4  * Copyright (c) 1997-2003 The Apache Software Foundation. All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution,
20  * if any, must include the following acknowledgment:
21  * "This product includes software developed by the
22  * Apache Software Foundation (http://www.apache.org/)."
23  * Alternately, this acknowledgment may appear in the software
24  * itself, if and wherever such third-party acknowledgments
25  * normally appear.
26  *
27  * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
28  * must not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation. For more
52  * information on the Apache Software Foundation, please see
53  * <http://www.apache.org/>.
54  */

55 package org.apache.avalon.framework.component;
56
57 import java.util.HashMap JavaDoc;
58 import java.util.Iterator JavaDoc;
59 import java.util.Map JavaDoc;
60
61 /**
62  * This class is a static implementation of a ComponentManager. Allow ineritance
63  * and extension so you can generate a tree of ComponentManager each defining
64  * Component scope.
65  *
66  * <p>
67  * <span style="color: red">Deprecated: </span><i>
68  * Use {@link org.apache.avalon.framework.service.DefaultServiceManager} instead.
69  * </i>
70  * </p>
71  *
72  * @author <a HREF="mailto:dev@avalon.apache.org">Avalon Development Team</a>
73  * @version CVS $Revision: 1.24 $ $Date: 2003/02/11 15:58:38 $
74  */

75 public class DefaultComponentManager
76     implements ComponentManager
77 {
78     private final HashMap JavaDoc m_components = new HashMap JavaDoc();
79     private final ComponentManager m_parent;
80     private boolean m_readOnly;
81
82     /**
83      * Construct ComponentManager with no parent.
84      *
85      */

86     public DefaultComponentManager()
87     {
88         this( null );
89     }
90
91     /**
92      * Construct ComponentManager with specified parent.
93      *
94      * @param parent the ComponentManagers parent
95      */

96     public DefaultComponentManager( final ComponentManager parent )
97     {
98         m_parent = parent;
99     }
100
101     /**
102      * Retrieve Component by key from ComponentManager.
103      *
104      * @param key the key
105      * @return the Component
106      * @throws ComponentException if an error occurs
107      */

108     public Component lookup( final String JavaDoc key )
109         throws ComponentException
110     {
111         final Component component = (Component)m_components.get( key );
112
113         if( null != component )
114         {
115             return component;
116         }
117         else if( null != m_parent )
118         {
119             return m_parent.lookup( key );
120         }
121         else
122         {
123             throw new ComponentException( key, "Unable to provide implementation." );
124         }
125     }
126
127     /**
128      * Returns <code>true</code> if the component m_manager is managing a component
129      * with the specified key, <code>false</code> otherwise.
130      *
131      * @param key key of the component you are lokking for
132      * @return <code>true</code> if the component m_manager has a component with that key
133      */

134     public boolean hasComponent( final String JavaDoc key )
135     {
136         boolean componentExists = false;
137
138         try
139         {
140             this.release( this.lookup( key ) );
141             componentExists = true;
142         }
143         catch( Throwable JavaDoc t )
144         {
145             // Ignore all throwables--we want a yes or no answer.
146
}
147
148         return componentExists;
149     }
150
151     /**
152      * Place Component into ComponentManager.
153      *
154      * @param key the components key
155      * @param component the component
156      */

157     public void put( final String JavaDoc key, final Component component )
158     {
159         checkWriteable();
160         m_components.put( key, component );
161     }
162
163     /**
164      * Release component.
165      *
166      * @param component the component
167      */

168     public void release( final Component component )
169     {
170         // if the ComponentManager handled pooling, it would be
171
// returned to the pool here.
172
}
173
174     /**
175      * Build a human readable representation of ComponentManager.
176      *
177      * @return the description of ComponentManager
178      */

179     public String JavaDoc toString()
180     {
181         final StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
182         final Iterator JavaDoc components = m_components.keySet().iterator();
183         buffer.append( "Components:" );
184
185         while( components.hasNext() )
186         {
187             buffer.append( "[" );
188             buffer.append( components.next() );
189             buffer.append( "]" );
190         }
191
192         return buffer.toString();
193     }
194
195     /**
196      * Helper method for subclasses to retrieve parent.
197      *
198      * @return the parent ComponentManager
199      */

200     protected final ComponentManager getParent()
201     {
202         return m_parent;
203     }
204
205     /**
206      * Helper method for subclasses to retrieve component map.
207      *
208      * @return the component map
209      */

210     protected final Map JavaDoc getComponentMap()
211     {
212         return m_components;
213     }
214
215     /**
216      * Make this component m_manager read only.
217      */

218     public void makeReadOnly()
219     {
220         m_readOnly = true;
221     }
222
223     /**
224      * Check if this component m_manager is writeable.
225      *
226      * @throws IllegalStateException if this component m_manager is read-only
227      */

228     protected final void checkWriteable()
229         throws IllegalStateException JavaDoc
230     {
231         if( m_readOnly )
232         {
233             final String JavaDoc message =
234                 "ComponentManager is read only and can not be modified";
235             throw new IllegalStateException JavaDoc( message );
236         }
237     }
238 }
239
Popular Tags