1 19 20 package org.efs.openreports.dispatcher; 21 22 import java.io.File ; 23 import java.io.IOException ; 24 25 import javax.servlet.ServletConfig ; 26 import javax.servlet.ServletException ; 27 import javax.servlet.ServletOutputStream ; 28 import javax.servlet.http.HttpServlet ; 29 import javax.servlet.http.HttpServletRequest ; 30 import javax.servlet.http.HttpServletResponse ; 31 32 import org.apache.commons.io.FileUtils; 33 import org.apache.commons.lang.StringUtils; 34 import org.apache.log4j.Logger; 35 import org.efs.openreports.providers.DirectoryProvider; 36 import org.efs.openreports.providers.DirectoryProviderAware; 37 import org.efs.openreports.services.ReportService; 38 import org.efs.openreports.util.ORComponentManager; 39 import org.springframework.context.ApplicationContext; 40 import org.springframework.web.context.support.WebApplicationContextUtils; 41 42 43 44 50 51 public class ImageDispatcher extends HttpServlet implements DirectoryProviderAware 52 { 53 private static Logger log = Logger.getLogger(ImageDispatcher.class.getName()); 54 55 private DirectoryProvider directoryProvider; 56 57 private String imageDirectory; 58 private String imageTempDirectory; 59 60 public void init(ServletConfig servletConfig) throws ServletException  61 { 62 ORComponentManager.initializeObject(this); 63 64 if (directoryProvider == null) 66 { 67 ApplicationContext appContext = WebApplicationContextUtils 68 .getRequiredWebApplicationContext(servletConfig.getServletContext()); 69 70 directoryProvider = (DirectoryProvider) appContext.getBean("directoryProvider", ReportService.class); 71 } 72 73 imageDirectory = directoryProvider.getReportImageDirectory(); 74 imageTempDirectory = directoryProvider.getReportImageTempDirectory(); 75 76 super.init(servletConfig); 77 78 log.info("Started..."); 79 } 80 81 protected void service(HttpServletRequest request, HttpServletResponse response) 82 throws ServletException , IOException  83 { 84 String fileName = ""; 85 86 try 87 { 88 fileName = StringUtils.substringAfterLast(request.getRequestURI(), "/"); 89 90 File file = new File (imageDirectory + fileName); 91 if (!file.exists()) 92 { 93 file = new File (imageTempDirectory + fileName); 94 } 95 96 byte[] imageData = FileUtils.readFileToByteArray(file); 97 98 response.setContentLength(imageData.length); 99 ServletOutputStream ouputStream = response.getOutputStream(); 100 101 ouputStream.write(imageData, 0, imageData.length); 102 ouputStream.flush(); 103 ouputStream.close(); 104 } 105 catch (Exception e) 106 { 107 String message = "Image Not Found: " + fileName; 108 response.getOutputStream().write(message.getBytes()); 109 } 110 } 111 112 public void setDirectoryProvider(DirectoryProvider directoryProvider) 113 { 114 this.directoryProvider = directoryProvider; 115 } 116 } 117 | Popular Tags |