public static ProducerFactoryMap from( final Iterable<Class<ProducerFactory>> iterable ) { log.debug( "Loading all implementations of ProducerFactory interface..." ); final ProducerFactoryMap providers = new ProducerFactoryMap(); for ( final Class<ProducerFactory> provider : iterable ) { final Class<?> clazz = getGenericClassFrom( provider ); if ( clazz == null ) continue; log.debug( " > " + provider.getCanonicalName() + " -> " + clazz.getCanonicalName() ); providers.memorizeProviderForClazz(provider, clazz); } return providers; }
public <T> ProducerFactory<T> getProducerFor(final Class<T> serviceClazz ) { if ( producers == null ) { log.debug( "Premature invocation of this method. Ignoring!" ); return null; } return (ProducerFactory<T>)producers.get( serviceClazz, this ); }
@Override public <T> void producerFor( final Class<T> serviceClazz, final ProducerFactory<T> provider ) { producers.memorizeProviderForClazz( provider, serviceClazz ); }
private List<ProducerFactory<?>> getAll( final Class<?> clazz, DefaultCDI.DependencyInjector injector ) { List<ProducerFactory<?>> list = map.get( clazz ); if ( list == null ) synchronized ( map ) { list = map.get( clazz ); if ( list == null ) { list = loadAll( clazz, injector ); map.put( clazz, list ); } } return list; }
public ProducerFactory<?> get( final Class<?> clazz, final DefaultCDI.DependencyInjector injector ) { final List<ProducerFactory<?>> list = getAll( clazz, injector ); if ( list == null || list.isEmpty() ) return null; return list.get(0); }
protected ProducerFactoryMap loadAllProducers() { final Iterable<Class<ProducerFactory>> loadClassesImplementing = loadClassesImplementing( ProducerFactory.class ); return ProducerFactoryMap.from( loadClassesImplementing ); }