/* * 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.resolver; import static org.mule.runtime.core.api.lifecycle.LifecycleUtils.initialiseIfNeeded; import static org.mule.runtime.core.api.lifecycle.LifecycleUtils.startIfNeeded; import org.mule.runtime.api.connection.ConnectionProvider; import org.mule.runtime.api.exception.MuleException; import org.mule.runtime.api.lifecycle.Initialisable; import org.mule.runtime.api.lifecycle.InitialisationException; import org.mule.runtime.api.lifecycle.Startable; import org.mule.runtime.api.meta.AbstractAnnotatedObject; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.module.extension.internal.runtime.config.ConnectionProviderObjectBuilder; import java.util.Optional; /** * A {@link ValueResolver} specialization for producing {@link ConnectionProvider} instances through a * {@link ConnectionProviderObjectBuilder} * * @since 4.0 */ public class ConnectionProviderResolver<C> extends AbstractAnnotatedObject implements ConnectionProviderValueResolver<C>, Initialisable, Startable { private final ConnectionProviderObjectBuilder<C> objectBuilder; private final ObjectBuilderValueResolver<ConnectionProvider<C>> valueResolver; private final ResolverSet resolverSet; /** * Creates a new instance * * @param objectBuilder an object builder to instantiate the {@link ConnectionProvider} */ public ConnectionProviderResolver(ConnectionProviderObjectBuilder<C> objectBuilder, ResolverSet resolverSet, MuleContext muleContext) { this.objectBuilder = objectBuilder; this.valueResolver = new ObjectBuilderValueResolver<>(objectBuilder, muleContext); this.resolverSet = resolverSet; } /** * {@inheritDoc} */ @Override public ConnectionProvider<C> resolve(ValueResolvingContext context) throws MuleException { return valueResolver.resolve(context); } /** * {@inheritDoc} */ @Override public boolean isDynamic() { return valueResolver.isDynamic(); } /** * {@inheritDoc} */ @Override public Optional<ResolverSet> getResolverSet() { return Optional.of(resolverSet); } public void setOwnerConfigName(String ownerConfigName) { objectBuilder.setOwnerConfigName(ownerConfigName); } @Override public void initialise() throws InitialisationException { initialiseIfNeeded(resolverSet); } @Override public void start() throws MuleException { startIfNeeded(objectBuilder); } }