001/** 
002 * Copyright (C) 2009 "Darwin V. Felix" <darwinfelix@users.sourceforge.net>
003 * 
004 * This library is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU Lesser General Public
006 * License as published by the Free Software Foundation; either
007 * version 2.1 of the License, or (at your option) any later version.
008 * 
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
012 * Lesser General Public License for more details.
013 * 
014 * You should have received a copy of the GNU Lesser General Public
015 * License along with this library; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017 */
018
019package net.sourceforge.spnego;
020
021import java.io.IOException;
022
023import javax.servlet.http.HttpServletResponse;
024import javax.servlet.http.HttpServletResponseWrapper;
025
026/**
027 * Class adds capability to track/determine if the HTTP Status 
028 * code has been set.
029 * 
030 * <p>
031 * Also allows the ability to set the content length to zero 
032 * and flush the buffer immediately after setting the HTTP 
033 * Status code.
034 * </p>
035 * 
036 * @author Darwin V. Felix
037 * 
038 */
039public final class SpnegoHttpServletResponse extends HttpServletResponseWrapper {
040
041    private transient boolean statusSet = false;
042
043    /**
044     * 
045     * @param response
046     */
047    public SpnegoHttpServletResponse(final HttpServletResponse response) {
048        super(response);
049    }
050
051    /**
052     * Tells if setStatus has been called.
053     * 
054     * @return true if HTTP Status code has been set
055     */
056    public boolean isStatusSet() {
057        return this.statusSet;
058    }
059
060    @Override
061    public void setStatus(final int status) {
062        super.setStatus(status);
063        this.statusSet = true;
064    }
065
066    /**
067     * Sets the HTTP Status Code and optionally set the the content 
068     * length to zero and flush the buffer.
069     * 
070     * @param status http status code
071     * @param immediate set to true to set content len to zero and flush
072     * @throws IOException 
073     * 
074     * @see #setStatus(int)
075     */
076    public void setStatus(final int status, final boolean immediate) throws IOException {
077        setStatus(status);
078        if (immediate) {
079            setContentLength(0);
080            flushBuffer();
081        }
082    }
083}