package ru.vyarus.dropwizard.guice.module.jersey; import com.google.inject.AbstractModule; import io.dropwizard.Application; import io.dropwizard.setup.Environment; import org.glassfish.hk2.api.ServiceLocator; import ru.vyarus.dropwizard.guice.injector.lookup.InjectorProvider; import ru.vyarus.dropwizard.guice.module.context.ConfigurationContext; import ru.vyarus.dropwizard.guice.module.jersey.hk2.GuiceBindingsModule; import javax.servlet.DispatcherType; import java.util.EnumSet; import static ru.vyarus.dropwizard.guice.GuiceyOptions.UseHkBridge; import static ru.vyarus.dropwizard.guice.GuiceyOptions.GuiceFilterRegistration; /** * Guice jersey2 integration module. * <p> * Integration is very similar to old jersey-guice: guice context is dominant; * guice instantiated first; jersey objects directly registered in guice; guice objects directly registered * in hk. * <p> * Guice {@link com.google.inject.servlet.ServletModule} support is optional and may be disabled, see * {@link ru.vyarus.dropwizard.guice.GuiceyOptions#GuiceFilterRegistration}. * * @author Vyacheslav Rusakov * @see ru.vyarus.dropwizard.guice.module.jersey.GuiceFeature for integration details * @since 31.08.2014 */ public class Jersey2Module extends AbstractModule { private final Application application; private final Environment environment; private final ConfigurationContext context; public Jersey2Module(final Application application, final Environment environment, final ConfigurationContext context) { this.application = application; this.environment = environment; this.context = context; } @Override protected void configure() { final EnumSet<DispatcherType> types = context.option(GuiceFilterRegistration); final boolean guiceServletSupport = !types.isEmpty(); // injector not available at this point, so using provider final InjectorProvider provider = new InjectorProvider(application); install(new GuiceBindingsModule(provider, guiceServletSupport)); final GuiceFeature component = new GuiceFeature(provider, context.stat(), context.option(UseHkBridge)); bind(ServiceLocator.class).toProvider(component); environment.jersey().register(component); if (guiceServletSupport) { install(new GuiceWebModule(environment, types)); } } }