@Override protected void onConfiguration(ConfigurationDeclaration config) { final StereotypeModel defaultStereotype = createStereotype(config.getName(), CONFIG); ifPresent(config.getModelProperty(ExtensionTypeDescriptorModelProperty.class) .map(ExtensionTypeDescriptorModelProperty::getType), type -> resolveStereotype(type, config, defaultStereotype), () -> config.withStereotype(defaultStereotype)); componentConfigs = populateComponentConfigsMap(config); }
@Override protected void onConfiguration(ConfigurationDeclaration declaration) { walkDeclaration(modelProperty, declaration.getAllParameters()); }
/** * Creates a map with all the configurations accepted by each of the components declared in the extension. */ private Multimap<ComponentDeclaration, ConfigurationDeclaration> populateComponentConfigsMap(ConfigurationDeclaration config) { Multimap<ComponentDeclaration, ConfigurationDeclaration> componentConfigs = LinkedListMultimap.create(); config.getConstructs().forEach(construct -> componentConfigs.put(construct, config)); config.getMessageSources().forEach(source -> componentConfigs.put(source, config)); config.getOperations().forEach(operation -> componentConfigs.put(operation, config)); return componentConfigs; }
@Override protected void onConfiguration(ConfigurationDeclaration config) { final StereotypeModel defaultStereotype = createStereotype(config.getName(), CONFIG); config.withStereotype(defaultStereotype); componentConfigs = populateComponentConfigsMap(config); }
@Test public void heisenbergPointerPlusExternalConfig() { setLoader(loaderFor(HeisenbergPointerPlusExternalConfig.class)); ExtensionDeclaration extensionDeclaration = declareExtension().getDeclaration(); assertExtensionProperties(extensionDeclaration, OTHER_HEISENBERG); assertThat(extensionDeclaration.getConfigurations().size(), equalTo(2)); ConfigurationDeclaration configuration = extensionDeclaration.getConfigurations().get(1); assertThat(configuration, is(notNullValue())); assertThat(configuration.getName(), equalTo(EXTENDED_CONFIG_NAME)); assertThat(configuration.getAllParameters(), hasSize(32)); assertParameter(configuration.getAllParameters(), "extendedProperty", "", STRING_TYPE, true, SUPPORTED, null); }
private Optional<ConfigurationDeclaration> findMatchingConfiguration(ExtensionDeclaration declaration, TypeElement element) { List<ConfigurationDeclaration> configurations = declaration.getConfigurations(); if (configurations.size() == 1) { return Optional.of(configurations.get(0)); } return configurations.stream() .filter(config -> { Configuration configurationAnnotation = element.getAnnotation(Configuration.class); String name = config.getName(); String annotationName = configurationAnnotation != null ? configurationAnnotation.name() : ""; String defaultNaming = hyphenize(element.getSimpleName().toString()); return name.equals(defaultNaming) || name.equals(annotationName) || name.equals(DEFAULT_CONFIG_NAME); }) .findAny(); } }
@Test public void flyweight() { setLoader(loaderFor(VeganExtension.class)); ExtensionDeclarer declarer = declareExtension(); final ExtensionDeclaration declaration = declarer.getDeclaration(); final ConfigurationDeclaration appleConfiguration = findDeclarationByName(declaration.getConfigurations(), APPLE); final ConfigurationDeclaration bananaConfiguration = findDeclarationByName(declaration.getConfigurations(), BANANA); final String sourceName = PaulMcCartneySource.class.getSimpleName(); SourceDeclaration appleSource = findDeclarationByName(appleConfiguration.getMessageSources(), sourceName); SourceDeclaration bananaSource = findDeclarationByName(bananaConfiguration.getMessageSources(), sourceName); assertThat(appleSource, is(sameInstance(bananaSource))); final String operationName = "spreadTheWord"; OperationDeclaration appleOperation = findDeclarationByName(appleConfiguration.getOperations(), operationName); OperationDeclaration bananaOperation = findDeclarationByName(bananaConfiguration.getOperations(), operationName); assertThat(appleOperation, is(sameInstance(bananaOperation))); }
private void assertOperation(String configName, String operationName) { ConfigurationDeclaration config = extensionDeclaration.getConfigurations().stream().filter(c -> c.getName().equals(configName)).findFirst() .orElseThrow(() -> new IllegalArgumentException("No config with name " + configName)); OperationDeclaration operation = config.getOperations().stream().filter(model -> model.getName().equals(operationName)) .findFirst().orElseThrow(() -> new IllegalArgumentException("No operation with name " + operationName)); assertThat(operation.getName(), is(operationName)); } }
@Test public void verifyConfigurationModelPropertyOnSource() { SourceDeclaration sourceDeclaration = getDeclaration(declaration.getConfigurations().get(0).getMessageSources(), LISTEN_PAYMENTS); final ConfigTypeModelProperty configTypeModelProperty = checkIsPresent(sourceDeclaration, ConfigTypeModelProperty.class); assertType(configTypeModelProperty); }
@Test public void verifyConfigurationModelPropertyOnOperation() { OperationDeclaration operationDeclaration = getDeclaration(declaration.getConfigurations().get(0).getOperations(), GET_ENEMY); final ConfigTypeModelProperty configTypeModelProperty = checkIsPresent(operationDeclaration, ConfigTypeModelProperty.class); assertType(configTypeModelProperty); }
@Test public void deprecatedConnectionProviderTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); ConfigurationDeclaration configurationDeclaration = extensionDeclaration.getConfigurations().get(1); ConnectionProviderDeclaration connectionProviderDeclaration = configurationDeclaration.getConnectionProviders().get(0); assertTrue(connectionProviderDeclaration.getDeprecation().isPresent()); assertThat(connectionProviderDeclaration.getDeprecation().get().getMessage(), is("You should use the new connection provider")); assertThat(connectionProviderDeclaration.getDeprecation().get().getDeprecatedSince(), is("1.4.0")); assertTrue(connectionProviderDeclaration.getDeprecation().get().getToRemoveIn().isPresent()); assertThat(connectionProviderDeclaration.getDeprecation().get().getToRemoveIn().get(), is("2.0.0")); }
@Test public void configWithOutRequiredForMetadataParameterDontGetsEnriched() { enrichDeclaration(configurationDeclaration, false); verify(configurationDeclaration, never()).addModelProperty(any(RequiredForMetadataModelProperty.class)); }
@Test public void deprecatedConfigurationTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); ConfigurationDeclaration configurationDeclaration = extensionDeclaration.getConfigurations().get(0); assertTrue(configurationDeclaration.getDeprecation().isPresent()); assertThat(configurationDeclaration.getDeprecation().get().getMessage(), is("This configuration is deprecated.")); assertThat(configurationDeclaration.getDeprecation().get().getDeprecatedSince(), is("1.3.0")); assertFalse(configurationDeclaration.getDeprecation().get().getToRemoveIn().isPresent()); }
configs.forEach(c -> c.addOperation(unauthorize));
private void assertTestModuleConfiguration(ExtensionDeclaration extensionDeclaration) throws Exception { assertThat(extensionDeclaration.getConfigurations(), hasSize(1)); ConfigurationDeclaration conf = extensionDeclaration.getConfigurations().get(0); assertThat(conf.getName(), equalTo(DEFAULT_CONFIG_NAME)); List<ParameterDeclaration> parameters = conf.getAllParameters(); assertThat(parameters, hasSize(31));
private ConfigurationDeclaration findConfigByName(ExtensionDeclaration declaration, String name) { return declaration.getConfigurations().stream().filter(c -> c.getName().equals(name)).findAny().get(); }
@Test public void declaresTypeResolverInformationForDynamicResolver() throws Exception { List<OperationDeclaration> operations = declaration.getConfigurations().get(0).getOperations(); assertParamResolverInfo(withoutKeysWithKeyId, "content", of(TEST_INPUT_RESOLVER_WITHOUT_KEY_RESOLVER)); List<SourceDeclaration> messageSources = declaration.getConfigurations().get(0).getMessageSources(); SourceDeclaration sourceDynamicAttributes = getDeclaration(messageSources, "MetadataSource"); assertCategoryInfo(sourceDynamicAttributes, METADATA_EXTENSION_RESOLVER);
private void assertTestModuleMessageSource(ExtensionDeclaration extensionDeclaration) throws Exception { assertThat(extensionDeclaration.getMessageSources(), hasSize(1)); SourceDeclaration source = extensionDeclaration.getMessageSources().get(0); assertThat(source.getName(), is(DEA_SOURCE_NAME)); final MetadataType outputType = source.getOutput().getType(); assertThat(outputType, is(instanceOf(ArrayType.class))); MetadataType outputMetadataType = IntrospectionUtils.getReturnType(new TypeWrapper(Object.class, TYPE_LOADER)); assertMessageType(((ArrayType) outputType).getType(), STRING_TYPE, TYPE_LOADER.load(DEAOfficerAttributes.class)); assertThat(source.getOutputAttributes().getType(), equalTo(outputMetadataType)); ConfigurationDeclaration config = extensionDeclaration.getConfigurations().get(0); assertThat(config.getMessageSources(), hasSize(3)); assertHeisenbergSource(config.getMessageSources().get(0), ASYNC_SOURCE_NAME, AsyncHeisenbergSource.class); assertHeisenbergSource(config.getMessageSources().get(1), SOURCE_NAME, HeisenbergSource.class); }
@Test public void parseMetadataAnnotationsOnParameter() { final OperationDeclaration operationDeclaration = getDeclaration(declaration.getConfigurations().get(0).getOperations(), CONTENT_METADATA_WITH_KEY_ID); final List<ParameterDeclaration> parameters = operationDeclaration.getAllParameters(); assertParameterIsMetadataKeyPart(getDeclaration(parameters, "type")); assertParameterIsMetadataContent(getDeclaration(parameters, "content")); }
@Test public void nonDeprecatedConnectionProviderTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); ConfigurationDeclaration configurationDeclaration = extensionDeclaration.getConfigurations().get(1); ConnectionProviderDeclaration connectionProviderDeclaration = configurationDeclaration.getConnectionProviders().get(1); assertFalse(connectionProviderDeclaration.getDeprecation().isPresent()); }