KickJava   Java API By Example, From Geeks To Geeks.

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


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.Map JavaDoc;
59
60 /**
61  * This is the default implementation of the ServiceSelector
62  *
63  * @author <a HREF="mailto:dev@avalon.apache.org">Avalon Development Team</a>
64  * @version CVS $Revision: 1.14 $ $Date: 2003/02/25 15:35:43 $
65  */

66 public class DefaultServiceSelector
67     implements ServiceSelector
68 {
69     private final HashMap JavaDoc m_objects = new HashMap JavaDoc();
70     private boolean m_readOnly;
71     private final String JavaDoc m_role;
72     
73     /**
74      * Create a DefaultServiceSelector with a default empty role.
75      */

76     public DefaultServiceSelector()
77     {
78         this("");
79     }
80     
81     /**
82      * Create a DefaultServiceSelector with a role for debug purposes.
83      *
84      * @param role The role for this selector.
85      *
86      * @throws NullPointerException if the role is null.
87      */

88     public DefaultServiceSelector(String JavaDoc role)
89     {
90         if ( null==role )
91         {
92             throw new NullPointerException JavaDoc(role);
93         }
94         
95         m_role = role;
96     }
97
98     /**
99      * Select the desired object.
100      *
101      * @param hint the hint to retrieve Object
102      * @return the Object
103      * @throws ServiceException if an error occurs
104      */

105     public Object JavaDoc select( Object JavaDoc hint )
106         throws ServiceException
107     {
108         final Object JavaDoc object = m_objects.get( hint );
109
110         if( null != object )
111         {
112             return object;
113         }
114         else
115         {
116             throw new ServiceException( m_role + "/" + hint.toString(), "Unable to provide implementation" );
117         }
118     }
119
120     /**
121      * Returns whether a Object exists or not
122      * @param hint the hint to retrieve Object
123      * @return <code>true</code> if the Object exists
124      */

125     public boolean isSelectable( final Object JavaDoc hint )
126     {
127         boolean objectExists = false;
128
129         try
130         {
131             this.release( this.select( hint ) );
132             objectExists = true;
133         }
134         catch( Throwable JavaDoc t )
135         {
136             // Ignore all throwables--we want a yes or no answer.
137
}
138
139         return objectExists;
140     }
141
142     /**
143      * Release object.
144      *
145      * @param object the <code>Object</code> to release
146      */

147     public void release( final Object JavaDoc object )
148     {
149         // if the ServiceManager handled pooling, it would be
150
// returned to the pool here.
151
}
152
153     /**
154      * Populate the ServiceSelector.
155      * @param hint the hint to be used to retrieve the Object later
156      * @param object the Object to hold
157      */

158     public void put( final Object JavaDoc hint, final Object JavaDoc object )
159     {
160         checkWriteable();
161         m_objects.put( hint, object );
162     }
163
164     /**
165      * Helper method for subclasses to retrieve object map.
166      *
167      * @return the object map
168      */

169     protected final Map JavaDoc getObjectMap()
170     {
171         return m_objects;
172     }
173
174     /**
175      * Makes this service selector read-only.
176      *
177      */

178     public void makeReadOnly()
179     {
180         m_readOnly = true;
181     }
182
183     /**
184      * Checks if this service selector is writeable.
185      *
186      * @throws IllegalStateException if this service selector is read-only
187      */

188     protected final void checkWriteable()
189         throws IllegalStateException JavaDoc
190     {
191         if( m_readOnly )
192         {
193             throw new IllegalStateException JavaDoc
194                 ( "ServiceSelector is read only and can not be modified" );
195         }
196     }
197 }
198
Popular Tags