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}