package com.syzton.sunread.config;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
/**
* @author Petri Kainulainen
*/
public class ApplicationConfig implements WebApplicationInitializer {
private static final String DISPATCHER_SERVLET_NAME = "dispatcher";
private static final String DISPATCHER_SERVLET_MAPPING = "/";
private static final String ENTITYMANAGER_FILTER_NAME = "SpringOpenEntityManagerInViewFilter";
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(ApplicationContext.class);
//XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
//rootContext.setConfigLocation("classpath:exampleApplicationContext.xml");
ServletRegistration.Dynamic dispatcher = servletContext.addServlet(DISPATCHER_SERVLET_NAME, new DispatcherServlet(rootContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(DISPATCHER_SERVLET_MAPPING);
servletContext.addListener(new ContextLoaderListener(rootContext));
FilterRegistration.Dynamic springSecurityFilter = servletContext.addFilter("springSecurityFilterChain", org.springframework.web.filter.DelegatingFilterProxy.class);
springSecurityFilter.addMappingForUrlPatterns(null, false, "/*");
FilterRegistration.Dynamic encoder = servletContext.addFilter("EncoderFilter",new CharacterEncodingFilter());
encoder.setInitParameter("encoding","UTF-8");
encoder.setInitParameter("forceEncoding","true");
encoder.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, DISPATCHER_SERVLET_NAME);
FilterRegistration.Dynamic filter = servletContext.addFilter(ENTITYMANAGER_FILTER_NAME,new OpenEntityManagerInViewFilter());
filter.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST),true, DISPATCHER_SERVLET_NAME);
}
}