package com.jasonclawson.dropwizardry.guice.support;
import java.util.Map;
import javax.servlet.ServletException;
import javax.ws.rs.core.Application;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Scope;
import com.google.inject.Singleton;
import com.google.inject.servlet.ServletScopes;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.guice.spi.container.GuiceComponentProviderFactory;
import com.sun.jersey.spi.container.WebApplication;
import com.sun.jersey.spi.container.servlet.ServletContainer;
import com.sun.jersey.spi.container.servlet.WebConfig;
/**
*
* Source taken from https://github.com/HubSpot/dropwizard-guice
* License: Apache License Version 2.0
* @author eliast
*
*/
@Singleton
public class GuiceContainer extends ServletContainer {
private static final long serialVersionUID = 1931878850157940335L;
@Inject
private Injector injector;
private WebApplication webapp;
private ResourceConfig resourceConfig = new DefaultResourceConfig();
public class ServletGuiceComponentProviderFactory extends GuiceComponentProviderFactory {
public ServletGuiceComponentProviderFactory(ResourceConfig config, Injector injector) {
super(config, injector);
}
@Override
public Map<Scope, ComponentScope> createScopeMap() {
Map<Scope, ComponentScope> m = super.createScopeMap();
m.put(ServletScopes.REQUEST, ComponentScope.PerRequest);
return m;
}
}
public GuiceContainer() {
}
public GuiceContainer(Application app) {
super(app);
}
public GuiceContainer(Class<? extends Application> app) {
super(app);
}
public void setResourceConfig(ResourceConfig resourceConfig) {
this.resourceConfig = resourceConfig;
}
@Override
protected ResourceConfig getDefaultResourceConfig(Map<String, Object> props, WebConfig webConfig) throws ServletException {
return resourceConfig;
}
@Override
protected void initiate(ResourceConfig config, WebApplication webapp) {
this.webapp = webapp;
webapp.initiate(config, new ServletGuiceComponentProviderFactory(config, injector));
}
public WebApplication getWebApplication() {
return webapp;
}
}