(no commit message)
[utils] / test / enterprise / src / main / java / org / wamblee / test / inject / JavaEETestInjectorFactory.java
index c2228b987a9de41c6c2f9ac342df1e6eb1bed5ac..fdfb84a782ba71993d92788075515677590274ce 100644 (file)
  */
 package org.wamblee.test.inject;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
 
 import org.wamblee.inject.Injector;
-import org.wamblee.inject.InjectorFactory;
 import org.wamblee.inject.InjectorBuilder;
+import org.wamblee.inject.InjectorFactory;
 import org.wamblee.test.persistence.JpaBuilder;
 
 /**
@@ -46,26 +50,46 @@ import org.wamblee.test.persistence.JpaBuilder;
  */
 public class JavaEETestInjectorFactory implements InjectorFactory {
 
-    private EntityManager entityManager;
+    private List<Binding> bindings;
     private InjectorFactory delegate;
     
     /**
      * Constructs the factory. 
-     * @param aEntityManager Contextual entity manager to inject. 
      * @param aInjectorFactory Injector factory to delegate to. 
      */
-    public JavaEETestInjectorFactory(EntityManager aEntityManager, InjectorFactory aInjectorFactory) { 
-        entityManager = aEntityManager; 
+    public JavaEETestInjectorFactory(InjectorFactory aInjectorFactory) {
+        bindings = new ArrayList<Binding>();        
         delegate = aInjectorFactory;
     }
 
+    /**
+     * Adds default entity manager binding. Any field annotated with @PersistenceContext and of type 
+     * entity manager will get injected.
+     * @param aEntityManager Entitymanager object to inject.
+     * @return Factory to allow chaining.
+     */
+    public JavaEETestInjectorFactory addEntityManagerBinding(EntityManager aEntityManager) {
+        Binding em = new Binding(EntityManager.class, PersistenceContext.class, aEntityManager);
+        addBinding(em);
+        return this;
+    }
+    
+    /**
+     * Adds another custom injection binding. 
+     * @param aBinding Injection binding to use. 
+     * @return the factoryto allow chaining.
+     */
+    public JavaEETestInjectorFactory addBinding(Binding aBinding) { 
+        bindings.add(aBinding);
+        return this; 
+    }
+
     /**
      * Constructs the factory with the default injector factory obtained from 
      * {@link InjectorBuilder#getInjector()}. 
-     * @param aEntityManager Contextual entity manager to inject. 
      */
-    public JavaEETestInjectorFactory(EntityManager aEntityManager) {
-        this(aEntityManager,  getDefaultInjectorFactory());
+    public JavaEETestInjectorFactory() {
+        this(getDefaultInjectorFactory());
     }
 
     private static InjectorFactory getDefaultInjectorFactory() {
@@ -75,7 +99,7 @@ public class JavaEETestInjectorFactory implements InjectorFactory {
 
     @Override
     public Injector create(Class aClass) {
-        return new JavaEETestInjector(aClass, entityManager, delegate
+        return new JavaEETestInjector(aClass, bindings, delegate
             .create(aClass));
     }
 }