gzipresponsewrapper.java

### File Source: gzipresponsewrapper.java

             /*
        P/P   *  Method: net.sourceforge.pebble.web.filter.GZIPResponseWrapper__static_init
              */
         1  /*
         2   * Copyright (c) 2003-2006, Simon Brown
         3   * All rights reserved.
         4   *
         5   * Redistribution and use in source and binary forms, with or without
         6   * modification, are permitted provided that the following conditions are met:
         7   *
         8   *   - Redistributions of source code must retain the above copyright
         9   *     notice, this list of conditions and the following disclaimer.
        10   *
        11   *   - Redistributions in binary form must reproduce the above copyright
        12   *     notice, this list of conditions and the following disclaimer in
        13   *     the documentation and/or other materials provided with the
        14   *     distribution.
        15   *
        16   *   - Neither the name of Pebble nor the names of its contributors may
        17   *     be used to endorse or promote products derived from this software
        18   *     without specific prior written permission.
        19   *
        20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
        24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        30   * POSSIBILITY OF SUCH DAMAGE.
        31   */
        32  package net.sourceforge.pebble.web.filter;
        33
        34  import javax.servlet.ServletOutputStream;
        35  import javax.servlet.http.HttpServletResponse;
        36  import javax.servlet.http.HttpServletResponseWrapper;
        37  import java.io.IOException;
        38  import java.io.OutputStreamWriter;
        39  import java.io.PrintWriter;
        40
        41  public class GZIPResponseWrapper extends HttpServletResponseWrapper {
        42
        43    protected HttpServletResponse wrappedResponse = null;
        44    protected ServletOutputStream stream = null;
        45    protected PrintWriter writer = null;
        46
        47    public GZIPResponseWrapper(HttpServletResponse response) {
                 /*
        P/P       *  Method: void net.sourceforge.pebble.web.filter.GZIPResponseWrapper(HttpServletResponse)
                  *
                  *  Postconditions:
                  *    this.stream == null
                  *    this.writer == null
                  *    this.wrappedResponse == response
                  *    init'ed(this.wrappedResponse)
                  */
        48      super(response);
        49      wrappedResponse = response;
        50    }
        51
        52    public ServletOutputStream createOutputStream() throws IOException {
                 /*
        P/P       *  Method: ServletOutputStream createOutputStream()
                  *
                  *  Preconditions:
                  *    this.wrappedResponse != null
                  *
                  *  Postconditions:
                  *    return_value == &new GZIPResponseStream(createOutputStream#1)
                  *    new ByteArrayOutputStream(GZIPResponseStream#1) num objects == 1
                  *    new GZIPOutputStream(GZIPResponseStream#2) num objects == 1
                  *    new GZIPResponseStream(createOutputStream#1) num objects == 1
                  *    return_value.baos == &new ByteArrayOutputStream(GZIPResponseStream#1)
                  *    return_value.closed == 0
                  *    return_value.gzipstream == &new GZIPOutputStream(GZIPResponseStream#2)
                  *    init'ed(return_value.output)
                  *    return_value.response == this.wrappedResponse
                  *    return_value.response != null
                  */
        53      return (new GZIPResponseStream(wrappedResponse));
        54    }
        55
        56    public void finishResponse() {
        57      try {
        58        if (writer != null) {
        59          writer.close();
        60        } else {
                     /*
        P/P           *  Method: void finishResponse()
                      *
                      *  Preconditions:
                      *    (soft) init'ed(this.stream)
                      *    (soft) init'ed(this.writer)
                      *
                      *  Test Vectors:
                      *    this.stream: Addr_Set{null}, Inverse{null}
                      *    this.writer: Addr_Set{null}, Inverse{null}
                      */
        61          if (stream != null) {
        62            stream.close();
        63          }
        64        }
        65      } catch (IOException e) {
        66      }
        67    }
        68
        69    public void flushBuffer() throws IOException {
            	 /*
        P/P 	  *  Method: void flushBuffer()
            	  *
            	  *  Preconditions:
            	  *    init'ed(this.stream)
            	  *
            	  *  Test Vectors:
            	  *    this.stream: Addr_Set{null}, Inverse{null}
            	  */
        70  	if (stream != null) {
        71  	  stream.flush();
        72  	}
        73    }
        74
        75    public ServletOutputStream getOutputStream() throws IOException {
                 /*
        P/P       *  Method: ServletOutputStream getOutputStream()
                  *
                  *  Preconditions:
                  *    init'ed(this.stream)
                  *    this.writer == null
                  *    (soft) this.wrappedResponse != null
                  *
                  *  Postconditions:
                  *    return_value == One-of{old this.stream, &new GZIPResponseStream(createOutputStream#1)}
                  *    return_value != null
                  *    this.stream == return_value
                  *    new ByteArrayOutputStream(GZIPResponseStream#1) num objects <= 1
                  *    new GZIPOutputStream(GZIPResponseStream#2) num objects <= 1
                  *    new GZIPResponseStream(createOutputStream#1) num objects <= 1
                  *    new GZIPResponseStream(createOutputStream#1).baos == &new ByteArrayOutputStream(GZIPResponseStream#1)
                  *    new GZIPResponseStream(createOutputStream#1).closed == 0
                  *    new GZIPResponseStream(createOutputStream#1).gzipstream == &new GZIPOutputStream(GZIPResponseStream#2)
                  *    init'ed(new GZIPResponseStream(createOutputStream#1).output)
                  *    ...
                  *
                  *  Test Vectors:
                  *    this.stream: Inverse{null}, Addr_Set{null}
                  */
        76      if (writer != null) {
        77        throw new IllegalStateException("getWriter() has already been called!");
        78      }
        79
        80      if (stream == null)
        81        stream = createOutputStream();
        82      return (stream);
        83    }
        84
        85    public PrintWriter getWriter() throws IOException {
        86      if (writer != null) {
        87        return (writer);
        88      }
        89
                 /*
        P/P       *  Method: PrintWriter getWriter()
                  *
                  *  Preconditions:
                  *    init'ed(this.writer)
                  *    (soft) this.stream == null
                  *    (soft) this.wrappedResponse != null
                  *
                  *  Postconditions:
                  *    return_value == One-of{old this.writer, &new PrintWriter(getWriter#1)}
                  *    return_value != null
                  *    this.stream == One-of{old this.stream, &new GZIPResponseStream(createOutputStream#1)}
                  *    (soft) this.stream in Addr_Set{null,&new GZIPResponseStream(createOutputStream#1)}
                  *    this.writer == One-of{old this.writer, &new PrintWriter(getWriter#1)}
                  *    this.writer != null
                  *    new ByteArrayOutputStream(GZIPResponseStream#1) num objects <= 1
                  *    new GZIPOutputStream(GZIPResponseStream#2) num objects <= 1
                  *    new GZIPResponseStream(createOutputStream#1) num objects <= 1
                  *    new GZIPResponseStream(createOutputStream#1).baos == &new ByteArrayOutputStream(GZIPResponseStream#1)
                  *    ...
                  *
                  *  Test Vectors:
                  *    this.writer: Addr_Set{null}, Inverse{null}
                  */
        90      if (stream != null) {
        91        throw new IllegalStateException("getOutputStream() has already been called!");
        92      }
        93
        94      stream = createOutputStream();
        95      writer = new PrintWriter(new OutputStreamWriter(stream, "UTF-8"));
        96      return (writer);
        97    }
        98
               /*
        P/P     *  Method: void setContentLength(int)
                */
        99    public void setContentLength(int length) {
       100    }
       101
       102  }

SofCheck Inspector Build Version : 2.22510

gzipresponsewrapper.java | 2010-Jun-25 19:40:32
gzipresponsewrapper.class | 2010-Jul-19 20:23:38