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 }