1 19 20 package za.org.coefficient.servlet; 21 22 import za.org.coefficient.authentication.CoefficientUser; 23 import za.org.coefficient.core.CoefficientWebContext; 24 import za.org.coefficient.interfaces.CoefficientContext; 25 import za.org.coefficient.util.common.FileDownloadData; 26 import za.org.coefficient.util.common.InvokerFactory; 27 28 import java.io.IOException ; 29 import java.io.PrintWriter ; 30 31 import java.util.HashMap ; 32 import java.util.Map ; 33 34 import javax.servlet.ServletException ; 35 import javax.servlet.http.HttpServlet ; 36 import javax.servlet.http.HttpServletRequest ; 37 import javax.servlet.http.HttpServletResponse ; 38 39 53 public class GenericDownloadServlet extends HttpServlet { 54 55 static private Map fileProviders = new HashMap (); 56 57 64 static public void addProvider (String provider, String module, String method) { 65 fileProviders.put(provider, new Provider(module,method)); 66 } 67 68 70 73 protected void doGet(HttpServletRequest request, 74 HttpServletResponse response) throws ServletException , IOException { 75 76 String providerName = request.getParameter("provider"); 77 78 if (providerName == null) { 79 sendError (response,"File provider not specified."); 80 return; 81 } 82 83 Provider provider = (Provider)this.fileProviders.get(providerName); 84 85 if (provider == null) { 86 sendError (response,"Provider does not exist: "+providerName); 87 return; 88 } 89 90 CoefficientWebContext webContext = 91 new CoefficientWebContext(request,response); 92 93 try { 94 FileDownloadData fileDownloadData = (FileDownloadData)InvokerFactory. 95 getRemoteInvoker().invokeOpOnModule(provider.getModule(), 96 provider.getMethod(), 97 webContext); 98 99 if (fileDownloadData == null) { 100 sendError(response,"Provider Error: No FileData Object"); 101 return; 102 } else if (fileDownloadData.getBytes() == null) { 103 sendError(response,"Provider Error: No File Content"); 104 return; 105 } else if (fileDownloadData.getFilename() == null) { 106 sendError(response,"Provider Error: No File Name"); 107 return; 108 } 109 110 response.setHeader("Content-disposition", "attachment; filename=" 111 + fileDownloadData.getFilename()); 112 response.setContentType(fileDownloadData.getMimeType()); 113 response.setContentLength(fileDownloadData.getBytes().length); 114 response.getOutputStream() 115 .write(fileDownloadData.getBytes()); 116 response.flushBuffer(); 117 } catch (Exception e) { 118 e.printStackTrace(); 119 sendError(response,"Download Error: "+e); 120 } 121 webContext.synchronize(request, response); 122 } 123 124 131 protected void doPost(HttpServletRequest request, 132 HttpServletResponse response) throws ServletException , IOException { 133 doGet(request, response); 134 } 135 136 141 private void sendError(HttpServletResponse response, String error) { 142 response.setContentType("text/html"); 143 try { 144 PrintWriter writer = response.getWriter(); 145 writer.println(error); 146 writer.flush(); 147 } catch (IOException e) { 148 e.printStackTrace(); 149 } 150 } 151 152 159 static public class Provider { 160 private String module; 161 private String method; 162 163 public Provider (String module, String method) { 164 this.module = module; 165 this.method = method; 166 } 167 168 171 public String getMethod() { 172 return method; 173 } 174 175 178 public String getModule() { 179 return module; 180 } 181 182 185 public void setMethod(String string) { 186 method = string; 187 } 188 189 192 public void setModule(String string) { 193 module = string; 194 } 195 196 } 197 } 198 | Popular Tags |