/** * @param container the container into which extensions will be installed * @param extensionFilter filters extensions added to {@link CoreExtension.Context}. When it returns false, the * extension is ignored as if it had never been added to the context. * @param additionalSideFilter applied on top of filtering on {@link #supportedAnnotationType} to decide whether * extension should be added to container as an object or only as a PropertyDefinition. */ public void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter) { coreExtensionRepository.loadedCoreExtensions() .forEach(coreExtension -> install(container, extensionFilter, additionalSideFilter, coreExtension)); }
@Override public PlatformLevel start() { // ensuring the HistoryTable exists must be the first thing done when this level is started getOptional(MigrationHistoryTable.class).ifPresent(MigrationHistoryTable::start); ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel(2), noAdditionalSideFilter()); return super.start(); } }
@Override public PlatformLevel start() { ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel(3), noAdditionalSideFilter()); return super.start(); } }
@Test public void install_provides_new_Configuration_when_getBootConfiguration_is_called_and_there_is_none_in_container() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); // verify each core extension gets its own configuration assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_does_not_install_extensions_annotated_with_expected_annotation_but_filtered_out(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSideClass.class, EastSideClass.class, OtherSideClass.class, Latitude.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), t -> t != Latitude.class); assertAddedExtensions(container, WestSideClass.class); assertPropertyDefinitions(container); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_providers_to_container_and_install_extensions_they_provide_when_annotated_with_expected_annotation(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSideProvider.class, PartiallyWestSideProvider.class, EastSideProvider.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSideProvider.class, WestSideProvided.class, PartiallyWestSideProvider.class); assertPropertyDefinitions(container); }
private void addScannerExtensions() { getComponentByType(CoreExtensionsInstaller.class) .install(this, noExtensionFilter(), extension -> getScannerProjectExtensionsFilter().accept(extension)); getComponentByType(ExtensionInstaller.class) .install(this, getScannerProjectExtensionsFilter()); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_from_annotation_no_matter_annotations_even_if_filtered_out(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSidePropertyDefinition.class, EastSidePropertyDefinition.class, OtherSidePropertyDefinition.class, LatitudePropertyDefinition.class, BlankPropertyDefinition.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), t -> false); assertAddedExtensions(container, 0); assertPropertyDefinitions(container, "westKey", "eastKey", "otherKey", "latitudeKey", "blankKey"); }
@Override public PlatformLevel start() { ComponentContainer container = getContainer(); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); coreExtensionsInstaller.install(container, hasPlatformLevel4OrNone(), noAdditionalSideFilter()); ServerExtensionInstaller extensionInstaller = get(ServerExtensionInstaller.class); extensionInstaller.installExtensions(container); super.start(); return this; } }
@Test public void install_provides_runtime_from_constructor_in_context() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getRuntime) .containsOnly(sonarRuntime); }
@Test public void install_calls_load_method_on_all_loaded_CoreExtension() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); CoreExtension coreExtension3 = newCoreExtension(); CoreExtension coreExtension4 = newCoreExtension(); List<CoreExtension> coreExtensions = ImmutableList.of(coreExtension1, coreExtension2, coreExtension3, coreExtension4); InOrder inOrder = Mockito.inOrder(coreExtension1, coreExtension2, coreExtension3, coreExtension4); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(coreExtensions.stream()); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); inOrder.verify(coreExtension1).load(contextCaptor.capture()); inOrder.verify(coreExtension2).load(contextCaptor.capture()); inOrder.verify(coreExtension3).load(contextCaptor.capture()); inOrder.verify(coreExtension4).load(contextCaptor.capture()); // verify each core extension gets its own Context assertThat(contextCaptor.getAllValues()) .hasSameElementsAs(ImmutableSet.copyOf(contextCaptor.getAllValues())); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_installs_extensions_annotated_with_expected_annotation(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSideClass.class, EastSideClass.class, OtherSideClass.class, Latitude.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSideClass.class, Latitude.class); assertPropertyDefinitions(container); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_from_annotation_no_matter_annotations(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { List<Object> extensions = ImmutableList.of(WestSidePropertyDefinition.class, EastSidePropertyDefinition.class, OtherSidePropertyDefinition.class, LatitudePropertyDefinition.class, BlankPropertyDefinition.class); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, WestSidePropertyDefinition.class, LatitudePropertyDefinition.class); assertPropertyDefinitions(container, "westKey", "eastKey", "otherKey", "latitudeKey", "blankKey"); }
@Test public void install_provides_Configuration_from_container_when_getBootConfiguration_is_called() { CoreExtension coreExtension1 = newCoreExtension(); CoreExtension coreExtension2 = newCoreExtension(); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension1, coreExtension2)); Configuration configuration = new MapSettings().asConfig(); ComponentContainer container = new ComponentContainer(); container.add(configuration); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); verify(coreExtension1).load(contextCaptor.capture()); verify(coreExtension2).load(contextCaptor.capture()); assertThat(contextCaptor.getAllValues()) .extracting(CoreExtension.Context::getBootConfiguration) .containsOnly(configuration); }
@Test public void install_has_no_effect_if_CoreExtensionRepository_has_no_loaded_CoreExtension() { ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, 0); }
@Test @UseDataProvider("allMethodsToAddExtension") public void install_adds_PropertyDefinition_with_extension_name_as_default_category(BiConsumer<CoreExtension.Context, Collection<Object>> extensionAdder) { PropertyDefinition propertyDefinitionNoCategory = PropertyDefinition.builder("fooKey").build(); PropertyDefinition propertyDefinitionWithCategory = PropertyDefinition.builder("barKey").category("donut").build(); List<Object> extensions = ImmutableList.of(propertyDefinitionNoCategory, propertyDefinitionWithCategory); CoreExtension coreExtension = newCoreExtension(context -> extensionAdder.accept(context, extensions)); when(coreExtensionRepository.loadedCoreExtensions()).thenReturn(Stream.of(coreExtension)); ComponentContainer container = new ComponentContainer(); underTest.install(container, noExtensionFilter(), noAdditionalSideFilter()); assertAddedExtensions(container, 0); assertPropertyDefinitions(container, coreExtension, propertyDefinitionNoCategory, propertyDefinitionWithCategory); }
/** * @param container the container into which extensions will be installed * @param extensionFilter filters extensions added to {@link CoreExtension.Context}. When it returns false, the * extension is ignored as if it had never been added to the context. * @param additionalSideFilter applied on top of filtering on {@link #supportedAnnotationType} to decide whether * extension should be added to container as an object or only as a PropertyDefinition. */ public void install(ComponentContainer container, Predicate<Object> extensionFilter, Predicate<Object> additionalSideFilter) { coreExtensionRepository.loadedCoreExtensions() .forEach(coreExtension -> install(container, extensionFilter, additionalSideFilter, coreExtension)); }
@Override public PlatformLevel start() { ServerExtensionInstaller extensionInstaller = get(ServerExtensionInstaller.class); CoreExtensionsInstaller coreExtensionsInstaller = get(WebCoreExtensionsInstaller.class); ComponentContainer container = getContainer(); extensionInstaller.installExtensions(container); coreExtensionsInstaller.install(container, t -> true); super.start(); return this; } }
private void addScannerExtensions() { getComponentByType(CoreExtensionsInstaller.class) .install(this, noExtensionFilter(), extension -> getScannerProjectExtensionsFilter().accept(extension)); getComponentByType(ExtensionInstaller.class) .install(this, getScannerProjectExtensionsFilter()); }