package org.testfun.jee.runner.inject;
import org.testfun.jee.runner.EjbWithMockitoRunnerException;
import org.testfun.jee.runner.SingletonEntityManager;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.lang.reflect.Field;
// Inject an entityManager to @PersistenceContext annotated member variables
public class PersistenceContextInjector implements Injector {
@Override
public <T> void inject(T target, Field field) {
if (field.isAnnotationPresent(PersistenceContext.class)) {
// Make sure the field is of EntityManager interface
Class<?> fieldClass = InjectionUtils.getFieldInterface(target, field);
if (!EntityManager.class.equals(fieldClass)) {
throw new EjbWithMockitoRunnerException(InjectionUtils.getFieldDescription(field, target) + " is annotated with PersistenceContext but isn't EntityManager");
}
// Assign the EntityManager to the field
InjectionUtils.assignObjectToField(target, field, SingletonEntityManager.getInstance());
}
}
@Override
public void reset() { }
}