(no commit message)
[utils] / test / enterprise / src / main / java / org / wamblee / test / inject / JavaEETestInjectorFactory.java
index b36dfbf8675243dc09cc3e4aa222a2b1c65b8bc8..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.InjectorBuilder;
 import org.wamblee.inject.InjectorFactory;
-import org.wamblee.inject.InjectorFactoryBuilder;
 import org.wamblee.test.persistence.JpaBuilder;
 
 /**
@@ -38,7 +42,7 @@ import org.wamblee.test.persistence.JpaBuilder;
  *
  * <p>
  * To use it, construct the factory using one of the available constructors and set 
- * {@link InjectorFactoryBuilder#setInjectorFactory(InjectorFactory)).
+ * <code>InjectorBuilder.setInjectorFactory(InjectorFactory)</code>.
  * </p>
  * 
  * @author Erik Brakkee
@@ -46,36 +50,56 @@ 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 InjectorFactoryBuilder#getInjector()}. 
-     * @param aEntityManager Contextual entity manager to inject. 
+     * {@link InjectorBuilder#getInjector()}. 
      */
-    public JavaEETestInjectorFactory(EntityManager aEntityManager) {
-        this(aEntityManager,  getDefaultInjectorFactory());
+    public JavaEETestInjectorFactory() {
+        this(getDefaultInjectorFactory());
     }
 
     private static InjectorFactory getDefaultInjectorFactory() {
-        InjectorFactoryBuilder.setInjectorFactory(null);
-        return InjectorFactoryBuilder.getInjectorFactory();
+        InjectorBuilder.setInjectorFactory(null);
+        return InjectorBuilder.getInjectorFactory();
     }
 
     @Override
     public Injector create(Class aClass) {
-        return new JavaEETestInjector(aClass, entityManager, delegate
+        return new JavaEETestInjector(aClass, bindings, delegate
             .create(aClass));
     }
 }