1 19 20 package org.jacorb.notification.container; 21 22 import org.apache.avalon.framework.configuration.Configuration; 23 import org.apache.avalon.framework.logger.Logger; 24 import org.jacorb.notification.IContainer; 25 import org.jacorb.notification.conf.Attributes; 26 import org.jacorb.notification.conf.Default; 27 import org.jacorb.notification.filter.FilterFactoryImpl; 28 import org.jacorb.notification.filter.DefaultFilterFactoryDelegate; 29 import org.jacorb.notification.util.LogUtil; 30 import org.jacorb.notification.util.PatternWrapper; 31 import org.omg.CORBA.ORB ; 32 import org.omg.CosNotifyFilter.FilterFactory; 33 import org.omg.CosNotifyFilter.FilterFactoryHelper; 34 import org.picocontainer.MutablePicoContainer; 35 import org.picocontainer.PicoContainer; 36 import org.picocontainer.defaults.AbstractComponentAdapter; 37 38 class FilterFactoryComponentAdapter extends AbstractComponentAdapter 39 { 40 private static final long serialVersionUID = 1L; 41 42 private final Logger logger_ = LogUtil.getLogger(getClass().getName()); 43 44 public FilterFactoryComponentAdapter() 45 { 46 super(FilterFactory.class, FilterFactory.class); 47 } 48 49 public void verify(PicoContainer container) 50 { 51 } 53 54 public Object getComponentInstance(PicoContainer container) 55 { 56 if (!Default.DEFAULT_FILTER_FACTORY.equals(getFilterFactoryLocation(container))) 57 { 58 try 59 { 60 return lookupFilterFactory(container); 61 } catch (Exception e) 62 { 63 logger_ 64 .info( 65 "Could not resolve FilterFactory. Will fall back to builtin FilterFactory.", 66 e); 67 } 68 } 69 70 return newFilterFactory(container); 71 } 72 73 private FilterFactory newFilterFactory(PicoContainer container) 74 { 75 PatternWrapper.class.getName(); 80 81 final MutablePicoContainer _parent = (MutablePicoContainer) container; 82 83 final MutablePicoContainer _container = _parent.makeChildContainer(); 84 85 _container.registerComponentImplementation(DefaultFilterFactoryDelegate.class); 86 87 _container.registerComponentImplementation(FilterFactoryImpl.class); 88 89 _container.registerComponentInstance(IContainer.class, new IContainer() 90 { 91 public MutablePicoContainer getContainer() 92 { 93 return _container; 94 } 95 96 public void destroy() 97 { 98 _parent.removeChildContainer(_container); 99 } 100 }); 101 102 FilterFactoryImpl servant = (FilterFactoryImpl) _container 103 .getComponentInstanceOfType(FilterFactoryImpl.class); 104 105 return FilterFactoryHelper.narrow(servant.activate()); 106 } 107 108 private FilterFactory lookupFilterFactory(PicoContainer container) 109 { 110 String _filterFactoryConf = getFilterFactoryLocation(container); 111 112 ORB orb = (ORB ) container.getComponentInstance(ORB .class); 113 114 return FilterFactoryHelper.narrow(orb.string_to_object(_filterFactoryConf)); 115 } 116 117 private String getFilterFactoryLocation(PicoContainer container) 118 { 119 Configuration config = (Configuration) container.getComponentInstance(Configuration.class); 120 121 String _location = config.getAttribute(Attributes.FILTER_FACTORY, 122 Default.DEFAULT_FILTER_FACTORY); 123 124 return _location; 125 } 126 } | Popular Tags |