1 21 package com.jaspersoft.jasperserver.war.control; 22 23 import java.io.InputStream ; 24 import java.io.OutputStream ; 25 import java.util.Map ; 26 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpServletResponse ; 29 30 import org.springframework.web.servlet.view.AbstractView; 31 32 import com.jaspersoft.jasperserver.api.JSException; 33 import com.jaspersoft.jasperserver.api.metadata.common.domain.ContentResource; 34 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService; 35 import com.jaspersoft.jasperserver.api.metadata.common.domain.FileResourceData; 36 37 public class ContentRepositoryFileView extends AbstractView 38 { 39 public static final String REPOSITORY_PATH = "repositoryPath"; 40 41 RepositoryService repository; 42 43 public ContentRepositoryFileView(RepositoryService repository) 44 { 45 this.repository = repository; 46 } 47 48 49 protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) throws Exception 50 { 51 String pathinfo = request.getPathInfo(); 52 int start = pathinfo.indexOf('/', 1); 53 String repoPath = pathinfo.substring(start, pathinfo.length()); 54 55 if (repoPath == null || repoPath.length() == 0) 56 return; 57 58 OutputStream out = response.getOutputStream(); 59 60 ContentResource file = (ContentResource) repository.getResource(null, repoPath); 61 String fileType = file.getFileType(); 62 63 if (fileType == null) 64 throw new JSException("Undefined file type"); 65 66 FileResourceData fileData = repository.getContentResourceData(null, repoPath); 67 68 if (fileType.equals(ContentResource.TYPE_PDF)) { 69 response.setContentType("application/pdf"); 70 } 71 else if (fileType.equals(ContentResource.TYPE_XLS)) { 72 response.setContentType("application/xls"); 73 response.setHeader("Content-Disposition", "inline; filename=\"file.xls\""); 74 } else if (fileType.equals(ContentResource.TYPE_RTF)) { 75 response.setContentType("application/rtf"); 76 } 77 78 response.setContentLength(fileData.getData().length); 79 80 InputStream in = fileData.getDataStream(); 81 82 byte[] b = new byte[1024]; 83 while (in.read(b) != -1) { 84 out.write(b); 85 } 86 87 out.flush(); 88 89 } 90 } 91 | Popular Tags |