package org.skyscreamer.yoga.demo.test.jersey.guice;
import java.util.HashMap;
import java.util.Map;
import org.skyscreamer.yoga.builder.YogaBuilder;
import org.skyscreamer.yoga.builder.YogaBuilderViewFactory;
import org.skyscreamer.yoga.classfinder.HibernateClassFinderStrategy;
import org.skyscreamer.yoga.demo.dao.GenericDao;
import org.skyscreamer.yoga.demo.dao.inmemory.DemoData;
import org.skyscreamer.yoga.demo.dao.inmemory.DemoDataGenericDao;
import org.skyscreamer.yoga.demo.dto.UserConfiguration;
import org.skyscreamer.yoga.demo.jaxrs.resources.AbstractResource;
import org.skyscreamer.yoga.demo.model.Album;
import org.skyscreamer.yoga.demo.model.Artist;
import org.skyscreamer.yoga.demo.model.Song;
import org.skyscreamer.yoga.demo.model.User;
import org.skyscreamer.yoga.demo.test.MapBeanConext;
import org.skyscreamer.yoga.demo.util.TestUtil;
import org.skyscreamer.yoga.jaxrs.exceptionhandlers.EntityCountExceededExceptionExceptionMapper;
import org.skyscreamer.yoga.jaxrs.resource.MetaDataController;
import org.skyscreamer.yoga.jaxrs.view.builder.SelectorBuilderMessageBodyWriter;
import org.skyscreamer.yoga.jaxrs.view.builder.StreamingJsonSelectorMessageBodyWriter;
import org.skyscreamer.yoga.jaxrs.view.builder.XhtmlSelectorMessageBodyWriter;
import org.skyscreamer.yoga.jaxrs.view.builder.XmlSelectorMessageBodyWriter;
import org.skyscreamer.yoga.jersey.config.URIExtensionsConfig;
import org.skyscreamer.yoga.metadata.MetaDataRegistry;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
public class WebConfig extends GuiceServletContextListener
{
@Override
protected Injector getInjector()
{
return Guice.createInjector( new ServletModule()
{
@Override
protected void configureServlets()
{
Map<String, String> params = new HashMap<String, String>();
params.put( "javax.ws.rs.Application", URIExtensionsConfig.class.getName() );
params.put( "com.sun.jersey.config.property.packages", AbstractResource.class.getPackage().getName() );
DemoData data = new DemoData();
data.init();
GenericDao dao = new DemoDataGenericDao( data );
YogaBuilder builder = new YogaBuilder()
.withClassFinderStrategy( new HibernateClassFinderStrategy() )
.withAliasProperties( this.getClass().getClassLoader().getResourceAsStream( "selectorAlias.properties" ) )
.withOutputCountLimit( 2000 )
.enableStarAsAllFields()
.enableYogaLinks()
.registerYogaMetaDataClasses( User.class, Album.class, Artist.class, Song.class )
.registerEntityConfigurations( new UserConfiguration( dao ) );
bind( GenericDao.class ).toInstance( dao );
bind( YogaBuilderViewFactory.class ).toInstance( new YogaBuilderViewFactory( builder ));
bind( MetaDataRegistry.class ).toInstance( builder.getMetaDataRegistry() );
bind( StreamingJsonSelectorMessageBodyWriter.class );
bind( SelectorBuilderMessageBodyWriter.class );
bind( XmlSelectorMessageBodyWriter.class );
bind( XhtmlSelectorMessageBodyWriter.class );
bind( MetaDataController.class );
bind( EntityCountExceededExceptionExceptionMapper.class );
serve( "*.yoga", "*.json", "*.xml", "*.xhtml" ).with( GuiceContainer.class, params );
MapBeanConext context = new MapBeanConext();
context.register( GenericDao.class, dao );
TestUtil.setContext( context );
}
} );
}
}