1 20 package org.openi.web.controller; 21 22 import java.io.BufferedInputStream ; 23 import java.io.BufferedOutputStream ; 24 import java.io.File ; 25 import java.io.FileInputStream ; 26 import java.io.FileNotFoundException ; 27 import java.io.IOException ; 28 import java.io.InputStream ; 29 import java.io.OutputStream ; 30 import java.util.HashMap ; 31 import java.util.Map ; 32 33 import javax.servlet.http.HttpServletRequest ; 34 import javax.servlet.http.HttpServletResponse ; 35 import javax.servlet.http.HttpSession ; 36 37 import org.apache.log4j.Logger; 38 import org.openi.project.ProjectContext; 39 import org.springframework.web.servlet.ModelAndView; 40 import org.springframework.web.servlet.mvc.AbstractController; 41 42 43 51 public class ProjectContentController extends AbstractController { 52 private static Logger logger = Logger.getLogger(ProjectContentController.class); 53 54 62 protected ModelAndView handleRequestInternal(HttpServletRequest request, 63 HttpServletResponse response) throws Exception { 64 String contentUrl = ""; 65 66 Map model; 67 HttpSession session; 68 69 try { 70 model = new HashMap (); 71 72 session = request.getSession(); 73 74 String content = request.getParameter("content"); 75 76 ProjectContext projectContext; 78 projectContext = (ProjectContext) session.getAttribute( 79 "projectContext"); 80 81 if (content != null) { 85 if (content.endsWith(".drillthrough")) { 86 String filePath = projectContext.getProjectDirectory() 87 + "/" + content; 88 writeToOutputStream(filePath, response); 89 90 return null; 91 } else { 92 contentUrl = "../" + request.getContextPath() 94 + "-projects/" 95 + projectContext.getProject().getProjectId(); 96 97 contentUrl = contentUrl + "/" + content; 98 } 99 } 100 101 model.put("content", contentUrl); 102 103 return new ModelAndView("projectContentView", "model", model); 104 } catch (Exception e) { 105 logger.error("Exception:", e); 106 throw e; 107 } 108 } 109 110 113 private void writeToOutputStream(String srcFile, 114 HttpServletResponse response) throws Exception { 115 logger.info("writing file '" + srcFile + "' to response outputstream"); 116 117 File file = new File (srcFile); 118 119 if (file.getName().startsWith("still-retrieving-")) { 121 logger.warn("RDBMS processing is not completed yet"); 122 123 return; 124 } 125 126 FileInputStream inFile = null; 127 128 try { 129 inFile = new FileInputStream (file); 130 } catch (FileNotFoundException ex1) { 131 throw ex1; 132 } 133 134 response.setContentLength((int) file.length()); 135 response.setContentType("text/plain"); 136 response.setHeader("Pragma", "no-cache"); 137 response.setHeader("Content-Disposition", 138 "attachment; filename=\"" + file.getName() + "\""); 139 140 InputStream in = null; 141 in = new BufferedInputStream (inFile); 142 143 OutputStream out = new BufferedOutputStream (response.getOutputStream()); 144 byte[] array = new byte[1024]; 145 int i = 0; 146 147 try { 148 while ((i = in.read(array, 0, array.length)) != -1) { 149 try { 150 out.write(array, 0, i); 151 } catch (IOException ex) { 152 break; 154 } 155 } 156 } catch (IOException ex2) { 157 throw ex2; 158 } finally { 159 try { 160 if (in != null) { 161 in.close(); 162 } 163 164 if (inFile != null) { 165 inFile.close(); 166 } 167 168 out.close(); 170 } catch (Exception ex) { 171 logger.warn(ex.getMessage(), ex); 172 } 173 } 174 } 175 } 176 | Popular Tags |