package ru.vyarus.dropwizard.guice.module.installer;
import io.dropwizard.jetty.MutableServletContextHandler;
import io.dropwizard.setup.Environment;
import ru.vyarus.dropwizard.guice.module.installer.bundle.GuiceyBootstrap;
import ru.vyarus.dropwizard.guice.module.installer.bundle.GuiceyBundle;
import ru.vyarus.dropwizard.guice.module.installer.feature.web.WebFilterInstaller;
import ru.vyarus.dropwizard.guice.module.installer.feature.web.WebServletInstaller;
import ru.vyarus.dropwizard.guice.module.installer.feature.web.listener.WebListenerInstaller;
/**
* Bundle adds servlet installers for filters, servlets and listeners installation.
* Standard java.servlet.annotation annotations ({@link javax.servlet.annotation.WebFilter},
* {@link javax.servlet.annotation.WebServlet}, {@link javax.servlet.annotation.WebListener}) are used.
* Note that these annotations are not recognized by jetty automatically, because dropwizard doesn't include
* jetty-annotations modules.
* <p>
* By default, everything is installed for main context. Special annotation
* {@link ru.vyarus.dropwizard.guice.module.installer.feature.web.AdminContext} must be used to install into admin
* or both contexts.
* <p>
* Also bundle assigns application ({@link Environment#getApplicationContext()}) and
* admin ({@link Environment#getAdminContext()}) contexts display names
* ({@link MutableServletContextHandler#setDisplayName(String)}). Does not override already assigned name.
* <p>
* If only annotations used for filters and servlets definitions consider disabling support for guice
* {@link com.google.inject.servlet.ServletModule} using
* {@link ru.vyarus.dropwizard.guice.GuiceyOptions#GuiceFilterRegistration}.
*
* @author Vyacheslav Rusakov
* @since 06.08.2016
*/
public class WebInstallersBundle implements GuiceyBundle {
@Override
public void initialize(final GuiceyBootstrap bootstrap) {
bootstrap.installers(
WebFilterInstaller.class,
WebServletInstaller.class,
WebListenerInstaller.class
);
nameContext(bootstrap.environment().getApplicationContext(), "Application context");
nameContext(bootstrap.environment().getAdminContext(), "Admin context");
}
private void nameContext(final MutableServletContextHandler context, final String name) {
if (context.getDisplayName() == null) {
context.setDisplayName(name);
}
}
}