]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/ajaxplorer/file/AbstractFileDownloadAction.java
Remove unused method in SLC Agent interface
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / ajaxplorer / file / AbstractFileDownloadAction.java
1 package org.argeo.slc.web.ajaxplorer.file;
2
3 import java.io.File;
4 import java.io.InputStream;
5 import java.io.OutputStream;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.apache.commons.io.FileUtils;
11 import org.apache.commons.io.IOUtils;
12 import org.argeo.slc.web.ajaxplorer.AjxpAnswer;
13 import org.argeo.slc.web.ajaxplorer.AjxpDriverException;
14
15 public abstract class AbstractFileDownloadAction extends FileAction {
16 public AjxpAnswer execute(FileDriver driver, HttpServletRequest request) {
17 String fileStr = request.getParameter(getFileParameter());
18 if (fileStr == null) {
19 throw new AjxpDriverException(
20 "A file to download needs to be provided.");
21 }
22 File file = new File(driver.getBasePath() + fileStr);
23 return new AxpBasicDownloadAnswer(file);
24 }
25
26 /** Return 'file' by default. */
27 protected String getFileParameter() {
28 return "file";
29 }
30
31 /** To be overridden. Do nothing by default. */
32 protected void setHeaders(HttpServletResponse response, File file) {
33 // do nothing
34 }
35
36 protected class AxpBasicDownloadAnswer implements AjxpAnswer {
37 private final File file;
38
39 public AxpBasicDownloadAnswer(File file) {
40 this.file = file;
41 }
42
43 public void updateResponse(HttpServletResponse response) {
44 InputStream in = null;
45 OutputStream out = null;
46 try {
47 setHeaders(response, file);
48
49 if (log.isDebugEnabled())
50 log.debug("Download file " + file);
51 in = FileUtils.openInputStream(file);
52 out = response.getOutputStream();
53
54 copyFile(in, out);
55 out.flush();
56
57 } catch (Exception e) {
58 e.printStackTrace();
59 throw new AjxpDriverException("Cannot download file " + file, e);
60 } finally {
61 IOUtils.closeQuietly(in);
62 IOUtils.closeQuietly(out);
63 }
64
65 }
66
67 protected void copyFile(InputStream in, OutputStream out)
68 throws Exception {
69 IOUtils.copy(in, out);
70 }
71
72 }
73 }