/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.extension.internal.runtime.config; import static org.mule.runtime.api.meta.model.connection.ConnectionManagementType.POOLING; import static org.mule.runtime.module.extension.internal.util.MuleExtensionUtils.injectConfigName; import org.mule.runtime.api.config.PoolingProfile; import org.mule.runtime.api.connection.ConnectionProvider; import org.mule.runtime.api.exception.MuleException; import org.mule.runtime.api.meta.model.ExtensionModel; import org.mule.runtime.api.meta.model.connection.ConnectionManagementType; import org.mule.runtime.api.meta.model.connection.ConnectionProviderModel; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.core.api.retry.RetryPolicyTemplate; import org.mule.runtime.core.internal.connection.ConnectionManagerAdapter; import org.mule.runtime.core.internal.connection.ErrorTypeHandlerConnectionProviderWrapper; import org.mule.runtime.core.internal.connection.PoolingConnectionProviderWrapper; import org.mule.runtime.core.internal.connection.ReconnectableConnectionProviderWrapper; import org.mule.runtime.module.extension.internal.runtime.objectbuilder.ResolverSetBasedObjectBuilder; import org.mule.runtime.module.extension.internal.runtime.resolver.ResolverSet; import org.mule.runtime.module.extension.internal.runtime.resolver.ResolverSetResult; /** * Implementation of {@link ResolverSetBasedObjectBuilder} which produces instances of {@link ConnectionProviderModel} * * @since 4.0 */ public class DefaultConnectionProviderObjectBuilder<C> extends ConnectionProviderObjectBuilder<C> { DefaultConnectionProviderObjectBuilder(ConnectionProviderModel providerModel, ResolverSet resolverSet, ConnectionManagerAdapter connectionManager, ExtensionModel extensionModel, MuleContext muleContext) { super(providerModel, resolverSet, connectionManager, extensionModel, muleContext); } public DefaultConnectionProviderObjectBuilder(ConnectionProviderModel providerModel, ResolverSet resolverSet, PoolingProfile poolingProfile, boolean disableValidation, RetryPolicyTemplate retryPolicyTemplate, ConnectionManagerAdapter connectionManager, ExtensionModel extensionModel, MuleContext muleContext) { super(providerModel, resolverSet, poolingProfile, disableValidation, retryPolicyTemplate, connectionManager, extensionModel, muleContext); } @Override public final ConnectionProvider<C> build(ResolverSetResult result) throws MuleException { ConnectionProvider<C> provider = doBuild(result); provider = applyConnectionManagement(provider); provider = applyErrorHandling(provider); return provider; } protected ConnectionProvider<C> doBuild(ResolverSetResult result) throws MuleException { ConnectionProvider<C> provider = super.build(result); injectConfigName(providerModel, provider, ownerConfigName); return provider; } private ConnectionProvider<C> applyErrorHandling(ConnectionProvider<C> provider) { provider = new ErrorTypeHandlerConnectionProviderWrapper<>(provider, muleContext, extensionModel, retryPolicyTemplate); return provider; } private ConnectionProvider<C> applyConnectionManagement(ConnectionProvider<C> provider) { final ConnectionManagementType connectionManagementType = providerModel.getConnectionManagementType(); if (connectionManagementType == POOLING) { provider = new PoolingConnectionProviderWrapper<>(provider, poolingProfile, disableValidation, retryPolicyTemplate); } else { provider = new ReconnectableConnectionProviderWrapper<>(provider, disableValidation, retryPolicyTemplate); } return provider; } }