1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.fckeditor.response;
22
23 import java.io.File;
24 import java.io.FileFilter;
25 import java.io.StringWriter;
26
27 import javax.xml.parsers.DocumentBuilder;
28 import javax.xml.parsers.DocumentBuilderFactory;
29 import javax.xml.parsers.ParserConfigurationException;
30 import javax.xml.transform.Transformer;
31 import javax.xml.transform.TransformerException;
32 import javax.xml.transform.TransformerFactory;
33 import javax.xml.transform.dom.DOMSource;
34 import javax.xml.transform.stream.StreamResult;
35
36 import net.fckeditor.handlers.CommandHandler;
37 import net.fckeditor.handlers.ResourceTypeHandler;
38 import net.fckeditor.tool.Utils;
39
40 import org.apache.commons.io.filefilter.DirectoryFileFilter;
41 import org.apache.commons.io.filefilter.FileFileFilter;
42 import org.w3c.dom.Document;
43 import org.w3c.dom.Element;
44
45
46
47
48
49
50
51
52
53 public class XmlResponse {
54
55 private Document document;
56 private Element errorElement;
57 private Element foldersElement;
58 private Element filesElement;
59
60
61 public static final int EN_OK = 0;
62
63
64 public static final int EN_ERROR = 1;
65
66
67 public static final int EN_ALREADY_EXISTS = 101;
68
69
70 public static final int EN_INVALID_FOLDER_NAME = 102;
71
72
73 public static final int EN_SECURITY_ERROR = 103;
74
75
76 public static final int EN_UKNOWN = 110;
77
78
79
80
81
82
83
84
85 public XmlResponse(CommandHandler command, ResourceTypeHandler resourceType,
86 String currentFolder, String constructedUrl) {
87
88 try {
89 DocumentBuilderFactory factory = DocumentBuilderFactory
90 .newInstance();
91 DocumentBuilder builder = factory.newDocumentBuilder();
92 document = builder.newDocument();
93 } catch (ParserConfigurationException e) {
94 throw new RuntimeException(e);
95 }
96
97 Element root = document.createElement("Connector");
98 document.appendChild(root);
99 root.setAttribute("command", command.toString());
100 root.setAttribute("resourceType", resourceType.toString());
101
102 Element currentFolderElement = document.createElement("CurrentFolder");
103 currentFolderElement.setAttribute("path", currentFolder);
104
105 currentFolderElement.setAttribute("url", constructedUrl);
106 root.appendChild(currentFolderElement);
107
108 }
109
110
111
112
113
114
115 public XmlResponse(int number, String text) {
116 try {
117 DocumentBuilderFactory factory = DocumentBuilderFactory
118 .newInstance();
119 DocumentBuilder builder = factory.newDocumentBuilder();
120 document = builder.newDocument();
121 } catch (ParserConfigurationException e) {
122 throw new RuntimeException(e);
123 }
124
125 Element root = document.createElement("Connector");
126 document.appendChild(root);
127 setError(number, text);
128 }
129
130
131
132
133
134 public XmlResponse(int number) {
135 this(number, null);
136 }
137
138 public void setError(int number, String text) {
139
140 if (errorElement == null) {
141 errorElement = document.createElement("Error");
142 document.getDocumentElement().appendChild(errorElement);
143 }
144
145 errorElement.setAttribute("number", String.valueOf(number));
146 if (Utils.isNotEmpty(text))
147 errorElement.setAttribute("text", text);
148
149 }
150
151 public void setError(int number) {
152 setError(number, null);
153 }
154
155 public void setFolders(File dir) {
156
157 if (foldersElement != null) {
158 Element parent = (Element) foldersElement.getParentNode();
159 parent.removeChild(foldersElement);
160 }
161
162 foldersElement = document.createElement("Folders");
163 document.getDocumentElement().appendChild(foldersElement);
164
165 String[] fileList = dir.list(DirectoryFileFilter.DIRECTORY);
166 for (String file : fileList) {
167 Element folderElement = document.createElement("Folder");
168 folderElement.setAttribute("name", file);
169 foldersElement.appendChild(folderElement);
170 }
171 }
172
173 public void setFiles(File dir) {
174
175 if (filesElement != null) {
176 Element parent = (Element) filesElement.getParentNode();
177 parent.removeChild(filesElement);
178 }
179
180 filesElement = document.createElement("Files");
181 document.getDocumentElement().appendChild(filesElement);
182
183 File[] fileList = dir.listFiles((FileFilter) FileFileFilter.FILE);
184 long length;
185 for (File file : fileList) {
186 Element fileElement = document.createElement("File");
187 fileElement.setAttribute("name", file.getName());
188 if (file.length() < 1024)
189 length = 1L;
190 else
191 length = file.length()/1024;
192 fileElement.setAttribute("size", String.valueOf(length));
193 filesElement.appendChild(fileElement);
194 }
195 }
196
197 public void setFoldersAndFiles(File dir) {
198 setFolders(dir);
199 setFiles(dir);
200 }
201
202 @Override
203 public String toString() {
204 document.getDocumentElement().normalize();
205 TransformerFactory factory = TransformerFactory.newInstance();
206
207 StringWriter sw = new StringWriter();
208
209 try {
210 Transformer transformer = factory.newTransformer();
211
212 DOMSource source = new DOMSource(document);
213 StreamResult result = new StreamResult(sw);
214
215 transformer.transform(source, result);
216 } catch (TransformerException e) {
217 throw new RuntimeException(e);
218 }
219
220 return sw.toString();
221 }
222
223 }