/*******************************************************************************
* Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package com.w4t.engine;
import java.io.File;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileUpload;
import org.eclipse.rwt.internal.*;
import org.eclipse.rwt.internal.engine.RWTDelegate;
import org.eclipse.rwt.internal.service.LifeCycleServiceHandler;
import org.eclipse.rwt.internal.service.ServiceManager;
import com.w4t.engine.requests.FileUploadRequest;
import com.w4t.engine.service.DispatchHandler;
import com.w4t.engine.service.LifeCycleRunner;
import com.w4t.util.image.ImageCache;
/** <p>The Delegate servlet of the W4T plattform handles HTTP requests and
* provides the W4TModel with the corresponding HTTP session.</p>
*
* <p>It uses a reference to the W4TModel, which is placed in the session,
* to create the page content. The W4TModel is initialized by the
* Delegate.</p>
*/
public class W4TDelegate extends RWTDelegate {
private static final long serialVersionUID = 1L;
private RegistrySkimmer registrySkimmer;
/** Initialize global variables */
public void init( final ServletConfig config ) throws ServletException {
super.init( config );
ServiceManager.setHandler( new DispatchHandler() );
LifeCycleServiceHandler.lifeCycleRunner = new LifeCycleRunner();
try {
createImageCacheInstance();
} catch( Exception e ) {
throw new ServletException( e );
}
startRegistrySkimmer();
}
/** <p>do the cleanup.</p> */
public void destroy() {
RegistrySkimmer.shutdown();
super.destroy();
}
/**
* Process the HTTP Post request
* @param request encapsulates the information of a http request
* from a client browser
* @param response encapsulates the information of a http response
* to a client browser
* @throw IOException error accessing the response output stream
* @throw ServletException
*/
public String getServletInfo() {
return "com.w4t.engine.W4TDelegate Information";
}
// helping methods
//////////////////
private void startRegistrySkimmer() {
registrySkimmer = new RegistrySkimmer();
registrySkimmer.setDaemon( true );
registrySkimmer.start();
}
private void createImageCacheInstance() throws Exception {
String nsSubmitters = getInitializationProps().getNoscriptSubmitters();
ImageCache.createInstance( getWebAppBase().toString(), nsSubmitters );
}
private File getWebAppBase() {
IEngineConfig engineConfig = ConfigurationReader.getEngineConfig();
return engineConfig.getServerContextDir();
}
private IInitialization getInitializationProps() {
return ConfigurationReader.getConfiguration().getInitialization();
}
/** This method detects if the request is multipart or not. In both cases it
* returns a request transparent to the developer. This means you can use the
* same getters and setter for different types of requests. */
protected HttpServletRequest getWrappedRequest( final HttpServletRequest req )
throws ServletException
{
HttpServletRequest result = req;
if( FileUpload.isMultipartContent( req ) ) {
result = new FileUploadRequest( req );
}
return result;
}
}