KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > avalon > framework > service > DefaultServiceManager


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.service;
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 <code>ServiceManager</code>. Allow ineritance
63  * and extension so you can generate a tree of <code>ServiceManager</code> each defining
64  * Object scope.
65  *
66  * @author <a HREF="mailto:dev@avalon.apache.org">Avalon Development Team</a>
67  * @version CVS $Revision: 1.18 $ $Date: 2003/02/11 15:58:42 $
68  */

69 public class DefaultServiceManager
70     implements ServiceManager
71 {
72     private final HashMap JavaDoc m_objects = new HashMap JavaDoc();
73     private final ServiceManager m_parent;
74     private boolean m_readOnly;
75
76     /**
77      * Construct <code>ServiceManager</code> with no parent.
78      *
79      */

80     public DefaultServiceManager()
81     {
82         this( null );
83     }
84
85     /**
86      * Construct <code>ServiceManager</code> with specified parent.
87      *
88      * @param parent this <code>ServiceManager</code>'s parent
89      */

90     public DefaultServiceManager( final ServiceManager parent )
91     {
92         m_parent = parent;
93     }
94
95     /**
96      * Retrieve <code>Object</code> by key from <code>ServiceManager</code>.
97      *
98      * @param key the key
99      * @return the <code>Object</code>
100      * @throws ServiceException if an error occurs
101      */

102     public Object JavaDoc lookup( final String JavaDoc key )
103         throws ServiceException
104     {
105         final Object JavaDoc object = m_objects.get( key );
106         if( null != object )
107         {
108             return object;
109         }
110         else if( null != m_parent )
111         {
112             return m_parent.lookup( key );
113         }
114         else
115         {
116             final String JavaDoc message = "Unable to provide implementation for " + key;
117             throw new ServiceException( key, message, null );
118         }
119     }
120
121     /**
122      * Check to see if a <code>Object</code> exists for a key.
123      *
124      * @param key a string identifying the key to check.
125      * @return True if the object exists, False if it does not.
126      */

127     public boolean hasService( final String JavaDoc key )
128     {
129         try
130         {
131             lookup( key );
132             return true;
133         }
134         catch( final Throwable JavaDoc t )
135         {
136             return false;
137         }
138     }
139
140     /**
141      * Place <code>Object</code> into <code>ServiceManager</code>.
142      *
143      * @param key the object's key
144      * @param object an <code>Object</code> value
145      */

146     public void put( final String JavaDoc key, final Object JavaDoc object )
147     {
148         checkWriteable();
149         m_objects.put( key, object );
150     }
151
152     /**
153      * Build a human readable representation of this
154      * <code>ServiceManager</code>.
155      *
156      * @return the description of this <code>ServiceManager</code>
157      */

158     public String JavaDoc toString()
159     {
160         final StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
161         final Iterator JavaDoc objects = m_objects.keySet().iterator();
162         buffer.append( "Services:" );
163
164         while( objects.hasNext() )
165         {
166             buffer.append( "[" );
167             buffer.append( objects.next() );
168             buffer.append( "]" );
169         }
170
171         return buffer.toString();
172     }
173
174     /**
175      * Helper method for subclasses to retrieve parent.
176      *
177      * @return the parent <code>ServiceManager</code>
178      */

179     protected final ServiceManager getParent()
180     {
181         return m_parent;
182     }
183
184     /**
185      * Helper method for subclasses to retrieve object map.
186      *
187      * @return the object map
188      */

189     protected final Map JavaDoc getObjectMap()
190     {
191         return m_objects;
192     }
193
194     /**
195      * Makes this <code>ServiceManager</code> read-only.
196      *
197      */

198     public void makeReadOnly()
199     {
200         m_readOnly = true;
201     }
202
203     /**
204      * Checks if this <code>ServiceManager</code> is writeable.
205      *
206      * @throws IllegalStateException if this <code>ServiceManager</code> is
207      * read-only
208      */

209     protected final void checkWriteable()
210         throws IllegalStateException JavaDoc
211     {
212         if( m_readOnly )
213         {
214             final String JavaDoc message =
215                 "ServiceManager is read only and can not be modified";
216             throw new IllegalStateException JavaDoc( message );
217         }
218     }
219
220     /**
221      * Release the <code>Object</code>.
222      * @param object The <code>Object</code> to release.
223      */

224     public void release( Object JavaDoc object )
225     {
226     }
227 }
228
Popular Tags