/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.guiceyfruit.jpa;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Provides;
import javax.persistence.Cache;
import javax.persistence.PersistenceUnitUtil;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.metamodel.Metamodel;
import junit.framework.TestCase;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.Map;
/**
* @version $Revision: 1.1 $
*/
public class InjectionTest extends TestCase {
public void testInjection() throws Exception {
final EntityManager stubEntityManager = createStubEntityManager();
Injector injector = Guice.createInjector(new JpaModule() {
@Override
protected void configure() {
super.configure();
// TODO this should be the hibernate implementation
bind(EntityManagerFactory.class).toInstance(
new EntityManagerFactory() {
boolean open = true;
public CriteriaBuilder getCriteriaBuilder()
{
return null;
}
public Metamodel getMetamodel()
{
return null;
}
public Map<String, Object> getProperties()
{
return null;
}
public Cache getCache()
{
return null;
}
public PersistenceUnitUtil getPersistenceUnitUtil()
{
return null;
}
public EntityManager createEntityManager() {
return stubEntityManager;
}
public EntityManager createEntityManager(Map map) {
return stubEntityManager;
}
public void close() {
open = false;
}
public boolean isOpen() {
return open;
}
}
);
}
@Provides
public EntityManager createEntityManager(EntityManagerFactory entityManagerFactory) {
return entityManagerFactory.createEntityManager();
}
});
TestDTO testDTO = injector.getInstance(TestDTO.class);
assertEquals("EntityManager", stubEntityManager, testDTO.getEntityManager());
}
protected EntityManager createStubEntityManager() {
return new EntityManager() {
public void persist(Object o) {
// TODO
}
public <T> T merge(T t) {
// TODO
return null;
}
public void remove(Object o) {
// TODO
}
public <T> T find(Class<T> tClass, Object o) {
// TODO
return null;
}
public <T> T getReference(Class<T> tClass, Object o) {
// TODO
return null;
}
public void flush() {
// TODO
}
public void setFlushMode(FlushModeType flushModeType) {
// TODO
}
public FlushModeType getFlushMode() {
// TODO
return null;
}
public void lock(Object o, LockModeType lockModeType) {
// TODO
}
public void refresh(Object o) {
// TODO
}
public void clear() {
// TODO
}
public boolean contains(Object o) {
// TODO
return false;
}
public Query createQuery(String s) {
// TODO
return null;
}
public Query createNamedQuery(String s) {
// TODO
return null;
}
public Query createNativeQuery(String s) {
// TODO
return null;
}
public Query createNativeQuery(String s, Class aClass) {
// TODO
return null;
}
public Query createNativeQuery(String s, String s1) {
// TODO
return null;
}
public void close() {
// TODO
}
public boolean isOpen() {
// TODO
return false;
}
public EntityTransaction getTransaction() {
// TODO
return null;
}
public void joinTransaction() {
// TODO
}
public Object getDelegate() {
// TODO
return null;
}
public <T> T find( final Class<T> entityClass, final Object primaryKey, final Map<String, Object> properties )
{
return null;
}
public <T> T find( final Class<T> entityClass, final Object primaryKey, final LockModeType lockMode )
{
return null;
}
public <T> T find( final Class<T> entityClass, final Object primaryKey, final LockModeType lockMode, final Map<String, Object> properties )
{
return null;
}
public void lock( final Object entity, final LockModeType lockMode, final Map<String, Object> properties )
{
}
public void refresh( final Object entity, final Map<String, Object> properties )
{
}
public void refresh( final Object entity, final LockModeType lockMode )
{
}
public void refresh( final Object entity, final LockModeType lockMode, final Map<String, Object> properties )
{
}
public void detach( final Object entity )
{
}
public LockModeType getLockMode( final Object entity )
{
return null;
}
public void setProperty( final String propertyName, final Object value )
{
}
public Map<String, Object> getProperties()
{
return null;
}
public <T> TypedQuery<T> createQuery( final CriteriaQuery<T> criteriaQuery )
{
return null;
}
public <T> TypedQuery<T> createQuery( final String qlString, final Class<T> resultClass )
{
return null;
}
public <T> TypedQuery<T> createNamedQuery( final String name, final Class<T> resultClass )
{
return null;
}
public <T> T unwrap( final Class<T> cls )
{
return null;
}
public EntityManagerFactory getEntityManagerFactory()
{
return null;
}
public CriteriaBuilder getCriteriaBuilder()
{
return null;
}
public Metamodel getMetamodel()
{
return null;
}
};
}
public static class TestDTO {
@PersistenceContext
EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
}
}