package org.om.core.impl.persistence.jcr.test;
import java.io.File;
import java.net.URISyntaxException;
import javax.inject.Singleton;
import javax.jcr.Repository;
import javax.jcr.Session;
import org.apache.jackrabbit.core.TransientRepository;
import com.google.common.testing.TearDown;
import com.google.common.testing.TearDownAccepter;
import com.google.guiceberry.GuiceBerryModule;
import com.google.guiceberry.TestId;
import com.google.guiceberry.TestScoped;
import com.google.guiceberry.TestWrapper;
import com.google.inject.Provides;
/**
* {@link GuiceBerryModule} that sets up a {@link TransientRepository}. Will
* inject the {@link Repository} instance and the {@link Session}.
*
* @author Jakob Külzer
*/
public class TransientRepoTestEnv extends GuiceBerryModule {
@Override
protected void configure() {
super.configure();
bind(Session.class).toProvider(TestJcrFactory.class).in(TestScoped.class);
install(new ObjectMapperDefaultBindings());
}
@Provides
public TestWrapper getTestWrapper(final TestId testId, final TearDownAccepter tearDownAccepter, final Session session) {
final TestWrapper testWrapper = new TestWrapper() {
public void toRunBeforeTest() {
tearDownAccepter.addTearDown(new TearDown() {
public void tearDown() throws Exception {
System.out.println("TearDown.tearDown() Closing session!");
session.logout();
}
});
}
};
return testWrapper;
}
@Provides
@Singleton
public Repository createRepository() throws URISyntaxException {
System.out.println("TransientRepoTestEnv.createRepository() Starting up repository...");
File dir = new File("target/transientrepo");
File configFile = new File(getClass().getClassLoader().getResource("repository.xml").toURI());
System.out.println("TransientRepoTestEnv.createRepository() Loading repository configuration from " + configFile.getAbsolutePath());
return new TransientRepository(configFile, dir);
}
}