AbstractKernelExtensions( KernelContext kernelContext, Iterable<KernelExtensionFactory<?>> kernelExtensionFactories, Dependencies dependencies, KernelExtensionFailureStrategy kernelExtensionFailureStrategy, ExtensionType extensionType ) { this.kernelContext = kernelContext; this.kernelExtensionFailureStrategy = kernelExtensionFailureStrategy; this.kernelExtensionFactories = stream( kernelExtensionFactories ).filter( e -> e.getExtensionType() == extensionType ).collect( toList() ); this.dependencies = dependencies; }
@Override public String toString() { return "KernelExtension:" + getClass().getSimpleName() + getKeys(); }
@SuppressWarnings( "unchecked" ) private static <T> Lifecycle newInstance( KernelContext kernelContext, KernelExtensionFactory<T> factory, Object dependencies ) { return factory.newInstance( kernelContext, (T)dependencies ); } }
@Override public void init() { for ( KernelExtensionFactory<?> kernelExtensionFactory : kernelExtensionFactories ) { try { Object kernelExtensionDependencies = getKernelExtensionDependencies( kernelExtensionFactory ); Lifecycle dependency = newInstance( kernelContext, kernelExtensionFactory, kernelExtensionDependencies ); Objects.requireNonNull( dependency, kernelExtensionFactory.toString() + " returned a null KernelExtension" ); life.add( dependencies.satisfyDependency( dependency ) ); } catch ( UnsatisfiedDependencyException exception ) { kernelExtensionFailureStrategy.handle( kernelExtensionFactory, exception ); } catch ( Throwable throwable ) { kernelExtensionFailureStrategy.handle( kernelExtensionFactory, throwable ); } } life.init(); }
@Test public void differentInstancesShouldHaveEqualHashCodesAndBeEqual() { KernelExtensionFactory<?> one = newInstance(); KernelExtensionFactory<?> two = newInstance(); assertEquals( "new instances have different hash codes", one.hashCode(), two.hashCode() ); assertEquals( "new instances are not equals", one, two ); one = loadInstance(); two = loadInstance(); assertEquals( "loaded instances have different hash codes", one.hashCode(), two.hashCode() ); assertEquals( "loaded instances are not equals", one, two ); one = loadInstance(); two = newInstance(); assertEquals( "loaded instance and new instance have different hash codes", one.hashCode(), two.hashCode() ); assertEquals( "loaded instance and new instance are not equals", one, two ); }
@Override public void init() { for ( KernelExtensionFactory<?> kernelExtensionFactory : kernelExtensionFactories ) { try { Object kernelExtensionDependencies = getKernelExtensionDependencies( kernelExtensionFactory ); Lifecycle dependency = newInstance( kernelContext, kernelExtensionFactory, kernelExtensionDependencies ); Objects.requireNonNull( dependency, kernelExtensionFactory.toString() + " returned a null KernelExtension" ); life.add( dependencies.satisfyDependency( dependency ) ); } catch ( UnsatisfiedDependencyException exception ) { kernelExtensionFailureStrategy.handle( kernelExtensionFactory, exception ); } catch ( Throwable throwable ) { kernelExtensionFailureStrategy.handle( kernelExtensionFactory, throwable ); } } life.init(); }
@Override public String toString() { return "KernelExtension:" + getClass().getSimpleName() + getKeys(); }
@SuppressWarnings( "unchecked" ) private static <T> Lifecycle newInstance( KernelContext kernelContext, KernelExtensionFactory<T> factory, Object dependencies ) { return factory.newInstance( kernelContext, (T)dependencies ); } }
AbstractKernelExtensions( KernelContext kernelContext, Iterable<KernelExtensionFactory<?>> kernelExtensionFactories, Dependencies dependencies, KernelExtensionFailureStrategy kernelExtensionFailureStrategy, ExtensionType extensionType ) { this.kernelContext = kernelContext; this.kernelExtensionFailureStrategy = kernelExtensionFailureStrategy; this.kernelExtensionFactories = stream( kernelExtensionFactories ).filter( e -> e.getExtensionType() == extensionType ).collect( toList() ); this.dependencies = dependencies; }