1 package org
.argeo
.slc
.web
.ajaxplorer
.file
;
4 import java
.io
.FileFilter
;
5 import java
.io
.OutputStreamWriter
;
7 import java
.util
.Vector
;
9 import javax
.servlet
.ServletOutputStream
;
10 import javax
.servlet
.http
.HttpServletRequest
;
11 import javax
.servlet
.http
.HttpServletResponse
;
13 import org
.apache
.commons
.io
.IOUtils
;
14 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpAnswer
;
15 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpDriverException
;
17 public class FileLsAction
<T
extends FileDriver
, F
extends AjxpFile
> extends
20 public AjxpAnswer
execute(FileDriver driver
, HttpServletRequest request
) {
21 String modeStr
= request
.getParameter("mode");
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"))
32 throw new AjxpDriverException("Unkown mode " + modeStr
);
34 String options
= request
.getParameter("options");
35 if (options
!= null) {
36 if ("al".equals(options
))
37 mode
= LsMode
.FILE_LIST
;
40 String path
= request
.getParameter("dir");
45 boolean dirOnly
= false;
46 if (mode
== LsMode
.NULL
|| mode
== LsMode
.COMPLETE
) {
50 List
<F
> ajxpFiles
= listFiles((T
) driver
, path
, dirOnly
);
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,
58 return new AxpLsAnswer(driver
, ajxpFiles
, mode
);
61 protected List
<F
> listFiles(T driver
, String path
, boolean dirOnly
) {
62 File dir
= driver
.getFile(path
);
65 throw new AjxpDriverException("Dir " + dir
+ " does not exist.");
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
));
75 ajxpFiles
.add((F
) new AjxpFile(file
, path
));
81 /** To be overridden. Accept all by default. */
82 protected FileFilter
createFileFilter(File dir
) {
83 return new FileFilter() {
84 public boolean accept(File pathname
) {
91 protected class AxpLsAnswer
implements AjxpAnswer
{
92 private final List
<F
> files
;
93 private final LsMode mode
;
94 private final FileDriver driver
;
96 public AxpLsAnswer(FileDriver driver
, List
<F
> files
, LsMode mode
) {
102 public void updateResponse(HttpServletResponse response
) {
103 final String encoding
= driver
.getEncoding();
104 response
.setCharacterEncoding(encoding
);
105 response
.setContentType("text/xml");
107 ServletOutputStream out
= null;
108 OutputStreamWriter writer
= null;
110 out
= response
.getOutputStream();
111 writer
= new OutputStreamWriter(out
, encoding
);
112 writer
.write("<?xml version=\"1.0\" encoding=\"" + encoding
114 // TODO add current path
115 writer
.write("<tree>");
116 for (AjxpFile file
: files
) {
117 writer
.write(file
.toXml(mode
, encoding
));
119 writer
.write("</tree>");
122 } catch (Exception e
) {
123 throw new AjxpDriverException("Could not write response.", e
);
125 IOUtils
.closeQuietly(writer
);
126 IOUtils
.closeQuietly(out
);