com.hp.autonomy.frontend.find.core.beanconfiguration.AppConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for com.hp.autonomy.frontend.find.core.beanconfiguration.AppConfiguration.java

Source

/*
 * Copyright 2015 Hewlett-Packard Development Company, L.P.
 * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
 */

package com.hp.autonomy.frontend.find.core.beanconfiguration;

import com.hp.autonomy.frontend.configuration.BaseConfigFileService;
import com.hp.autonomy.frontend.configuration.Config;
import com.hp.autonomy.frontend.configuration.ValidationService;
import com.hp.autonomy.frontend.configuration.ValidationServiceImpl;
import com.hp.autonomy.frontend.configuration.Validator;
import com.hp.autonomy.frontend.configuration.filter.ConfigEnvironmentVariableFilter;
import com.hp.autonomy.frontend.logging.ApplicationStartLogger;
import com.hp.autonomy.frontend.logging.UserLoggingFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.http.HttpStatus;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Collections;
import java.util.Locale;
import java.util.Set;

/**
 * Contains beans useful in all configurations
 */
@Configuration
@EnableJpaAuditing
@PropertySource("classpath:/version.properties")
public class AppConfiguration<C extends Config<C>> {
    public static final String APPLICATION_RELEASE_VERSION_PROPERTY = "${application.releaseVersion}";
    public static final String GIT_COMMIT_PROPERTY = "${application.commit}";

    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    private BaseConfigFileService<C> configService;

    @SuppressWarnings("FieldMayBeFinal")
    @Autowired(required = false)
    private Set<Validator<?>> validators = Collections.emptySet();

    @SuppressWarnings("ReturnOfInnerClass")
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {

        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(final ConfigurableEmbeddedServletContainer container) {

                final ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED,
                        DispatcherServletConfiguration.AUTHENTICATION_ERROR_PATH);
                final ErrorPage error403Page = new ErrorPage(HttpStatus.FORBIDDEN,
                        DispatcherServletConfiguration.AUTHENTICATION_ERROR_PATH);
                final ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND,
                        DispatcherServletConfiguration.NOT_FOUND_ERROR_PATH);
                final ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
                        DispatcherServletConfiguration.SERVER_ERROR_PATH);

                container.addErrorPages(error401Page, error403Page, error404Page, error500Page);
            }
        };
    }

    /**
     * This is needed to force Tomcat to interpret POST bodies as UTF-8 by default, otherwise it'll use ISO-8859-1,
     * since that's apparently what the servlet spec specifies,
     * It's required despite URIEncoding="UTF-8" on the connector since that only works on GET parameters.
     * Jetty doesn't have this problem, it seems to use UTF-8 as the default.
     */
    @Bean
    public CharacterEncodingFilter characterEncodingFilter() {
        final CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return characterEncodingFilter;
    }

    @Bean
    public FilterRegistrationBean userLoggingFilter() {
        final UserLoggingFilter userLoggingFilter = new UserLoggingFilter();
        userLoggingFilter.setUsePrincipal(true);

        final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(userLoggingFilter);
        filterRegistrationBean.addUrlPatterns("/api/*");

        return filterRegistrationBean;
    }

    @Bean
    public ApplicationStartLogger applicationStartLogger() {
        return new ApplicationStartLogger();
    }

    @Bean
    public LocaleResolver localeResolver() {
        final SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
        sessionLocaleResolver.setDefaultLocale(Locale.ENGLISH);

        return sessionLocaleResolver;
    }

    @Bean
    @Autowired
    public ValidationService<C> validationService() {
        final ValidationServiceImpl<C> validationService = new ValidationServiceImpl<>();

        validationService.setValidators(validators);

        // fix circular dependency
        configService.setValidationService(validationService);

        return validationService;
    }
}