package io.lumify.sql.web;
import com.google.inject.Inject;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import io.lumify.miniweb.Handler;
import io.lumify.sql.model.HibernateSessionManager;
import io.lumify.web.ApplicationBootstrap;
import io.lumify.web.WebApp;
import io.lumify.web.WebAppPlugin;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import java.util.EnumSet;
public class SqlModelWebAppPlugin implements WebAppPlugin {
private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(SqlModelWebAppPlugin.class);
public static final String FILTER_NAME = "hibernate-session-manager";
private HibernateSessionManager sessionManager;
@Inject
public void configure(HibernateSessionManager sessionManager) {
this.sessionManager = sessionManager;
}
@Override
public void init(WebApp app, ServletContext servletContext, Handler authenticationHandler) {
FilterRegistration.Dynamic filter = servletContext.addFilter(FILTER_NAME, new HibernateSessionManagementFilter(sessionManager));
addMapping(filter, ApplicationBootstrap.LUMIFY_SERVLET_NAME);
addMapping(filter, ApplicationBootstrap.ATMOSPHERE_SERVLET_NAME);
// TODO: servletContext.getServletRegistrations().keySet() includes atmosphere but not lumify?
filter.setAsyncSupported(true);
}
private void addMapping(FilterRegistration.Dynamic filter, String servletName) {
LOGGER.info("mapping %s filter for servlet %s", FILTER_NAME, servletName);
filter.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), false, servletName);
}
}