KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openi > web > controller > admin > ProjectDownloadController


1 package org.openi.web.controller.admin;
2
3 import org.apache.log4j.Logger;
4
5 import org.openi.project.ProjectContext;
6
7 import org.springframework.web.servlet.ModelAndView;
8 import org.springframework.web.servlet.mvc.AbstractController;
9
10 import java.io.IOException JavaDoc;
11 import java.util.zip.ZipOutputStream JavaDoc;
12
13 import javax.activation.FileTypeMap JavaDoc;
14
15 import javax.servlet.http.HttpServletRequest JavaDoc;
16 import javax.servlet.http.HttpServletResponse JavaDoc;
17
18
19 /**
20  * Zips up the project contents and sends to the user:
21  * <li>Wraps the servlet output stream in a zip output stream.
22  * <li>Uses the current projectContext (from session) and calls zipProjectContents, sending the
23  * results directly to the servlet output stream
24  *
25  * @see org.openi.project.ProjectContext#zipProjectContents(ZipOutputStream)
26  *
27  */

28 public class ProjectDownloadController extends AbstractController {
29     private static Logger logger = Logger.getLogger(ProjectDownloadController.class);
30
31     public ProjectDownloadController() {
32         super();
33     }
34
35     protected ModelAndView handleRequestInternal(HttpServletRequest JavaDoc request,
36         HttpServletResponse JavaDoc response) throws Exception JavaDoc {
37         logger.debug("zipping up project, sending to servlet output stream");
38
39         ProjectContext context = (ProjectContext) request.getSession()
40                                                          .getAttribute("projectContext");
41
42         String JavaDoc filename = context.getProject().getProjectId() + ".zip";
43
44         // need to set response headers so browser handles properly:
45
// use jaf filetype map to get content type
46
// (might be overkill, but at least the type will be std):
47
FileTypeMap JavaDoc map = FileTypeMap.getDefaultFileTypeMap();
48         response.setContentType(map.getContentType(filename));
49         response.setHeader("Pragma", "no-cache");
50         response.setHeader("Content-Disposition",
51                 "attachement; filename=\"" + filename + "\"");
52
53         ZipOutputStream JavaDoc zos = new ZipOutputStream JavaDoc(response.getOutputStream());
54         try {
55             context.zipProjectContents(zos);
56         } catch(IOException JavaDoc ex) {
57             logger.error("An exception occured while zipping project content", ex);
58         }
59         zos.close();
60         zos = null;
61
62         return null;
63     }
64 }
65
Popular Tags