/*
 * Response.java
 *
 * Created on 10 June 2002, 10:12
 */

package org.bodington.servlet;

import javax.servlet.http.*;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.Locale;
import java.util.Date;


/**
 *
 * @author  bmb6jrm
 * @version
 */
public class Response extends javax.servlet.http.HttpServletResponseWrapper
{
    
    HttpServletResponse wrapped_response;
    
    String html_body_class=null;

    /**
     * The date format we will use for creating date headers.
     * see setDateHeader method.
     * Locale US is one of many locales that would work OK.
     * It's only relevance is the spelling of day and month names
     */
    protected final SimpleDateFormat format =
        new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz",Locale.US);

    
    /** Creates new Response */
    public Response( HttpServletResponse response )
    {
	super( response );
	wrapped_response = response;
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
    }

    
    public void setHtmlBodyClass( String s )
    {
	html_body_class = s;
    }
    
    public String getHtmlBodyClass()
    {
	return html_body_class;
    }
    
    /** Set appropriate headers in response to prevent caching of the page. */
    public void disableCaching()
    {
	// for HTTP 1.1
	setHeader( "Cache-Control", "no-cache" );
	
	// for HTTP 1.0
	setHeader( "Pragma", "no-cache" );
    }

    
    /**
     * Add the specified date header to the specified value.
     * See setDateHeader for explanation of why this method is here.
     *
     * @param name Name of the header to set
     * @param value Date value to be set
     */
    public void addDateHeader(String name, long value)
    {
        if (wrapped_response.isCommitted())
            return;

        wrapped_response.addHeader(name, format.format(new Date(value)));

    }

    /**
     * Set the specified date header to the specified value.
     * This has been added into wrapper because the iPlanet
     * implementation of HttpServletResponse gets it wrong
     * by putting local time into the header although HTTP
     * requires GMT time.
     *
     * @param name Name of the header to set
     * @param value Date value to be set
     */
    public void setDateHeader(String name, long value)
    {
        if ( wrapped_response.isCommitted() )
            return;

        wrapped_response.setHeader(name, format.format(new Date(value)));
    }


}
