/** * Returns all the {@link ConnectionProviderModel} instances available for the given {@code configurationModel} plus the ones * globally defined at the {@code extensionModel}. The {@link List} will first contain those defined at a * {@link ConfigurationModel#getConnectionProviders()} level and finally the ones at * {@link ExtensionModel#getConnectionProviders()} * * @param extensionModel the {@link ExtensionModel} which owns the {@code configurationModel} * @param configurationModel a {@link ConfigurationModel} * @return a {@link List}. Might be empty but will never be {@code null} */ public static List<ConnectionProviderModel> getAllConnectionProviders(ExtensionModel extensionModel, ConfigurationModel configurationModel) { return ImmutableList.<ConnectionProviderModel>builder().addAll(configurationModel.getConnectionProviders()) .addAll(extensionModel.getConnectionProviders()).build(); }
private DslElementModel.Builder<ConfigurationModel> addConnectionProvider(ConfigurationModel model, DslSyntaxResolver dsl, DslElementModel.Builder<ConfigurationModel> element, ComponentConfiguration configuration) { concat(model.getConnectionProviders().stream(), currentExtension.getConnectionProviders() .stream()) .map(provider -> { DslElementSyntax providerDsl = dsl.resolve(provider); ComponentIdentifier identifier = getIdentifier(providerDsl).orElse(null); return configuration.getNestedComponents().stream() .filter(c -> c.getIdentifier().equals(identifier)) .findFirst() .map(providerConfig -> element.containing(createElementModel(provider, providerDsl, providerConfig).build())) .orElse(null); }) .filter(Objects::nonNull) .findFirst(); return element; }
private Optional<TopLevelElement> addConnectionProviderElement(ConfigurationModel configurationModel) { ExtensionModel extensionModel = builder.getExtensionModel(); if (!extensionModel.getConnectionProviders().isEmpty() || !configurationModel.getConnectionProviders().isEmpty()) { TopLevelElement objectElement = new TopLevelElement(); boolean hasImplicitConnection = getFirstImplicit(extensionModel.getConnectionProviders()) != null || getFirstImplicit(configurationModel.getConnectionProviders()) != null; objectElement.setMinOccurs(hasImplicitConnection ? ZERO : ONE); objectElement.setMaxOccurs(MAX_ONE); objectElement.setRef(MULE_CONNECTION_PROVIDER_ELEMENT); return Optional.of(objectElement); } return empty(); } }
@Test public void globalConnectedOperationWithGlobalConnectionProvider() { when(operationModel.requiresConnection()).thenReturn(true); when(extensionModel.getConnectionProviders()).thenReturn(singletonList(mock(ConnectionProviderModel.class))); validate(); }
@Test public void noConnectionProviders() { when(extensionModel.getConnectionProviders()).thenReturn(emptyList()); validate(extensionModel, validator); } }
@Test public void configLevelOperationWithGlobalConnectionProvider() { when(operationModel.requiresConnection()).thenReturn(true); when(extensionModel.getOperationModels()).thenReturn(emptyList()); when(configurationModel.getOperationModels()).thenReturn(singletonList(operationModel)); when(extensionModel.getConnectionProviders()).thenReturn(singletonList(mock(ConnectionProviderModel.class))); 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 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()); }); }
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; }
@Test public void valid() { List<ConnectionProviderModel> mockModels = mockConnectionProviders(DEFAULT_CONNECTION_PROVIDER_NAME, CUSTOM_NAME); when(extensionModel.getConnectionProviders()).thenReturn(mockModels); validate(extensionModel, validator); }
@Before public void doSetup() { when(extensionModel.getOperationModels()).thenReturn(asList(operationModel)); when(extensionModel.getConfigurationModels()).thenReturn(emptyList()); when(extensionModel.getConstructModels()).thenReturn(emptyList()); when(extensionModel.getFunctionModels()).thenReturn(emptyList()); when(extensionModel.getConnectionProviders()).thenReturn(emptyList()); when(extensionModel.getSourceModels()).thenReturn(emptyList()); when(extensionModel.getDeprecationModel()).thenReturn(empty()); when(extensionModel.getName()).thenReturn("extensionName"); when(operationModel.getParameterGroupModels()).thenReturn(asList(parameterGroupModel)); when(operationModel.getDeprecationModel()).thenReturn(empty()); when(operationModel.getName()).thenReturn("extensionOperation"); when(parameterGroupModel.getParameterModels()).thenReturn(asList(parameterModel)); when(parameterModel.isDeprecated()).thenReturn(false); when(parameterModel.getDeprecationModel()).thenReturn(empty()); when(parameterModel.getName()).thenReturn("parameterName"); when(extensionModel.getModelProperty(CompileTimeModelProperty.class)).thenReturn(ofNullable(new CompileTimeModelProperty())); }
@Test public void invalid() { List<ConnectionProviderModel> mockModels = mockConnectionProviders(DEFAULT_CONNECTION_PROVIDER_NAME, DEFAULT_CONNECTION_PROVIDER_NAME, CUSTOM_NAME, CUSTOM_NAME, "bleh"); when(extensionModel.getConnectionProviders()).thenReturn(mockModels); expectedException.expect(IllegalModelDefinitionException.class); expectedException.expectMessage(containsString("4")); validate(extensionModel, validator); }
@Test public void assertDeclaration() { assertThat(extensionModel.getName(), is(EXTENSION_NAME)); assertThat(extensionModel.getDescription(), is(EXTENSION_DESCRIPTION)); assertThat(extensionModel.getVersion(), is(VERSION)); assertThat(extensionModel.getConfigurationModels(), hasSize(2)); assertThat(extensionModel.getVendor(), is(VENDOR)); assertThat(extensionModel.getOperationModels(), hasSize(1)); assertThat(extensionModel.getConnectionProviders(), is(empty())); assertThat(extensionModel.getSourceModels(), is(empty())); }
when(extensionModel.getConfigurationModels()).thenReturn(singletonList(configurationModel)); when(extensionModel.getOperationModels()).thenReturn(singletonList(operationModel)); when(extensionModel.getConnectionProviders()).thenReturn(singletonList(connectionProviderModel)); when(extensionModel.getSourceModels()).thenReturn(singletonList(sourceModel)); when(extensionModel.getConstructModels()).thenReturn(singletonList(constructModel));
assertThat(coreExtensionModel.getOperationModels(), hasSize(8)); assertThat(coreExtensionModel.getConstructModels(), hasSize(15)); assertThat(coreExtensionModel.getConnectionProviders(), empty()); assertThat(coreExtensionModel.getSourceModels(), hasSize(1));
/** * Returns all the {@link ConnectionProviderModel} instances available for the given {@code configurationModel} plus the ones * globally defined at the {@code extensionModel}. The {@link List} will first contain those defined at a * {@link ConfigurationModel#getConnectionProviders()} level and finally the ones at * {@link ExtensionModel#getConnectionProviders()} * * @param extensionModel the {@link ExtensionModel} which owns the {@code configurationModel} * @param configurationModel a {@link ConfigurationModel} * @return a {@link List}. Might be empty but will never be {@code null} */ public static List<ConnectionProviderModel> getAllConnectionProviders(ExtensionModel extensionModel, ConfigurationModel configurationModel) { return ImmutableList.<ConnectionProviderModel>builder().addAll(configurationModel.getConnectionProviders()) .addAll(extensionModel.getConnectionProviders()).build(); }
private DslElementModel.Builder<ConfigurationModel> addConnectionProvider(ConfigurationModel model, DslSyntaxResolver dsl, DslElementModel.Builder<ConfigurationModel> element, ComponentConfiguration configuration) { concat(model.getConnectionProviders().stream(), currentExtension.getConnectionProviders() .stream()) .map(provider -> { DslElementSyntax providerDsl = dsl.resolve(provider); ComponentIdentifier identifier = getIdentifier(providerDsl).orElse(null); return configuration.getNestedComponents().stream() .filter(c -> c.getIdentifier().equals(identifier)) .findFirst() .map(providerConfig -> element.containing(createElementModel(provider, providerDsl, providerConfig).build())) .orElse(null); }) .filter(Objects::nonNull) .findFirst(); return element; }
private Optional<TopLevelElement> addConnectionProviderElement(ConfigurationModel configurationModel) { ExtensionModel extensionModel = builder.getExtensionModel(); if (!extensionModel.getConnectionProviders().isEmpty() || !configurationModel.getConnectionProviders().isEmpty()) { TopLevelElement objectElement = new TopLevelElement(); boolean hasImplicitConnection = getFirstImplicit(extensionModel.getConnectionProviders()) != null || getFirstImplicit(configurationModel.getConnectionProviders()) != null; objectElement.setMinOccurs(hasImplicitConnection ? ZERO : ONE); objectElement.setMaxOccurs(MAX_ONE); objectElement.setRef(MULE_CONNECTION_PROVIDER_ELEMENT); return Optional.of(objectElement); } return empty(); } }
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()); }); }
@Override public void write(JsonWriter out, ExtensionModel model) throws IOException { out.beginObject(); out.name(NAME).value(model.getName()); out.name(DESCRIPTION).value(model.getDescription()); out.name(VERSION).value(model.getVersion()); out.name(VENDOR).value(model.getVendor()); writeWithDelegate(model.getCategory(), CATEGORY, out, new TypeToken<Category>() {}); writeWithDelegate(model.getXmlDslModel(), XML_DSL, out, new TypeToken<XmlDslModel>() {}); writeWithDelegate(model.getResources(), RESOURCES, out, new TypeToken<Set<String>>() {}); writeWithDelegate(model.getSubTypes(), SUB_TYPES, out, new TypeToken<Set<SubTypesModel>>() {}); writeWithDelegate(model.getPrivilegedPackages(), PRIVILEGED_PACKAGES, out, new TypeToken<Set<String>>() {}); writeWithDelegate(model.getPrivilegedArtifacts(), PRIVILEGED_ARTIFACTS, out, new TypeToken<Set<String>>() {}); writeWithDelegate(model.getExternalLibraryModels(), EXTERNAL_LIBRARIES, out, new TypeToken<Set<ExternalLibraryModel>>() {}); writeImportedTypes(out, model.getImportedTypes()); writeWithDelegate(model.getDisplayModel().orElse(null), DISPLAY_MODEL, out, new TypeToken<DisplayModel>() {}); writeWithDelegate(model.getConfigurationModels(), CONFIGURATIONS, out, new TypeToken<List<ConfigurationModel>>() {}); writeWithDelegate(model.getOperationModels(), OPERATIONS, out, new TypeToken<List<OperationModel>>() {}); writeWithDelegate(model.getFunctionModels(), FUNCTIONS, out, new TypeToken<List<FunctionModel>>() {}); writeWithDelegate(model.getConstructModels(), CONSTRUCTS, out, new TypeToken<List<ConstructModel>>() {}); writeWithDelegate(model.getConnectionProviders(), CONNECTION_PROVIDERS, out, new TypeToken<List<ConnectionProviderModel>>() {}); writeWithDelegate(model.getSourceModels(), MESSAGE_SOURCES, out, new TypeToken<List<SourceModel>>() {}); notificationModelDelegate.writeNotifications(model.getNotificationModels(), out); errorModelDelegate.writeErrors(model.getErrorModels(), out); writeExtensionLevelModelProperties(out, model); writeTypes(TYPES, out, model.getTypes()); out.endObject(); }