/*
* 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.module.extension.internal.util.MuleExtensionUtils.getConnectionProviderFactory;
import org.mule.runtime.api.config.PoolingProfile;
import org.mule.runtime.api.connection.ConnectionProvider;
import org.mule.runtime.api.meta.model.ExtensionModel;
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.module.extension.internal.runtime.objectbuilder.ResolverSetBasedObjectBuilder;
import org.mule.runtime.module.extension.internal.runtime.resolver.ResolverSet;
/**
* Implementation of {@link ResolverSetBasedObjectBuilder} which produces instances of {@link ConnectionProviderModel}
*
* @since 4.0
*/
public abstract class ConnectionProviderObjectBuilder<C> extends ResolverSetBasedObjectBuilder<ConnectionProvider<C>> {
protected final ConnectionProviderModel providerModel;
protected final boolean disableValidation;
protected final RetryPolicyTemplate retryPolicyTemplate;
protected final PoolingProfile poolingProfile;
protected final ExtensionModel extensionModel;
protected final MuleContext muleContext;
protected String ownerConfigName;
/**
* Creates a new instances which produces instances based on the given {@code providerModel} and {@code resolverSet}
*
* @param providerModel the {@link ConnectionProviderModel} which describes the instances to be produced
* @param resolverSet a {@link ResolverSet} to populate the values
* @param connectionManager a {@link ConnectionManagerAdapter} to obtain the default {@link RetryPolicyTemplate} in case of none
* is provided
*/
public ConnectionProviderObjectBuilder(ConnectionProviderModel providerModel, ResolverSet resolverSet,
ConnectionManagerAdapter connectionManager, ExtensionModel extensionModel,
MuleContext muleContext) {
this(providerModel, resolverSet, null, false, null, connectionManager, extensionModel, muleContext);
}
public ConnectionProviderObjectBuilder(ConnectionProviderModel providerModel, ResolverSet resolverSet,
PoolingProfile poolingProfile, boolean disableValidation,
RetryPolicyTemplate retryPolicyTemplate, ConnectionManagerAdapter connectionManager,
ExtensionModel extensionModel, MuleContext muleContext) {
super(getConnectionProviderFactory(providerModel).getObjectType(), providerModel, resolverSet);
this.providerModel = providerModel;
this.poolingProfile = poolingProfile;
this.extensionModel = extensionModel;
this.muleContext = muleContext;
this.retryPolicyTemplate =
retryPolicyTemplate != null ? retryPolicyTemplate : connectionManager.getDefaultRetryPolicyTemplate();
this.disableValidation = disableValidation;
}
public ConnectionProviderObjectBuilder(ConnectionProviderModel providerModel, Class<?> prototypeClass, ResolverSet resolverSet,
PoolingProfile poolingProfile, boolean disableValidation,
RetryPolicyTemplate retryPolicyTemplate, ConnectionManagerAdapter connectionManager,
ExtensionModel extensionModel, MuleContext muleContext) {
super(prototypeClass, providerModel, resolverSet);
this.providerModel = providerModel;
this.poolingProfile = poolingProfile;
this.extensionModel = extensionModel;
this.muleContext = muleContext;
this.retryPolicyTemplate =
retryPolicyTemplate != null ? retryPolicyTemplate : connectionManager.getDefaultRetryPolicyTemplate();
this.disableValidation = disableValidation;
}
/**
* {@inheritDoc}
*/
@Override
protected ConnectionProvider instantiateObject() {
return getConnectionProviderFactory(providerModel).newInstance();
}
/**
* {@inheritDoc}
*/
@Override
public boolean isDynamic() {
return resolverSet.isDynamic();
}
public void setOwnerConfigName(String ownerConfigName) {
this.ownerConfigName = ownerConfigName;
}
}