View Javadoc

1   package org.codehaus.xfire.transport;
2   
3   import java.util.Collection;
4   import java.util.HashMap;
5   import java.util.Iterator;
6   import java.util.Map;
7   
8   import org.codehaus.xfire.AbstractXFireComponent;
9   import org.codehaus.xfire.service.Service;
10  import org.codehaus.xfire.service.ServiceRegistry;
11  import org.codehaus.xfire.service.event.RegistrationEventListener;
12  
13  /***
14   * The default <code>TransportService</code> implementation.
15   * 
16   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
17   */
18  public class DefaultTransportManager
19  	extends AbstractXFireComponent
20      implements TransportManager, RegistrationEventListener
21  {
22      Map services;
23      Map transports;
24      
25      protected DefaultTransportManager()
26      {
27          services = new HashMap();
28          transports = new HashMap();
29      }
30  
31      public DefaultTransportManager(ServiceRegistry registry)
32      {
33          services = new HashMap();
34          transports = new HashMap();
35          
36          initializeTransports(registry);
37      }
38  
39      /***
40       * @param registry
41       */
42      protected void initializeTransports(ServiceRegistry registry)
43      {
44          for (Iterator itr = registry.getServices().iterator(); itr.hasNext();)
45          {
46              Service service = (Service) itr.next();
47              enableAll(service.getName());
48          }
49          registry.addRegistrationEventListener(this);
50      }
51      
52      /***
53       * @see org.codehaus.xfire.transport.TransportManager#register(org.codehaus.xfire.transport.Transport)
54       */
55      public void register(Transport transport)
56      {
57          transports.put(transport.getName(), transport);
58          
59          for (Iterator itr = services.values().iterator(); itr.hasNext();)
60          {
61              Map serviceTransports = (Map) itr.next();
62              serviceTransports.put(transport.getName(), transport);
63          }
64      }
65  
66      public void unregister(Transport transport)
67      {
68          transports.remove(transport);
69          
70          for (Iterator itr = services.values().iterator(); itr.hasNext();)
71          {
72              Map serviceTransports = (Map) itr.next();
73              if (serviceTransports != null )
74              {
75                  serviceTransports.remove(transport);
76              }
77          }
78      }
79      
80      /***
81       * @see org.codehaus.xfire.transport.TransportManager#getTransports(java.lang.String)
82       */
83      public Transport getTransport(String name)
84      {
85          return (Transport) transports.get(name);
86      }
87  
88      /***
89       * @see org.codehaus.xfire.transport.TransportManager#enable(java.lang.String, java.lang.String)
90       */
91      public void enable(String transport, String service)
92      {
93          Map serviceTransports = (Map) services.get(service);
94          if ( serviceTransports == null )
95          {
96              serviceTransports = new HashMap();
97              services.put(service, serviceTransports);
98          }
99          
100         serviceTransports.put(transport, getTransport(transport));
101     }
102 
103     /***
104      * @see org.codehaus.xfire.transport.TransportManager#disable(java.lang.String, java.lang.String)
105      */
106     public void disable(String transport, String service)
107     {
108         Map serviceTransports = (Map) services.get(service);
109         if ( serviceTransports == null )
110         {
111            return;
112         }
113         
114         serviceTransports.remove(transport);
115     }
116 
117     /***
118      * @see org.codehaus.xfire.transport.TransportManager#getTransports(java.lang.String)
119      * @param service
120      * @return
121      */
122     public Collection getTransports(String service)
123     {
124         return ((Map) services.get(service)).values();
125     }
126 
127     /***
128      * @param service
129      */
130     public void enableAll(String service)
131     {
132         Map serviceTransports = (Map) services.get(service);
133         if (serviceTransports == null)
134         {
135             serviceTransports = new HashMap();
136             services.put(service, serviceTransports);
137         }
138         
139         for (Iterator itr = transports.values().iterator(); itr.hasNext();)
140         {
141             Transport t = (Transport) itr.next();
142 
143             serviceTransports.put(t.getName(), t);
144         }
145     }
146 
147     /***
148      * @param service
149      */
150     public void disableAll(String service)
151     {
152         Map serviceTransports = (Map) services.get(service);
153         if (serviceTransports == null)
154         {
155             return;
156         }
157         
158         for (Iterator itr = transports.values().iterator(); itr.hasNext();)
159         {
160             Transport t = (Transport) itr.next();
161 
162             serviceTransports.remove(t);
163         }
164     }
165 
166     /***
167      * @param service
168      */
169     public void onRegister(Service service)
170     {
171         enableAll(service.getName());
172     }
173 
174     /***
175      * @param service
176      */
177     public void onUnregister(Service service)
178     {
179         disableAll(service.getName());
180     }
181 
182     /***
183      * @param service
184      * @param name
185      * @return
186      */
187     public boolean isEnabled(String service, String name)
188     {
189         Map serviceTransports = (Map) services.get(service);
190         if (serviceTransports == null)
191         {
192             return false;
193         }
194         
195         if (serviceTransports.containsKey(name))
196         {
197             return true;
198         }
199         
200         return false;
201     }
202 }