com.w4t.engine.W4TDelegate.java Source code

Java tutorial

Introduction

Here is the source code for com.w4t.engine.W4TDelegate.java

Source

/*******************************************************************************
 * 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;
    }
}