/*
* 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.config.spring.dsl.spring;
import org.mule.runtime.api.config.PoolingProfile;
import org.mule.runtime.core.api.component.Component;
import org.mule.runtime.core.api.component.LifecycleAdapterFactory;
import org.mule.runtime.core.api.interceptor.Interceptor;
import org.mule.runtime.core.api.model.EntryPointResolver;
import org.mule.runtime.core.api.model.EntryPointResolverSet;
import org.mule.runtime.core.component.AbstractJavaComponent;
import org.mule.runtime.core.component.PooledJavaComponent;
import org.mule.runtime.core.api.model.resolvers.DefaultEntryPointResolverSet;
import org.mule.runtime.core.object.PrototypeObjectFactory;
import org.mule.runtime.dsl.api.component.AbstractAnnotatedObjectFactory;
import org.mule.runtime.dsl.api.component.ObjectFactory;
import java.util.ArrayList;
import java.util.List;
/**
* {@link ObjectFactory} for {@link PooledJavaComponent} objects.
*
* @since 4.0
*/
public class PooledComponentObjectFactory extends AbstractAnnotatedObjectFactory<Component> {
protected Class clazz;
protected org.mule.runtime.core.api.object.ObjectFactory objectFactory = new PrototypeObjectFactory();
protected EntryPointResolverSet entryPointResolverSet;
protected EntryPointResolver entryPointResolver;
protected PoolingProfile poolingProfile = new PoolingProfile();
protected LifecycleAdapterFactory lifecycleAdapterFactory;
protected List<Interceptor> interceptors = new ArrayList<>();
@Override
public Component doGetObject() throws Exception {
if (clazz != null) {
objectFactory = new PrototypeObjectFactory(clazz);
}
if (entryPointResolver != null) {
entryPointResolverSet = new DefaultEntryPointResolverSet();
entryPointResolverSet.addEntryPointResolver(entryPointResolver);
}
AbstractJavaComponent pooledJavaComponent = createComponent();
pooledJavaComponent.setInterceptors(interceptors);
pooledJavaComponent.setAnnotations(getAnnotations());
return pooledJavaComponent;
}
protected AbstractJavaComponent createComponent() {
PooledJavaComponent pooledJavaComponent;
if (objectFactory != null) {
pooledJavaComponent = new PooledJavaComponent(objectFactory, poolingProfile, entryPointResolverSet);
pooledJavaComponent.setLifecycleAdapterFactory(lifecycleAdapterFactory);
} else {
pooledJavaComponent = new PooledJavaComponent();
}
return pooledJavaComponent;
}
public void setInterceptors(List<Interceptor> interceptors) {
this.interceptors = interceptors;
}
public void setClazz(Class clazz) {
this.clazz = clazz;
}
public void setObjectFactory(org.mule.runtime.core.api.object.ObjectFactory objectFactory) {
this.objectFactory = objectFactory;
}
public void setEntryPointResolverSet(EntryPointResolverSet entryPointResolverSet) {
this.entryPointResolverSet = entryPointResolverSet;
}
public void setEntryPointResolver(EntryPointResolver entryPointResolver) {
this.entryPointResolver = entryPointResolver;
}
public void setPoolingProfile(PoolingProfile poolingProfile) {
this.poolingProfile = poolingProfile;
}
public void setLifecycleAdapterFactory(LifecycleAdapterFactory lifecycleAdapterFactory) {
this.lifecycleAdapterFactory = lifecycleAdapterFactory;
}
}