package gov.samhsa.consent2share.web.config.di.servlet;
import gov.samhsa.consent2share.web.controller.ControllerBasePackageMarker;
import java.util.Locale;
import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
/**
* Using bean defined in root application context as View resolver
*
*/
@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses = {ControllerBasePackageMarker.class})
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("views/uncaughtException.html");
registry.addViewController("views/resourceNotFound.html");
registry.addViewController("views/dataAccessFailure.html");
registry.addViewController("views/error404.html");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ThemeChangeInterceptor());
registry.addInterceptor(localeChangeInterceptor());
}
@Bean
public CookieLocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(new Locale("en"));
return localeResolver;
}
@Bean
public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
simpleMappingExceptionResolver
.setDefaultErrorView("views/uncaughtException");
simpleMappingExceptionResolver.setWarnLogCategory("InternalError");
Properties prop = new Properties();
prop.put(".DataAccessException", "views/dataAccessFailure");
prop.put(".NoSuchRequestHandlingMethodException",
"views/resourceNotFound");
prop.put(".TypeMismatchException", "views/resourceNotFound");
prop.put(".MissingServletRequestParameterException",
"views/resourceNotFound");
simpleMappingExceptionResolver.setExceptionMappings(prop);
return simpleMappingExceptionResolver;
}
@Bean
public CommonsMultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
// url?lang=cn request will change the locale to Chinese
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
return localeChangeInterceptor;
}
}