/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.engine.service.beanresolver.impl;
import org.hibernate.search.engine.service.beanresolver.spi.BeanResolver;
/**
* A bean resolver implementing fallback: it attempts to resolve beans
* against a given delegate, return it if the resolution succeeded (non-null result),
* or attempts a resolution {@link ReflectionBeanResolver using reflection} if it failed
* (null result).
* <p>
* Any exception thrown by the delegate will be propagated immediately (it won't be swallowed
* to try reflection).
* <p>
* Note that we don't expect this resolver to ever return null, because the resolution
* using reflection will always either succeed (return a non-null bean) or throw an exception.
*
* @author Yoann Rodiere
*/
public class ReflectionFallbackBeanResolver implements BeanResolver {
private final BeanResolver delegate;
private final ReflectionBeanResolver fallback;
public ReflectionFallbackBeanResolver(BeanResolver delegate, ReflectionBeanResolver fallback) {
super();
this.delegate = delegate;
this.fallback = fallback;
}
@Override
public <T> T resolve(Class<?> reference, Class<T> expectedClass) {
T result = delegate.resolve( reference, expectedClass );
if ( result == null ) {
result = fallback.resolve( reference, expectedClass );
}
return result;
}
}