/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright 2008 Pentaho Corporation. All rights reserved.
*
* @created Oct 11, 2008
* @author Aaron Phillips
*
*/
package org.pentaho.platform.web.http.context;
import javax.servlet.ServletContext;
import org.pentaho.platform.engine.core.system.objfac.AbstractSpringPentahoObjectFactory;
import org.pentaho.platform.web.http.messages.Messages;
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* This factory implementation can be used in a web environment in which a Spring
* {@link WebApplicationContext} has already been created during initialization of
* the web application. WebSpringPentahoObjectFactory will delegate object creation
* and management to the Spring context. There is one exception to this rule: see
* {@link AbstractSpringPentahoObjectFactory} for more details.
* <p>
* The Spring bean factory supports the binding of objects to particular scopes. See Spring
* documentation for description of the scope types: singleton, prototype, session, and request.
* The latter two apply only in a web context.
*
* @author Aaron Phillips
* @see AbstractSpringPentahoObjectFactory
* @see http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes
*/
public class WebSpringPentahoObjectFactory extends AbstractSpringPentahoObjectFactory {
/**
* Initializes this object factory by setting the internal bean factory to the {@link WebApplicationContext}
* instance managed by Spring.
*
* @param configFile ignored for this implementation
* @param context the {@link ServletContext} under which this system is currently running. This
* is used to retrieve the Spring {@link WebApplicationContext}.
* @throws IllegalArgumentException if context is not the correct type, only ServletContext is accepted
*/
public void init(String configFile, Object context) {
if (!(context instanceof ServletContext)) {
String msg = Messages.getInstance().getErrorString("WebSpringPentahoObjectFactory.ERROR_0001_CONTEXT_NOT_SUPPORTED", //$NON-NLS-1$
ServletContext.class.getName(), context.getClass().getName());
throw new IllegalArgumentException(msg);
}
ServletContext servletContext = (ServletContext) context;
beanFactory = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
}
}