ch.ralscha.extdirectspring.controller.ConfigurationService.java Source code

Java tutorial

Introduction

Here is the source code for ch.ralscha.extdirectspring.controller.ConfigurationService.java

Source

/**
 * Copyright 2010-2014 Ralph Schaer <ralphschaer@gmail.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ch.ralscha.extdirectspring.controller;

import java.util.Collection;
import java.util.Map;
import java.util.concurrent.Executors;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.convert.ConversionService;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.format.support.FormattingConversionService;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.support.WebArgumentResolver;

import ch.ralscha.extdirectspring.util.JsonHandler;
import ch.ralscha.extdirectspring.util.ParametersResolver;

@Service
public class ConfigurationService implements InitializingBean, DisposableBean {

    @Autowired
    private ApplicationContext context;

    @Autowired(required = false)
    private Configuration configuration;

    @Autowired(required = false)
    private JsonHandler jsonHandler;

    @Autowired(required = false)
    private RouterExceptionHandler routerExceptionHandler;

    private ParametersResolver parametersResolver;

    @Override
    public void afterPropertiesSet() {

        if (configuration == null) {
            configuration = new Configuration();
        }

        if (configuration.getJsonHandler() != null) {
            jsonHandler = configuration.getJsonHandler();
        }

        if (jsonHandler == null) {
            jsonHandler = new JsonHandler();
        }

        if (routerExceptionHandler == null) {
            routerExceptionHandler = new DefaultRouterExceptionHandler(this);
        }

        if (configuration.getBatchedMethodsExecutionPolicy() == BatchedMethodsExecutionPolicy.CONCURRENT
                && configuration.getBatchedMethodsExecutorService() == null) {
            configuration.setBatchedMethodsExecutorService(Executors.newFixedThreadPool(5));
        }

        if (configuration.getConversionService() == null) {
            Map<String, ConversionService> conversionServices = context.getBeansOfType(ConversionService.class);
            if (conversionServices.isEmpty()) {
                configuration.setConversionService(new DefaultFormattingConversionService());
            } else if (conversionServices.size() == 1) {
                configuration.setConversionService(conversionServices.values().iterator().next());
            } else {
                if (conversionServices.containsKey("mvcConversionService")) {
                    configuration.setConversionService(conversionServices.get("mvcConversionService"));
                } else {
                    for (ConversionService conversionService : conversionServices.values()) {
                        if (conversionService instanceof FormattingConversionService) {
                            configuration.setConversionService(conversionService);
                            break;
                        }
                    }
                    if (configuration.getConversionService() == null) {
                        configuration.setConversionService(conversionServices.values().iterator().next());
                    }
                }
            }
        }

        Collection<WebArgumentResolver> webResolvers = context.getBeansOfType(WebArgumentResolver.class).values();
        parametersResolver = new ParametersResolver(configuration.getConversionService(), jsonHandler,
                webResolvers);
    }

    @Override
    public void destroy() throws Exception {
        if (configuration.getBatchedMethodsExecutorService() != null) {
            configuration.getBatchedMethodsExecutorService().shutdown();
        }
    }

    public Configuration getConfiguration() {
        return configuration;
    }

    public JsonHandler getJsonHandler() {
        return jsonHandler;
    }

    public ApplicationContext getApplicationContext() {
        return context;
    }

    public ParametersResolver getParametersResolver() {
        return parametersResolver;
    }

    public RouterExceptionHandler getRouterExceptionHandler() {
        return routerExceptionHandler;
    }

}