/** * @return a {@link SoapServiceProvider} implementation {@link Class} for a given {@link ConnectionProviderModel}. */ private static Class<SoapServiceProvider> getServiceProviderType(ConnectionProviderModel model) { return model.getModelProperty(ImplementingTypeModelProperty.class) .map(prop -> (Class<SoapServiceProvider>) prop.getType()) .orElseThrow(() -> new IllegalStateException(format("No %s was defined in connection provider [%s]", ImplementingTypeModelProperty.class.getSimpleName(), model.getName()))); }
/** * Tests the given {@code connectionProviderModel} for a {@link ConnectionProviderFactoryModelProperty} and if present it * returns the enclosed {@link ConnectionProviderFactory}. If no such property is found, then a * {@link IllegalConnectionProviderModelDefinitionException} is thrown * * @param connectionProviderModel a {@link ConnectionProviderModel} * @return a {@link SourceFactory} * @throws IllegalConnectionProviderModelDefinitionException if the connection provider is not properly enriched */ public static ConnectionProviderFactory getConnectionProviderFactory(ConnectionProviderModel connectionProviderModel) { return fromModelProperty(connectionProviderModel, ConnectionProviderFactoryModelProperty.class, ConnectionProviderFactoryModelProperty::getConnectionProviderFactory, () -> new IllegalConnectionProviderModelDefinitionException( format("Connection Provider '%s' does not provide a %s", connectionProviderModel.getName(), ConnectionProviderFactory.class .getSimpleName()))); }
/** * Tests the given {@code connectionProviderModel} for a {@link ConnectionTypeModelProperty} and if present it returns the * enclosed connection type. If no such property is found, then a {@link IllegalConnectionProviderModelDefinitionException} is * thrown * * @param connectionProviderModel a {@link ConnectionProviderModel} * @return a connection {@link Class} * @throws IllegalConnectionProviderModelDefinitionException if the connection provider is not properly enriched */ public static Type getConnectionType(ConnectionProviderModel connectionProviderModel) { return fromModelProperty(connectionProviderModel, ConnectionTypeModelProperty.class, ConnectionTypeModelProperty::getConnectionTypeElement, () -> new IllegalConnectionProviderModelDefinitionException( format("Connection Provider '%s' does not specify a connection type", connectionProviderModel .getName()))); }
private List<ConnectionProviderModel> mockConnectionProviders(String... names) { return Stream.of(names).map(name -> { ConnectionProviderModel mock = mock(ConnectionProviderModel.class, Mockito.RETURNS_DEEP_STUBS); when(mock.getName()).thenReturn(name); return mock; }).collect(toList()); }
@Test public void connectionProviderNameWithOperationParameterNoChild() { when(connectionProviderModel.getName()).thenReturn(SIMPLE_PARAM_NAME); ParameterModel offending = getParameter(connectionProviderModel.getName(), NoChildTest.class); when(operationModel.getAllParameterModels()).thenReturn(asList(topLevelOperationParam, offending)); validate(); }
@Test public void connectionProviderNameClashesWithAnotherConnectionProviderName() { exception.expect(IllegalModelDefinitionException.class); ConnectionProviderModel anotherConnectionProviderModel = mock(ConnectionProviderModel.class); when(anotherConnectionProviderModel.getName()).thenReturn(CONNECTION_PROVIDER_NAME); when(extensionModel.getConnectionProviders()).thenReturn(asList(connectionProviderModel, anotherConnectionProviderModel)); validate(); }
private boolean declareAsConnectionProvider(ExtensionModel ownerExtension, ConfigurationModel model, ConfigurationElementDeclarer configurationDeclarer, ConfigLine config, ElementDeclarer extensionElementsDeclarer) { final DslSyntaxResolver dsl = resolvers.get(getNamespace(config)); Optional<ConnectionProviderModel> connectionProvider = model.getConnectionProviders().stream() .filter(cp -> dsl.resolve(cp).getElementName().equals(config.getIdentifier())) .findFirst(); if (!connectionProvider.isPresent()) { connectionProvider = ownerExtension.getConnectionProviders().stream() .filter(cp -> dsl.resolve(cp).getElementName().equals(config.getIdentifier())) .findFirst(); } if (!connectionProvider.isPresent()) { return true; } ConnectionProviderModel providerModel = connectionProvider.get(); ConnectionElementDeclarer connectionDeclarer = extensionElementsDeclarer.newConnection(providerModel.getName()); declareParameterizedComponent(providerModel, dsl.resolve(providerModel), connectionDeclarer, config.getConfigAttributes(), config.getChildren()); configurationDeclarer.withConnection(connectionDeclarer.getDeclaration()); return false; }
private void validateConnectionTypes(ConnectionProviderModel providerModel, ComponentModel componentModel, Type providerConnectionType, ProblemsReporter problemsReporter) { getConnectionType(componentModel).ifPresent(connectionType -> { if (!connectionType.isAssignableFrom(providerConnectionType)) { problemsReporter .addError(new Problem(providerModel, format("Component '%s' requires a connection of type '%s'. However, it also defines connection provider " + "'%s' which yields connections of incompatible type '%s'", componentModel.getName(), connectionType.getName(), providerModel.getName(), providerConnectionType.getName()))); } }); } }
private void addConnectionProvider(ConnectionElementDeclaration connection, ConfigurationModel model, InternalComponentConfiguration.Builder configuration, DslElementModel.Builder<ConfigurationModel> configElement) { concat(model.getConnectionProviders().stream(), currentExtension.getConnectionProviders() .stream()) .filter(c -> c.getName().equals(connection.getName())) .findFirst() .ifPresent(provider -> { DslElementSyntax providerDsl = dsl.resolve(provider); InternalComponentConfiguration.Builder builder = InternalComponentConfiguration.builder() .withIdentifier(asIdentifier(providerDsl)); DslElementModel.Builder<ConnectionProviderModel> element = createParameterizedElementModel(provider, providerDsl, connection, builder); ComponentConfiguration providerConfig = builder.build(); configuration.withNestedComponent(providerConfig); configElement.containing(element.withConfig(providerConfig).build()); }); }
@Test public void mapSingularizeClashOnConnectionProvider() { exception.expect(IllegalModelDefinitionException.class); String clashingName = CHILD_PLURAL_PARAM_NAME + CONNECTION_PROVIDER_SUFFIX; when(connectionProviderModel.getName()).thenReturn(clashingName); ParameterModel offending = getParameter(clashingName, childTestMap); when(operationModel.getAllParameterModels()).thenReturn(asList(offending)); validate(); }
@Test public void connectionProviderNameClashesWithOperationParameterType() { exception.expect(IllegalModelDefinitionException.class); String clashingName = SIMPLE_PARAM_NAME + CONNECTION_PROVIDER_SUFFIX; when(connectionProviderModel.getName()).thenReturn(clashingName); ParameterModel offending = getParameter(clashingName, TopLevelTest.class); when(operationModel.getAllParameterModels()).thenReturn(asList(topLevelOperationParam, offending)); validate(); }
@Test public void listSingularizeClashOnConnectionProvider() { String clashingName = CHILD_PLURAL_PARAM_NAME + CONNECTION_PROVIDER_SUFFIX; exception.expect(IllegalModelDefinitionException.class); when(connectionProviderModel.getName()).thenReturn(clashingName); ParameterModel offending = getParameter(clashingName, childTestList); when(operationModel.getAllParameterModels()).thenReturn(asList(offending)); validate(); }
@Test public void connectionProvider() { ConnectionProviderModel provider = extensionModel.getConfigurationModel(REQUESTER_CONFIG_NAME).get().getConnectionProviders().get(0); assertThat(provider.getName(), is(REQUESTER_PROVIDER)); } }
@Test public void connectionProviderNameClashesWithOperationParameterName() { String clashingName = SIMPLE_PARAM_NAME + CONNECTION_PROVIDER_SUFFIX; exception.expect(IllegalModelDefinitionException.class); exception.expectMessage(format( "Extension '%s' has a connection provider named '%s' and an operation named operation with an argument type named equally.", extensionModel.getName(), hyphenize(clashingName))); ParameterModel offending = getParameter(clashingName, ChildTest.class); when(connectionProviderModel.getName()).thenReturn(clashingName); when(operationModel.getAllParameterModels()).thenReturn(asList(topLevelOperationParam, offending)); validate(); }
mockModelProperties(constructModel); mockModelProperties(connectionProviderModel); when(connectionProviderModel.getName()).thenReturn(CONNECTION_PROVIDER_NAME); when(connectionProviderModel.getAllParameterModels()) .thenReturn(asList(simpleConnectionProviderParam, topLevelConnectionProviderParam));
/** * Tests the given {@code connectionProviderModel} for a {@link ConnectionProviderFactoryModelProperty} and if present it * returns the enclosed {@link ConnectionProviderFactory}. If no such property is found, then a * {@link IllegalConnectionProviderModelDefinitionException} is thrown * * @param connectionProviderModel a {@link ConnectionProviderModel} * @return a {@link SourceFactory} * @throws IllegalConnectionProviderModelDefinitionException if the connection provider is not properly enriched */ public static ConnectionProviderFactory getConnectionProviderFactory(ConnectionProviderModel connectionProviderModel) { return fromModelProperty(connectionProviderModel, ConnectionProviderFactoryModelProperty.class, ConnectionProviderFactoryModelProperty::getConnectionProviderFactory, () -> new IllegalConnectionProviderModelDefinitionException( format("Connection Provider '%s' does not provide a %s", connectionProviderModel.getName(), ConnectionProviderFactory.class .getSimpleName()))); }
/** * Tests the given {@code connectionProviderModel} for a {@link ConnectionTypeModelProperty} and if present it returns the * enclosed connection type. If no such property is found, then a {@link IllegalConnectionProviderModelDefinitionException} is * thrown * * @param connectionProviderModel a {@link ConnectionProviderModel} * @return a connection {@link Class} * @throws IllegalConnectionProviderModelDefinitionException if the connection provider is not properly enriched */ public static Type getConnectionType(ConnectionProviderModel connectionProviderModel) { return fromModelProperty(connectionProviderModel, ConnectionTypeModelProperty.class, ConnectionTypeModelProperty::getConnectionTypeElement, () -> new IllegalConnectionProviderModelDefinitionException( format("Connection Provider '%s' does not specify a connection type", connectionProviderModel .getName()))); }
private void validateConnectionTypes(ConnectionProviderModel providerModel, ComponentModel componentModel, Type providerConnectionType, ProblemsReporter problemsReporter) { getConnectionType(componentModel).ifPresent(connectionType -> { if (!connectionType.isAssignableFrom(providerConnectionType)) { problemsReporter .addError(new Problem(providerModel, format("Component '%s' requires a connection of type '%s'. However, it also defines connection provider " + "'%s' which yields connections of incompatible type '%s'", componentModel.getName(), connectionType.getName(), providerModel.getName(), providerConnectionType.getName()))); } }); } }
private boolean declareAsConnectionProvider(ExtensionModel ownerExtension, ConfigurationModel model, ConfigurationElementDeclarer configurationDeclarer, ConfigLine config, ElementDeclarer extensionElementsDeclarer) { final DslSyntaxResolver dsl = resolvers.get(getNamespace(config)); Optional<ConnectionProviderModel> connectionProvider = model.getConnectionProviders().stream() .filter(cp -> dsl.resolve(cp).getElementName().equals(config.getIdentifier())) .findFirst(); if (!connectionProvider.isPresent()) { connectionProvider = ownerExtension.getConnectionProviders().stream() .filter(cp -> dsl.resolve(cp).getElementName().equals(config.getIdentifier())) .findFirst(); } if (!connectionProvider.isPresent()) { return true; } ConnectionProviderModel providerModel = connectionProvider.get(); ConnectionElementDeclarer connectionDeclarer = extensionElementsDeclarer.newConnection(providerModel.getName()); declareParameterizedComponent(providerModel, dsl.resolve(providerModel), connectionDeclarer, config.getConfigAttributes(), config.getChildren()); configurationDeclarer.withConnection(connectionDeclarer.getDeclaration()); return false; }
private void addConnectionProvider(ConnectionElementDeclaration connection, ConfigurationModel model, InternalComponentConfiguration.Builder configuration, DslElementModel.Builder<ConfigurationModel> configElement) { concat(model.getConnectionProviders().stream(), currentExtension.getConnectionProviders() .stream()) .filter(c -> c.getName().equals(connection.getName())) .findFirst() .ifPresent(provider -> { DslElementSyntax providerDsl = dsl.resolve(provider); InternalComponentConfiguration.Builder builder = InternalComponentConfiguration.builder() .withIdentifier(asIdentifier(providerDsl)); DslElementModel.Builder<ConnectionProviderModel> element = createParameterizedElementModel(provider, providerDsl, connection, builder); ComponentConfiguration providerConfig = builder.build(); configuration.withNestedComponent(providerConfig); configElement.containing(element.withConfig(providerConfig).build()); }); }