All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.caelum.vraptor.config.BasicConfiguration Maven / Gradle / Ivy

/***
 * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource
 * All rights reserved.
 *
 * 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 br.com.caelum.vraptor.config;

import java.lang.reflect.InvocationTargetException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import br.com.caelum.vraptor.ioc.ContainerProvider;
import br.com.caelum.vraptor.ioc.guice.GuiceProvider;
import br.com.caelum.vraptor.ioc.pico.PicoProvider;
import br.com.caelum.vraptor.ioc.spring.MissingConfigurationException;
import br.com.caelum.vraptor.ioc.spring.SpringProvider;

/**
 * VRaptors servlet context init parameter configuration reader.
 *
 * @author Guilherme Silveira
 */
public class BasicConfiguration {

	private static final Logger logger = LoggerFactory.getLogger(BasicConfiguration.class);

	/**
	 * context parameter that represents the class of IoC provider
	 */
	public static final String CONTAINER_PROVIDER = "br.com.caelum.vraptor.provider";

	/**
	 * context parameter that represents application character encoding
	 */
	public static final String ENCODING = "br.com.caelum.vraptor.encoding";

	/**
	 * context parameter that represents the base package(s) of your application
	 */
	public static final String BASE_PACKAGES_PARAMETER_NAME = "br.com.caelum.vraptor.packages";

	/**
	 * Disables/enables classpath scanning
	 */
	public static final String SCANNING_PARAM = "br.com.caelum.vraptor.scanning";

	private final ServletContext servletContext;

	public BasicConfiguration(ServletContext servletContext) {
		this.servletContext = servletContext;
	}

	public ContainerProvider getProvider() throws ServletException {
		Class providerType = getProviderType();
		logger.info("Using {} as Container Provider", providerType);
		try {
			return providerType.getDeclaredConstructor().newInstance();
		} catch (InvocationTargetException e) {
			throw new ServletException(e.getCause());
		} catch (Exception e) {
			throw new ServletException(e);
		}
	}

	private Class getProviderType() {
		String provider = servletContext.getInitParameter(CONTAINER_PROVIDER);
		if (provider != null) {
			try {
				return (Class) Class.forName(provider);
			} catch (ClassNotFoundException e) {
				throw new IllegalArgumentException("You must configure a class that exists on the "
						+ CONTAINER_PROVIDER + " context param.", e);
			}
		}
		if (classExists("org.springframework.context.ApplicationContext")) {
			return SpringProvider.class;
		}
		if (classExists("com.google.inject.Guice")) {
			return GuiceProvider.class;
		}

		if (classExists("org.picocontainer.PicoContainer")) {
			return PicoProvider.class;
		}
		throw new IllegalArgumentException("You don't have any DI container jars on your classpath. " +
				"You can find them on vraptor-3.x.x.zip, so you must put one of the " +
				"lib/containers/ jars on your classpath, where  is your preferred container.");
	}

	protected boolean classExists(String className) {
		try {
			Class.forName(className);
			return true;
		} catch (ClassNotFoundException e) {
			return false;
		}
	}

	public boolean hasBasePackages() {
		return servletContext.getInitParameter(BasicConfiguration.BASE_PACKAGES_PARAMETER_NAME) != null;
	}

	public String[] getBasePackages() {
		String packages = servletContext.getInitParameter(BasicConfiguration.BASE_PACKAGES_PARAMETER_NAME);
		if (packages == null) {
			throw new MissingConfigurationException(BasicConfiguration.BASE_PACKAGES_PARAMETER_NAME
					+ " context-param not found in web.xml. Set this parameter with your base package");
		}
		return packages.trim().split(",\\s*");
	}

	public String getEncoding() {
		return servletContext.getInitParameter(ENCODING);
	}

	public String getWebinfClassesDirectory() {
		return servletContext.getRealPath("/WEB-INF/classes/");
	}

	public ServletContext getServletContext() {
		return servletContext;
	}

	public boolean isClasspathScanningEnabled() {
		String scanningParam = servletContext.getInitParameter(SCANNING_PARAM);
		logger.info("{} = {}", SCANNING_PARAM, servletContext.getInitParameter(SCANNING_PARAM));
		return scanningParam == null || !scanningParam.trim().equals("disabled");
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy