]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/ajaxplorer/file/FileLsAction.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 / FileLsAction.java
1 package org.argeo.slc.web.ajaxplorer.file;
2
3 import java.io.File;
4 import java.io.FileFilter;
5 import java.io.OutputStreamWriter;
6 import java.util.List;
7 import java.util.Vector;
8
9 import javax.servlet.ServletOutputStream;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 import org.apache.commons.io.IOUtils;
14 import org.argeo.slc.web.ajaxplorer.AjxpAnswer;
15 import org.argeo.slc.web.ajaxplorer.AjxpDriverException;
16
17 public class FileLsAction<T extends FileDriver, F extends AjxpFile> extends
18 FileAction {
19
20 public AjxpAnswer execute(FileDriver driver, HttpServletRequest request) {
21 String modeStr = request.getParameter("mode");
22 LsMode mode;
23 if (modeStr == null)
24 mode = LsMode.NULL;
25 else if (modeStr.equals("complete"))
26 mode = LsMode.COMPLETE;
27 else if (modeStr.equals("file_list"))
28 mode = LsMode.FILE_LIST;
29 else if (modeStr.equals("search"))
30 mode = LsMode.SEARCH;
31 else
32 throw new AjxpDriverException("Unkown mode " + modeStr);
33
34 String options = request.getParameter("options");
35 if (options != null) {
36 if ("al".equals(options))
37 mode = LsMode.FILE_LIST;
38 }
39
40 String path = request.getParameter("dir");
41 if (path == null) {
42 path = "/";
43 }
44
45 boolean dirOnly = false;
46 if (mode == LsMode.NULL || mode == LsMode.COMPLETE) {
47 dirOnly = true;
48 }
49
50 List<F> ajxpFiles = listFiles((T) driver, path, dirOnly);
51 /*
52 * File[] files = dir.listFiles(createFileFilter(request, dir));
53 * List<AjxpFile> ajxpFiles = new Vector<AjxpFile>(); for (File file :
54 * files) { if (file.isDirectory()) { ajxpFiles.add(new AjxpFile(file,
55 * path)); } else { if (!dirOnly) ajxpFiles.add(new AjxpFile(file,
56 * path)); } }
57 */
58 return new AxpLsAnswer(driver, ajxpFiles, mode);
59 }
60
61 protected List<F> listFiles(T driver, String path, boolean dirOnly) {
62 File dir = driver.getFile(path);
63
64 if (!dir.exists())
65 throw new AjxpDriverException("Dir " + dir + " does not exist.");
66
67 FileFilter filter = createFileFilter(dir);
68 File[] files = dir.listFiles(filter);
69 List<F> ajxpFiles = new Vector<F>();
70 for (File file : files) {
71 if (file.isDirectory()) {
72 ajxpFiles.add((F) new AjxpFile(file, path));
73 } else {
74 if (!dirOnly)
75 ajxpFiles.add((F) new AjxpFile(file, path));
76 }
77 }
78 return ajxpFiles;
79 }
80
81 /** To be overridden. Accept all by default. */
82 protected FileFilter createFileFilter(File dir) {
83 return new FileFilter() {
84 public boolean accept(File pathname) {
85 return true;
86 }
87
88 };
89 }
90
91 protected class AxpLsAnswer implements AjxpAnswer {
92 private final List<F> files;
93 private final LsMode mode;
94 private final FileDriver driver;
95
96 public AxpLsAnswer(FileDriver driver, List<F> files, LsMode mode) {
97 this.files = files;
98 this.mode = mode;
99 this.driver = driver;
100 }
101
102 public void updateResponse(HttpServletResponse response) {
103 final String encoding = driver.getEncoding();
104 response.setCharacterEncoding(encoding);
105 response.setContentType("text/xml");
106
107 ServletOutputStream out = null;
108 OutputStreamWriter writer = null;
109 try {
110 out = response.getOutputStream();
111 writer = new OutputStreamWriter(out, encoding);
112 writer.write("<?xml version=\"1.0\" encoding=\"" + encoding
113 + "\"?>");
114 // TODO add current path
115 writer.write("<tree>");
116 for (AjxpFile file : files) {
117 writer.write(file.toXml(mode, encoding));
118 }
119 writer.write("</tree>");
120 writer.flush();
121
122 } catch (Exception e) {
123 throw new AjxpDriverException("Could not write response.", e);
124 } finally {
125 IOUtils.closeQuietly(writer);
126 IOUtils.closeQuietly(out);
127 }
128 }
129
130 }
131 }