1
22
23 package com.liferay.portal.webdav.methods;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.util.FileUtil;
28 import com.liferay.portal.kernel.util.StringPool;
29 import com.liferay.portal.kernel.util.Tuple;
30 import com.liferay.portal.kernel.util.Validator;
31 import com.liferay.portal.kernel.xml.Document;
32 import com.liferay.portal.kernel.xml.Element;
33 import com.liferay.portal.kernel.xml.Namespace;
34 import com.liferay.portal.kernel.xml.SAXReaderUtil;
35 import com.liferay.portal.webdav.InvalidRequestException;
36 import com.liferay.portal.webdav.WebDAVException;
37 import com.liferay.portal.webdav.WebDAVRequest;
38 import com.liferay.portal.webdav.WebDAVUtil;
39 import com.liferay.util.xml.XMLFormatter;
40
41 import java.util.HashSet;
42 import java.util.Iterator;
43 import java.util.Set;
44
45 import javax.servlet.http.HttpServletRequest;
46 import javax.servlet.http.HttpServletResponse;
47
48
55 public class PropfindMethodImpl extends BasePropMethodImpl implements Method {
56
57 public int process(WebDAVRequest webDavRequest) throws WebDAVException {
58 try {
59 Set<Tuple> props = getProps(webDavRequest);
60
61 return writeResponseXML(webDavRequest, props);
62 }
63 catch (InvalidRequestException ire) {
64 return HttpServletResponse.SC_BAD_REQUEST;
65 }
66 catch (Exception e) {
67 throw new WebDAVException(e);
68 }
69 }
70
71 protected Set<Tuple> getProps(WebDAVRequest webDavRequest)
72 throws InvalidRequestException {
73
74 try {
75 Set<Tuple> props = new HashSet<Tuple>();
76
77 HttpServletRequest request = webDavRequest.getHttpServletRequest();
78
79 String xml = new String(
80 FileUtil.getBytes(request.getInputStream()));
81
82 if (Validator.isNull(xml)) {
83
84
87 return generateProps(props);
88 }
89
90 if (_log.isInfoEnabled()) {
91 _log.info(
92 "Request XML: \n" +
93 XMLFormatter.toString(xml, StringPool.FOUR_SPACES));
94 }
95
96 Document doc = SAXReaderUtil.read(xml);
97
98 Element root = doc.getRootElement();
99
100 if (root.element("allprop") != null) {
101
102
104 return generateProps(props);
105 }
106
107 Element prop = root.element("prop");
108
109 Iterator<Element> itr = prop.elements().iterator();
110
111 while (itr.hasNext()) {
112 Element el = itr.next();
113
114 String prefix = el.getNamespacePrefix();
115 String uri = el.getNamespaceURI();
116
117 Namespace namespace = null;
118
119 if (uri.equals(WebDAVUtil.DAV_URI.getURI())) {
120 namespace = WebDAVUtil.DAV_URI;
121 }
122 else if (Validator.isNull(prefix)) {
123 namespace = SAXReaderUtil.createNamespace(uri);
124 }
125 else {
126 namespace = SAXReaderUtil.createNamespace(prefix, uri);
127 }
128
129 props.add(new Tuple(el.getName(), namespace));
130 }
131
132 return props;
133 }
134 catch (Exception e) {
135 throw new InvalidRequestException(e);
136 }
137 }
138
139 protected Set<Tuple> generateProps(Set<Tuple> props) {
140 props.add(new Tuple("displayname", WebDAVUtil.DAV_URI));
141 props.add(new Tuple("resourcetype", WebDAVUtil.DAV_URI));
142 props.add(new Tuple("getcontenttype", WebDAVUtil.DAV_URI));
143 props.add(new Tuple("getcontentlength", WebDAVUtil.DAV_URI));
144 props.add(new Tuple("getlastmodified", WebDAVUtil.DAV_URI));
145 props.add(new Tuple("lockdiscovery", WebDAVUtil.DAV_URI));
146 props.add(new Tuple("checked-in", WebDAVUtil.DAV_URI));
147 props.add(new Tuple("checked-out", WebDAVUtil.DAV_URI));
148 props.add(new Tuple("version-name", WebDAVUtil.DAV_URI));
149
150 return props;
151 }
152
153 private static Log _log = LogFactoryUtil.getLog(PropfindMethodImpl.class);
154
155 }