001package org.woehlke.bloodmoney.config; 002 003 004import org.springframework.beans.factory.annotation.Autowired; 005import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 006import org.springframework.boot.context.properties.EnableConfigurationProperties; 007import org.springframework.context.annotation.Bean; 008import org.springframework.context.annotation.Configuration; 009import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 010import org.springframework.data.web.config.EnableSpringDataWebSupport; 011import org.springframework.scheduling.annotation.EnableAsync; 012import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; 013import org.springframework.web.servlet.LocaleResolver; 014import org.springframework.web.servlet.config.annotation.EnableWebMvc; 015import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 016import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 017import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 018import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; 019import org.springframework.web.servlet.i18n.SessionLocaleResolver; 020import org.thymeleaf.dialect.springdata.SpringDataDialect; 021import org.thymeleaf.extras.java8time.dialect.Java8TimeDialect; 022 023import java.util.Locale; 024 025 026@Configuration 027@EnableAsync 028@EnableJpaRepositories({ 029 "org.woehlke.bloodmoney.measurements" 030}) 031@EnableConfigurationProperties({ 032 BloodMoneyProperties.class 033}) 034@EnableWebMvc 035@EnableSpringDataWebSupport 036@EnableAutoConfiguration 037public class BloodMoneyWebMvcConfig /* extends WebMvcConfigurerAdapter */ implements WebMvcConfigurer { 038 039 @Bean 040 public Java8TimeDialect java8TimeDialect() { 041 return new Java8TimeDialect(); 042 } 043 044 @Bean 045 public LocaleResolver localeResolver() { 046 SessionLocaleResolver slr = new SessionLocaleResolver(); 047 slr.setDefaultLocale(Locale.GERMAN); 048 return slr; 049 } 050 051 @Bean 052 public LocaleChangeInterceptor localeChangeInterceptor() { 053 LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 054 lci.setParamName("lang"); 055 return lci; 056 } 057 058 @Bean 059 public SpringDataDialect springDataDialect() { 060 return new SpringDataDialect(); 061 } 062 063 @Bean 064 public MethodValidationPostProcessor methodValidationPostProcessor() { 065 return new MethodValidationPostProcessor(); 066 } 067 068 @Override 069 public void addInterceptors(InterceptorRegistry registry) { 070 registry.addInterceptor(localeChangeInterceptor()); 071 } 072 073 @Override 074 public void addResourceHandlers(ResourceHandlerRegistry registry) { 075 for(String key: bloodMoneyProperties.getWebConfig().getWebAddResourceHandlers()){ 076 registry.addResourceHandler("/"+key+"*").addResourceLocations("/"+key); 077 registry.addResourceHandler("/"+key+"**").addResourceLocations("/"+key); 078 } 079 for(String key: bloodMoneyProperties.getWebConfig().getWebAddResourceHandlersStatic()){ 080 registry.addResourceHandler("/"+key+"*").addResourceLocations("classpath:/static/"+key); 081 registry.addResourceHandler("/"+key+"**").addResourceLocations("classpath:/static/"+key); 082 } 083 } 084 085 private final BloodMoneyProperties bloodMoneyProperties; 086 087 @Autowired 088 public BloodMoneyWebMvcConfig(BloodMoneyProperties bloodMoneyProperties) { 089 this.bloodMoneyProperties = bloodMoneyProperties; 090 } 091}