com.xiovr.unibot.config.MvcConfig.java Source code

Java tutorial

Introduction

Here is the source code for com.xiovr.unibot.config.MvcConfig.java

Source

/**
 * Copyright (c) 2014 xio4
 * Universal bot for lineage-like games (Archeage, Lineage2 etc)
 *
 * This file is part of Unibot.
 *
 * Unibot is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.xiovr.unibot.config;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
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.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.resourceresolver.SpringResourceResourceResolver;
import org.thymeleaf.spring4.view.ThymeleafView;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;

/**
 * @author xio4 Main mvc config
 */
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {
    /**
     * Default application context
     */
    @Autowired
    private ApplicationContext appContext;

    // @Bean
    // public ViewResolver viewResolver() {
    // InternalResourceViewResolver bean = new InternalResourceViewResolver();
    // // bean.setViewClass(JstlView.class);
    // // bean.setPrefix("classpath:/web/templates/");
    // // bean.setSuffix(".html");
    // bean.setPrefix("classpath:/templates/");
    // bean.setSuffix(".html");
    //
    // return bean;
    // }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/login").setViewName("login");
    }

    // Change static resources paths
    /*
     * (non-Javadoc)
     * 
     * @see
     * org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
     * #addResourceHandlers(org.springframework.web.servlet.config.annotation.
     * ResourceHandlerRegistry)
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // registry.addResourceHandler("/assets/**").
        // addResourceLocations("classpath:/resources/web/assets/");
        registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/web/favicon.ico");
        registry.addResourceHandler("/css/**").addResourceLocations("classpath:/web/css/");
        registry.addResourceHandler("/images/**").addResourceLocations("classpath:/web/images/");
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/web/js/");
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/web/templates/");
        registry.addResourceHandler("/build/**").addResourceLocations("classpath:/web/build/");
        registry.addResourceHandler("/bower_components/**")
                .addResourceLocations("classpath:/web/bower_components/");
        registry.addResourceHandler("/partials/**").addResourceLocations("classpath:/web/partials/");
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/web/static/");
        registry.addResourceHandler("/unibot.html").addResourceLocations("classpath:/web/unibot.html");
    }

    // Thymeleaf templates path
    /**
     * @return Resource resolver bean
     */
    @Bean
    public SpringResourceResourceResolver getResourceResolver() {
        SpringResourceResourceResolver srrr = new SpringResourceResourceResolver();
        srrr.setApplicationContext(appContext);
        return srrr;
    }

    /**
     * @return Template resolver bean
     */
    @Bean
    public ITemplateResolver getTemplateResolver() {
        TemplateResolver resolver = new TemplateResolver();
        resolver.setCharacterEncoding("UTF-8");
        resolver.setResourceResolver(getResourceResolver());
        resolver.setPrefix("classpath:/web/templates/");
        // resolver.setPrefix("/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        return resolver;
    }

    /**
     * @return Template engine bean
     */
    @Bean
    public SpringTemplateEngine getTemplateEngine() {
        SpringTemplateEngine ste = new SpringTemplateEngine();
        ste.setTemplateResolver(getTemplateResolver());
        return ste;
    }

    // Views and View Resolvers in Thymeleaf
    /**
     * @return Thymeleaf view resolver bean
     */
    @Bean
    public ThymeleafViewResolver getThymeleafViewResolver() {
        ThymeleafViewResolver tvr = new ThymeleafViewResolver();
        tvr.setTemplateEngine(getTemplateEngine());
        tvr.setOrder(1);
        tvr.setViewNames(new String[] { "*.html", "*.xhtml" });
        return tvr;
    }

    // some static variables see thymeleaf docs
    /**
     * @return Overrided thymeleaf global view keys
     */
    @Bean
    public ThymeleafView getThymeleafView() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("copyright", "@2014 Xio4");
        ThymeleafView tv = new ThymeleafView() {
        };
        tv.setStaticVariables(map);
        return tv;
    }

    // i18n
    /**
     * @return locale resolver bean to set default locale
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

    /**
     * @return locale change interceptor for change language in request like
     *         hello.html?lang=en
     */
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
     * #addInterceptors(org.springframework.web.servlet.config.annotation.
     * InterceptorRegistry)
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

    // Path to messages.properties
    /**
     * @return message resource bean for set path i18n files
     */
    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath:/properties/messages", "classpath:/web/messages");
        // if true, the key of the message will be displayed if the key is not
        // found, instead of throwing a NoSuchMessageException
        messageSource.setUseCodeAsDefaultMessage(true);
        messageSource.setDefaultEncoding("UTF-8");
        // # -1 : never reload, 0 always reload
        messageSource.setCacheSeconds(0);
        return messageSource;
    }
}