1 package org.objectweb.celtix.bus.transports; 2 3 import java.util.List ; 4 import java.util.Map ; 5 import java.util.concurrent.ConcurrentHashMap ; 6 7 import org.objectweb.celtix.Bus; 8 import org.objectweb.celtix.BusException; 9 import org.objectweb.celtix.configuration.types.ClassNamespaceMappingListType; 10 import org.objectweb.celtix.configuration.types.ClassNamespaceMappingType; 11 import org.objectweb.celtix.transports.TransportFactory; 12 import org.objectweb.celtix.transports.TransportFactoryManager; 13 14 public final class TransportFactoryManagerImpl implements TransportFactoryManager { 15 16 final Map <String , TransportFactory> transportFactories; 17 private final Bus bus; 18 19 public TransportFactoryManagerImpl(Bus b) throws BusException { 20 transportFactories = new ConcurrentHashMap <String , TransportFactory>(); 21 bus = b; 22 23 28 Object obj = bus.getConfiguration().getObject("transportFactories"); 29 30 List <ClassNamespaceMappingType> factoryMappings = ((ClassNamespaceMappingListType)obj).getMap(); 31 for (ClassNamespaceMappingType mapping : factoryMappings) { 32 String classname = mapping.getClassname(); 33 List <String > namespaceList = mapping.getNamespace(); 34 String [] namespaces = new String [namespaceList.size()]; 35 namespaceList.toArray(namespaces); 36 loadTransportFactory(classname, namespaces); 37 } 38 39 } 40 41 public void loadTransportFactory(String classname, String ... namespaces) throws BusException { 42 try { 43 Class <? extends TransportFactory> clazz = 44 Class.forName(classname).asSubclass(TransportFactory.class); 45 46 TransportFactory factory = clazz.newInstance(); 47 factory.init(bus); 48 for (String namespace : namespaces) { 49 registerTransportFactory(namespace, factory); 50 } 51 } catch (ClassNotFoundException e) { 52 throw new BusException(e); 53 } catch (InstantiationException e) { 54 throw new BusException(e); 55 } catch (IllegalAccessException e) { 56 throw new BusException(e); 57 } 58 } 59 60 61 65 public void registerTransportFactory(String namespace, TransportFactory factory) throws BusException { 66 transportFactories.put(namespace, factory); 67 } 68 69 72 public void deregisterTransportFactory(String namespace) 73 throws BusException { 74 transportFactories.remove(namespace); 75 } 76 77 80 public TransportFactory getTransportFactory(String namespace) throws BusException { 81 return transportFactories.get(namespace); 82 } 83 84 public void shutdown() { 85 } 87 } 88 | Popular Tags |