001
014
015 package com.liferay.portal.sharepoint;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.servlet.HttpHeaders;
020 import com.liferay.portal.kernel.servlet.ServletResponseUtil;
021 import com.liferay.portal.kernel.util.ContentTypes;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.HttpUtil;
024 import com.liferay.portal.kernel.util.StringBundler;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.xml.Document;
027 import com.liferay.portal.kernel.xml.Element;
028 import com.liferay.portal.kernel.xml.SAXReaderUtil;
029 import com.liferay.portal.model.Group;
030 import com.liferay.portal.model.Role;
031 import com.liferay.portal.model.User;
032 import com.liferay.portal.service.GroupServiceUtil;
033 import com.liferay.portal.service.RoleLocalServiceUtil;
034 import com.liferay.portal.service.UserLocalServiceUtil;
035 import com.liferay.portal.sharepoint.dws.MemberResponseElement;
036 import com.liferay.portal.sharepoint.dws.ResponseElement;
037 import com.liferay.portal.sharepoint.dws.RoleResponseElement;
038 import com.liferay.portal.util.PortalUtil;
039 import com.liferay.portal.util.WebKeys;
040
041 import java.util.List;
042
043 import javax.servlet.http.HttpServlet;
044 import javax.servlet.http.HttpServletRequest;
045 import javax.servlet.http.HttpServletResponse;
046
047
050 public class SharepointDocumentWorkspaceServlet extends HttpServlet {
051
052 @Override
053 protected void doPost(
054 HttpServletRequest request, HttpServletResponse response) {
055
056 if (_log.isInfoEnabled()) {
057 _log.info(
058 request.getHeader(HttpHeaders.USER_AGENT) + " " +
059 request.getMethod() + " " + request.getRequestURI());
060 }
061
062 try {
063 getDwsMetaDataResponse(request, response);
064 }
065 catch (Exception e) {
066 _log.error(e, e);
067 }
068 }
069
070 protected void getDwsMetaDataResponse(
071 HttpServletRequest request, HttpServletResponse response)
072 throws Exception {
073
074 StringBundler sb = new StringBundler(12);
075
076 sb.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"");
077 sb.append("http:
078 sb.append("<SOAP-ENV:Header/>");
079 sb.append("<SOAP-ENV:Body>");
080 sb.append("<GetDwsMetaDataResponse xmlns=\"");
081 sb.append("http:
082 sb.append("<GetDwsMetaDataResult>");
083
084 String results = getResults(request);
085
086 int pos = results.indexOf("\n");
087
088 if (pos != -1) {
089 results = results.substring(pos + 1);
090 }
091
092 results = results.replaceAll("<", "<");
093 results = results.replaceAll(">", ">");
094
095 sb.append(results);
096
097 sb.append("</GetDwsMetaDataResult>");
098 sb.append("</GetDwsMetaDataResponse>");
099 sb.append("</SOAP-ENV:Body>");
100 sb.append("</SOAP-ENV:Envelope>");
101
102 response.setContentType(ContentTypes.TEXT_XML_UTF8);
103
104 ServletResponseUtil.write(response, sb.toString());
105 }
106
107 protected String getResults(HttpServletRequest request) throws Exception {
108 String xml = StringUtil.read(request.getInputStream());
109
110 String documentName = null;
111
112 int beginPos = xml.lastIndexOf("<document>");
113 int endPos = xml.lastIndexOf("</document>");
114
115 if (beginPos != -1) {
116 documentName = xml.substring(beginPos + 10, endPos);
117
118 documentName = HttpUtil.decodeURL(documentName);
119 }
120
121 String path = documentName;
122
123 if (_log.isInfoEnabled()) {
124 _log.info("Original path " + path);
125 }
126
127 path = SharepointUtil.stripService(path, true);
128
129 if (_log.isInfoEnabled()) {
130 _log.info("Modified path " + path);
131 }
132
133 Group group = GroupServiceUtil.getGroup(
134 SharepointUtil.getGroupId(path));
135
136 boolean minimal = false;
137
138 beginPos = xml.lastIndexOf("<minimal>");
139 endPos = xml.lastIndexOf("</minimal>");
140
141 if (beginPos != -1) {
142 minimal = GetterUtil.getBoolean(
143 xml.substring(beginPos + 9, endPos));
144 }
145
146 Document doc = SAXReaderUtil.createDocument();
147
148 Element root = doc.addElement("Results");
149
150 String url =
151 "http:
152 "/sharepoint";
153
154 root.addElement("SubscribeUrl").setText(url);
155 root.addElement("MtgInstance");
156 root.addElement("SettingUrl").setText(url);
157 root.addElement("PermsUrl").setText(url);
158 root.addElement("UserInfoUrl").setText(url);
159
160 Element rolesEl = root.addElement("Roles");
161
162 List<Role> roles = RoleLocalServiceUtil.getRoles(
163 PortalUtil.getCompanyId(request));
164
165 for (Role role : roles) {
166 ResponseElement responseElement = new RoleResponseElement(role);
167
168 responseElement.addElement(rolesEl);
169 }
170
171 if (!minimal) {
172 Element schemaEl = root.addElement("Schema");
173
174 schemaEl.addAttribute("Name", "Documents");
175 schemaEl.addAttribute("Url", group.getName());
176
177 Element fieldEl = schemaEl.addElement("Field");
178
179 fieldEl.addAttribute("Name", "FileLeafRef");
180 fieldEl.addAttribute("Required", "true");
181 fieldEl.addAttribute("Type", "Invalid");
182
183 fieldEl.addElement("Choices");
184
185 fieldEl = schemaEl.addElement("Field");
186
187 fieldEl.addAttribute("Name", "_SourceUrl");
188 fieldEl.addAttribute("Required", "false");
189 fieldEl.addAttribute("Type", "Text");
190
191 fieldEl.addElement("Choices");
192
193 fieldEl = schemaEl.addElement("Field");
194
195 fieldEl.addAttribute("Name", "_SharedFileIndex");
196 fieldEl.addAttribute("Required", "false");
197 fieldEl.addAttribute("Type", "Text");
198
199 fieldEl.addElement("Choices");
200
201 fieldEl = schemaEl.addElement("Field");
202
203 fieldEl.addAttribute("Name", "Order");
204 fieldEl.addAttribute("Required", "false");
205 fieldEl.addAttribute("Type", "Number");
206
207 fieldEl.addElement("Choices");
208
209 fieldEl = schemaEl.addElement("Field");
210
211 fieldEl.addAttribute("Name", "Title");
212 fieldEl.addAttribute("Required", "false");
213 fieldEl.addAttribute("Type", "Text");
214
215 fieldEl.addElement("Choices");
216
217 Element listInfoEl = root.addElement("ListInfo");
218
219 listInfoEl.addAttribute("Name", "Links");
220
221 listInfoEl.addElement("Moderated").setText(String.valueOf(false));
222
223 Element listPermissionsEl = listInfoEl.addElement(
224 "ListPermissions");
225
226 listPermissionsEl.addElement("DeleteListItems");
227 listPermissionsEl.addElement("EditListItems");
228 listPermissionsEl.addElement("InsertListItems");
229 listPermissionsEl.addElement("ManageRoles");
230 listPermissionsEl.addElement("ManageWeb");
231 }
232
233 Element permissionsEl = root.addElement("Permissions");
234
235 if (!minimal) {
236 permissionsEl.addElement("DeleteListItems");
237 permissionsEl.addElement("EditListItems");
238 permissionsEl.addElement("InsertListItems");
239 permissionsEl.addElement("ManageRoles");
240 permissionsEl.addElement("ManageWeb");
241 }
242
243 root.addElement("HasUniquePerm").setText(String.valueOf(true));
244 root.addElement("WorkspaceType").setText("DWS");
245 root.addElement("IsADMode").setText(String.valueOf(false));
246 root.addElement("DocUrl").setText(documentName);
247 root.addElement("Minimal").setText(String.valueOf(true));
248
249 Element resultsEl = root.addElement("Results");
250
251 resultsEl.addElement("Title").setText(group.getName());
252 resultsEl.addElement("LastUpdate");
253
254 User user = (User)request.getSession().getAttribute(WebKeys.USER);
255
256 ResponseElement responseElement = new MemberResponseElement(
257 user, false);
258
259 responseElement.addElement(resultsEl);
260
261 Element membersEl = resultsEl.addElement("Members");
262
263 List<User> users = UserLocalServiceUtil.getGroupUsers(
264 group.getGroupId());
265
266 for (User member : users) {
267 responseElement = new MemberResponseElement(member, true);
268
269 responseElement.addElement(membersEl);
270 }
271
272 if (minimal) {
273 return doc.asXML();
274 }
275
276 Element assigneesEl = resultsEl.addElement("Assignees");
277
278 for (User member : users) {
279 responseElement = new MemberResponseElement(member, true);
280
281 responseElement.addElement(assigneesEl);
282 }
283
284 Element listEl = resultsEl.addElement("List");
285
286 listEl.addAttribute("Name", "Documents");
287
288 listEl.addElement("ID");
289
290 String parentFolderPath = path;
291
292 int pos = parentFolderPath.lastIndexOf("/");
293
294 if (pos != -1) {
295 parentFolderPath = parentFolderPath.substring(0, pos);
296 }
297
298 SharepointStorage storage = SharepointUtil.getStorage(parentFolderPath);
299
300 SharepointRequest sharepointRequest = new SharepointRequest(
301 parentFolderPath);
302
303 storage.addDocumentElements(sharepointRequest, listEl);
304
305 return doc.asXML();
306 }
307
308 private static Log _log = LogFactoryUtil.getLog(
309 SharepointDocumentWorkspaceServlet.class);
310
311 }