2 * Copyright (C) 2007-2012 Mathieu Baudier
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.slc
.web
.ajaxplorer
.file
;
19 import java
.io
.FileFilter
;
20 import java
.io
.OutputStreamWriter
;
21 import java
.util
.List
;
22 import java
.util
.Vector
;
24 import javax
.servlet
.ServletOutputStream
;
25 import javax
.servlet
.http
.HttpServletRequest
;
26 import javax
.servlet
.http
.HttpServletResponse
;
28 import org
.apache
.commons
.io
.IOUtils
;
29 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpAnswer
;
30 import org
.argeo
.slc
.web
.ajaxplorer
.AjxpDriverException
;
32 public class FileLsAction
<T
extends FileDriver
, F
extends AjxpFile
> extends
35 public AjxpAnswer
execute(FileDriver driver
, HttpServletRequest request
) {
36 String modeStr
= request
.getParameter("mode");
40 else if (modeStr
.equals("complete"))
41 mode
= LsMode
.COMPLETE
;
42 else if (modeStr
.equals("file_list"))
43 mode
= LsMode
.FILE_LIST
;
44 else if (modeStr
.equals("search"))
47 throw new AjxpDriverException("Unkown mode " + modeStr
);
49 String options
= request
.getParameter("options");
50 if (options
!= null) {
51 if ("al".equals(options
))
52 mode
= LsMode
.FILE_LIST
;
55 String path
= request
.getParameter("dir");
60 boolean dirOnly
= false;
61 if (mode
== LsMode
.NULL
|| mode
== LsMode
.COMPLETE
) {
65 List
<F
> ajxpFiles
= listFiles((T
) driver
, path
, dirOnly
);
67 * File[] files = dir.listFiles(createFileFilter(request, dir));
68 * List<AjxpFile> ajxpFiles = new Vector<AjxpFile>(); for (File file :
69 * files) { if (file.isDirectory()) { ajxpFiles.add(new AjxpFile(file,
70 * path)); } else { if (!dirOnly) ajxpFiles.add(new AjxpFile(file,
73 return new AxpLsAnswer(driver
, ajxpFiles
, mode
);
76 protected List
<F
> listFiles(T driver
, String path
, boolean dirOnly
) {
77 File dir
= driver
.getFile(path
);
80 throw new AjxpDriverException("Dir " + dir
+ " does not exist.");
82 FileFilter filter
= createFileFilter(dir
);
83 File
[] files
= dir
.listFiles(filter
);
84 List
<F
> ajxpFiles
= new Vector
<F
>();
85 for (File file
: files
) {
86 if (file
.isDirectory()) {
87 ajxpFiles
.add((F
) new AjxpFile(file
, path
));
90 ajxpFiles
.add((F
) new AjxpFile(file
, path
));
96 /** To be overridden. Accept all by default. */
97 protected FileFilter
createFileFilter(File dir
) {
98 return new FileFilter() {
99 public boolean accept(File pathname
) {
106 protected class AxpLsAnswer
implements AjxpAnswer
{
107 private final List
<F
> files
;
108 private final LsMode mode
;
109 private final FileDriver driver
;
111 public AxpLsAnswer(FileDriver driver
, List
<F
> files
, LsMode mode
) {
114 this.driver
= driver
;
117 public void updateResponse(HttpServletResponse response
) {
118 final String encoding
= driver
.getEncoding();
119 response
.setCharacterEncoding(encoding
);
120 response
.setContentType("text/xml");
122 ServletOutputStream out
= null;
123 OutputStreamWriter writer
= null;
125 out
= response
.getOutputStream();
126 writer
= new OutputStreamWriter(out
, encoding
);
127 writer
.write("<?xml version=\"1.0\" encoding=\"" + encoding
129 // TODO add current path
130 writer
.write("<tree>");
131 for (AjxpFile file
: files
) {
132 writer
.write(file
.toXml(mode
, encoding
));
134 writer
.write("</tree>");
137 } catch (Exception e
) {
138 throw new AjxpDriverException("Could not write response.", e
);
140 IOUtils
.closeQuietly(writer
);
141 IOUtils
.closeQuietly(out
);