zipview.java

### File Source: zipview.java

             /*
        P/P   *  Method: net.sourceforge.pebble.web.view.ZipView__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.view;
        33
        34  import net.sourceforge.pebble.domain.FileMetaData;
        35
             /*
        P/P   *  Method: void net.sourceforge.pebble.web.view.ZipView(List, String)
              *
              *  Postconditions:
              *    this.filename == filename
              *    init'ed(this.filename)
              *    this.files == files
              *    init'ed(this.files)
              */
        36  import javax.servlet.ServletContext;
        37  import javax.servlet.ServletException;
        38  import javax.servlet.http.HttpServletRequest;
        39  import javax.servlet.http.HttpServletResponse;
        40  import java.io.BufferedOutputStream;
        41  import java.io.FileInputStream;
        42  import java.io.IOException;
        43  import java.util.Iterator;
        44  import java.util.List;
        45  import java.util.zip.ZipEntry;
        46  import java.util.zip.ZipOutputStream;
        47
        48  /**
        49   * Represents a binary view component and prepares the model for display.
        50   *
        51   * @author    Simon Brown
        52   */
        53  public class ZipView extends BinaryView {
        54
        55    private List files;
        56    private String filename;
        57
        58    public ZipView(List files, String filename) {
        59      this.files = files;
        60      this.filename = filename;
        61    }
        62
        63    /**
        64     * Gets the title of this view.
        65     *
        66     * @return the title as a String
        67     */
               /*
        P/P     *  Method: String getContentType()
                *
                *  Postconditions:
                *    return_value == &"application.zip"
                */
        68    public String getContentType() {
        69      return "application/zip";
        70    }
        71
               /*
        P/P     *  Method: long getContentLength()
                *
                *  Postconditions:
                *    return_value == 0
                */
        72    public long getContentLength() {
        73      return 0;
        74    }
        75
        76    /**
        77     * Dispatches this view.
        78     *
        79     * @param request  the HttpServletRequest instance
        80     * @param response the HttpServletResponse instance
        81     * @param context
        82     */
        83    public void dispatch(HttpServletRequest request, HttpServletResponse response, ServletContext context) throws ServletException {
        84      try {
                   /*
        P/P         *  Method: void dispatch(HttpServletRequest, HttpServletResponse, ServletContext)
                    *
                    *  Preconditions:
                    *    response != null
                    *    init'ed(this.filename)
                    *    this.files != null
                    *
                    *  Presumptions:
                    *    java.util.Iterator:next(...)@90 != null
                    *    net.sourceforge.pebble.domain.FileMetaData:getAbsolutePath(...)@96 != null
                    *
                    *  Test Vectors:
                    *    java.io.FileInputStream:read(...)@98: {1..232-1}, {-231..0}
                    *    java.util.Iterator:hasNext(...)@89: {1}, {0}
                    *    net.sourceforge.pebble.domain.FileMetaData:isDirectory(...)@91: {0}, {1}
                    */
        85        response.setHeader("Content-Disposition", "filename=" + filename);
        86        byte[] buf = new byte[1024];
        87        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
        88        Iterator it = files.iterator();
        89        while (it.hasNext()) {
        90          FileMetaData file = (FileMetaData)it.next();
        91          if (file.isDirectory()) {
        92            continue;
        93          }
        94
        95          FileInputStream in = new FileInputStream(file.getFile());
        96          out.putNextEntry(new ZipEntry(file.getAbsolutePath().substring(1)));
        97          int len;
        98          while ((len = in.read(buf)) > 0) {
        99            out.write(buf, 0, len);
       100          }
       101          out.closeEntry();
       102          in.close();
       103        }
       104
       105        out.close();
       106      } catch (IOException ioe) {
       107        throw new ServletException(ioe);
       108      }
       109    }
       110
       111  }

SofCheck Inspector Build Version : 2.22510

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