com.goodhuddle.huddle.HuddleWebConfig.java Source code

Java tutorial

Introduction

Here is the source code for com.goodhuddle.huddle.HuddleWebConfig.java

Source

/*
 * (C) Copyright ${year} Nuxeo SA (http://nuxeo.com/) and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser General Public License
 * (LGPL) version 2.1 which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl-2.1.html
 *
 * This library 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
 * Lesser General Public License for more details.
 */

package com.goodhuddle.huddle;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.joda.JodaModule;
import com.goodhuddle.huddle.service.HuddleService;
import com.goodhuddle.huddle.service.impl.security.SecurityHelper;
import com.goodhuddle.huddle.web.HuddleGlobalInterceptor;
import com.goodhuddle.huddle.web.site.handlebars.HuddleViewResolver;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.ViewResolver;
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 javax.servlet.MultipartConfigElement;

@Configuration
public class HuddleWebConfig extends WebMvcConfigurerAdapter {

    private static final Logger log = LoggerFactory.getLogger(HuddleWebConfig.class);

    @Value("${goodhuddle.admin.root:}")
    public String adminRoot;

    @Autowired
    private HuddleService huddleService;

    @Autowired
    private HuddleViewResolver huddleViewResolver;

    @Autowired
    private SecurityHelper securityHelper;

    @Bean
    public ViewResolver viewResolver() {
        return huddleViewResolver;
    }

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("20MB");
        factory.setMaxRequestSize("20MB");
        return factory.createMultipartConfig();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (StringUtils.isNotBlank(adminRoot)) {
            log.info("Setting document root for Admin UI to: {}", adminRoot);
            registry.addResourceHandler("/admin/**").addResourceLocations(adminRoot);
        }
    }

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

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HuddleGlobalInterceptor interceptor = new HuddleGlobalInterceptor(huddleService, securityHelper);
        registry.addInterceptor(interceptor).addPathPatterns("/**");
    }

    @Bean
    @Primary
    public MappingJackson2HttpMessageConverter jacksonConvertor() {
        MappingJackson2HttpMessageConverter convertor = new MappingJackson2HttpMessageConverter();
        convertor.setObjectMapper(objectMapper());
        return convertor;
    }

    private ObjectMapper objectMapper() {

        Jackson2ObjectMapperFactoryBean bean = new Jackson2ObjectMapperFactoryBean();

        bean.setIndentOutput(true);
        bean.setSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
        bean.afterPropertiesSet();

        ObjectMapper objectMapper = bean.getObject();
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        objectMapper.registerModule(new JodaModule());

        return objectMapper;
    }
}