1 package org.codehaus.xfire.service;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Collections;
6 import java.util.HashMap;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.Map;
10
11 import org.codehaus.xfire.service.event.RegistrationEvent;
12 import org.codehaus.xfire.service.event.RegistrationEventListener;
13
14 /***
15 * @author <a href="mailto:poutsma@mac.com">Arjen Poutsma</a>
16 */
17 public class DefaultServiceRegistry
18 implements ServiceRegistry
19 {
20
21 private Map services = new HashMap();
22 private List eventListeners = new ArrayList();
23
24 /***
25 * Returns the <code>ServiceEndpoint</code> with the given qualified name, if found. Returns <code>null</code> if
26 * not found.
27 *
28 * @param name the service name.
29 * @return the service endpoint, or <code>null</code> if not found.
30 */
31 public Service getService(String name)
32 {
33 return (Service) services.get(name);
34 }
35
36 /***
37 * Registers a given <code>ServiceEndpoint</code> with this registry.
38 *
39 * @param endpoint the endpoint.
40 */
41 public void register(Service endpoint)
42 {
43 services.put(endpoint.getName(), endpoint);
44
45 for (Iterator iterator = eventListeners.iterator(); iterator.hasNext();)
46 {
47 RegistrationEventListener listener = (RegistrationEventListener) iterator.next();
48 RegistrationEvent event = new RegistrationEvent(this, endpoint);
49 listener.endpointRegistered(event);
50 }
51 }
52
53 /***
54 * Unregisters the service with the given qualified name, if found.
55 *
56 * @param name the service name.
57 */
58 public void unregister(String name)
59 {
60 Service endpoint = getService(name);
61
62 for (Iterator iterator = eventListeners.iterator(); iterator.hasNext();)
63 {
64 RegistrationEventListener listener = (RegistrationEventListener) iterator.next();
65 RegistrationEvent event = new RegistrationEvent(this, endpoint);
66 listener.endpointUnregistered(event);
67 }
68
69 services.remove(name);
70 }
71
72 /***
73 * Indicates whether this registry has a service with the given name.
74 *
75 * @param name the service name.
76 * @return <code>true</code> if this registry has a service with the given name; <code>false</code> otherwise.
77 */
78 public boolean hasService(String name)
79 {
80 return services.containsKey(name);
81 }
82
83 /***
84 * Returns all <code>ServiceEndpoint</code> registered to this registry.
85 *
86 * @return all service endpoints.
87 */
88 public Collection getServices()
89 {
90 return Collections.unmodifiableCollection(services.values());
91 }
92
93 /***
94 * Add a listener for registration events.
95 *
96 * @param listener the listener.
97 */
98 public void addRegistrationEventListener(RegistrationEventListener listener)
99 {
100 eventListeners.add(listener);
101 }
102
103 /***
104 * Remove a listener for registration events.
105 *
106 * @param listener the listener.
107 */
108 public void removeRegistrationEventListener(RegistrationEventListener listener)
109 {
110 eventListeners.remove(listener);
111 }
112 }