/**
 * Copyright 2000-2004 by CreamTec, LLC. All rights reserved.
 */
package creamtec.webcream.examples;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import creamtec.core.TraceMgr;
import creamtec.webcream.core.*;
import creamtec.webcream.RouterRequestFilter;
import creamtec.webcream.servlet.AppDesc;

/**
 * Demonstrates an implementation of RouterRequestFilter interface.
 * See documentation for more information.
 */
public class RouterRequestFilterExample
    implements RouterRequestFilter
{

    public RouterRequestFilterExample() {
        TraceMgr.trace(this, "Filter loaded");
    }

    public boolean preProcessRequest(HttpServletRequest request, HttpServletResponse response) {
        TraceMgr.trace(this, "Pre-processing request");
        // Nothing to do, so just return to continue processing
        return true;
    }

    public boolean postProcessRequest(HttpServletRequest request, HttpServletResponse response, AppDesc appDesc, ClientAgentRemote agent, HttpRequestData requestData)
        throws Exception
    {
        TraceMgr.trace(this, "Post-processing request");
        // Obtain client IP address from the HTTP request and save that information in
        // WebCream's request data
        String ipAddress = request.getRemoteAddr();
        TraceMgr.trace(this, "IP address = " + ipAddress, 6);
        requestData.getParams().put("custom.ip_address", ipAddress);
        return true;
    }

    public boolean processResponse(HttpServletRequest request, HttpServletResponse response, AppDesc appDesc, ClientAgentRemote agent, HttpRequestData requestData, HttpResponseData responseData)
        throws Exception
    {
        if (responseData != null && responseData.getHtmlPage() != null) {
            if (responseData.getHtmlPage().indexOf("<title>About WebCream</title>") != -1) {
                String page = responseData.getHtmlPage();
                StringBuffer buf = new StringBuffer(page.length() + 100);
                int endOfBodyIndex = page.indexOf("</body>");
                buf.append(page.substring(0, endOfBodyIndex));
                buf.append("<p><i>RouterRequestFilter</i>: Browser is ");
                buf.append(request.getHeader("User-Agent"));
                buf.append("</p>\r\n");
                buf.append(page.substring(endOfBodyIndex));
                responseData.setHtmlPage(buf.toString());
            }
        }
        return true;
    }

}
