WebjetComponentSpringConfig.java

package sk.iway.iwcm.system.spring.webjet_component;

import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.freemarker.FreeMarkerView;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;

import sk.iway.iwcm.Constants;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.SetCharacterEncodingFilter;
import sk.iway.iwcm.system.spring.webjet_component.dialect.IwcmDialect;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableWebMvc
public class WebjetComponentSpringConfig {

    final
    ApplicationContext context;

    public WebjetComponentSpringConfig(ApplicationContext context) {
        this.context = context;
    }

    // nastavenie message source pre validator
    @Bean
    public Validator mvcValidator() {
        LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();

        validatorFactoryBean.setMessageInterpolator(new WebjetResourceBundleMessageInterpolator());

        return validatorFactoryBean;
    }

    @Bean
    public WebjetViewResolver viewResolver() {

        List<ViewResolver> resolvers = new ArrayList<>();

        WebjetInternalResourceViewResolver view = new WebjetInternalResourceViewResolver();
        view.setViewClass(JstlView.class);
        view.setSuffix(".jsp");
        view.setOrder(1);
        view.setApplicationContext(context);

        resolvers.add(view);

        WebjetFreeMarkerViewResolver view2 = new WebjetFreeMarkerViewResolver();
        view2.setViewClass(FreeMarkerView.class);
        view2.setCache(true);
        view2.setOrder(2);
        view2.setSuffix(".ftl");
        view2.setContentType("text/html;charset=windows-1250");
        view2.setApplicationContext(context);

        resolvers.add(view2);
        resolvers.add(thymeleafViewResolver());

        WebjetViewResolver resolver = new WebjetViewResolver();
        resolver.setViewResolvers(resolvers);
        resolver.setApplicationContext(context);
        return resolver;
    }

    /* THYMELEAF KONFIGURACIA, namapovana na / s vyhladavanim .html suborov */
    @Bean
    public MessageSource messageSource() {
        Logger.debug(WebjetComponentParser.class, "Spring: messageSource");
        WebjetMessageSource source = new WebjetMessageSource();
        return source;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        Logger.debug(WebjetComponentParser.class, "thymeleaf: templateEngine");

        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setEnableSpringELCompiler(true);
        templateEngine.addDialect(new IwcmDialect());
        templateEngine.setTemplateResolver(thymeleafTemplateResolver());
        return templateEngine;
    }

    @Bean
    public SpringResourceTemplateResolver thymeleafTemplateResolver() {
        Logger.debug(WebjetComponentParser.class, "thymeleaf: thymeleafTemplateResolver");

        SpringResourceTemplateResolver templateResolver
          = new SpringResourceTemplateResolver();
        templateResolver.setPrefix("/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setOrder(0);
        templateResolver.setCacheable(false);
        Logger.debug(WebjetComponentSpringConfig.class, "thymeleafTemplateResolver SETTING ENCODING: "+Constants.getString("defaultEncoding"));
        templateResolver.setCharacterEncoding(SetCharacterEncodingFilter.getEncoding());
        return templateResolver;
    }

    @Bean
    public ThymeleafViewResolver thymeleafViewResolver() {

        Logger.debug(WebjetComponentParser.class, "thymeleaf: thymeleafViewResolver");

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        Logger.debug(WebjetComponentSpringConfig.class, "thymeleafViewResolver SETTING ENCODING: "+Constants.getString("defaultEncoding"));
        viewResolver.setCharacterEncoding(SetCharacterEncodingFilter.getEncoding());
        return viewResolver;
    }
}