X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Fenterprise%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Ftest%2Finject%2FJavaEETestInjector.java;h=8fe52ac10203de9030c599709c430d8b4fd85584;hb=a1ab1a2e44c95cc10ad4c4d15420b49e3744d93b;hp=9ea0517506fea7357937117ac1bb0fe571ef253e;hpb=8e6201ee8a948b120540f6306c6c9b85bed8ce95;p=utils diff --git a/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjector.java b/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjector.java index 9ea05175..8fe52ac1 100644 --- a/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjector.java +++ b/test/enterprise/src/main/java/org/wamblee/test/inject/JavaEETestInjector.java @@ -15,7 +15,11 @@ */ package org.wamblee.test.inject; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.util.List; +import java.util.Map; +import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -23,37 +27,98 @@ import javax.persistence.PersistenceContext; import org.wamblee.inject.Injector; import org.wamblee.reflection.Accessor; import org.wamblee.reflection.AnnotationUtils; +import org.wamblee.reflection.ObjectTraversal; +import org.wamblee.reflection.ObjectTraversal.ObjectVisitor; /** - * Injector that performs additional injection on top of the injections that are standard - * available (e.g. entity manager in Java SE environment). + *
+ * Injector that performs additional injection on top of the injections that are + * standard available (e.g. entity manager in Java SE environment). + *
+ * + *+ * It works by first delegating to the default injector (typically CDI). Afterwards it traverses the + * object graph of the injected object and performs custom injection of test objects as specified by the + * {@link Binding} class. This approach makes sure that test dependencies also find their way into + * objects that were created by the injection framework. + *
* * @author Erik Brakkee */ public class JavaEETestInjector implements Injector { - private EntityManager entityManager; + private class InjectionVisitor implements ObjectVisitor { + @Override + public boolean mustVisit(Class aClass) { + if (EntityManager.class.isAssignableFrom(aClass)) { + return false; + } + return true; + } + @Override + public boolean mustVisit(Field aField) { + // just process any field with annotations + return aField.getAnnotations().length > 0; + } + @Override + public boolean mustVisit(Method aMethod) { + return false; + } + @Override + public boolean visitArray(Object aArray) { + return true; + } + @Override + public boolean visitList(List aObject) { + return true; + } + @Override + public boolean visitMap(Map aObject) { + return true; + } + @Override + public boolean visitPlainObject(Object aObject) { + performTestInjections(aObject); + return true; + } + @Override + public boolean visitSet(Set aSet) { + return true; + } + } + + private List