1
14
15 package com.liferay.portal.sharepoint;
16
17 import com.liferay.portal.kernel.log.Log;
18 import com.liferay.portal.kernel.log.LogFactoryUtil;
19 import com.liferay.portal.kernel.util.ContentTypes;
20 import com.liferay.portal.kernel.util.GetterUtil;
21 import com.liferay.portal.kernel.util.HttpUtil;
22 import com.liferay.portal.kernel.util.StringBundler;
23 import com.liferay.portal.kernel.util.StringUtil;
24 import com.liferay.portal.kernel.xml.Document;
25 import com.liferay.portal.kernel.xml.Element;
26 import com.liferay.portal.kernel.xml.SAXReaderUtil;
27 import com.liferay.portal.model.Group;
28 import com.liferay.portal.model.Role;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.service.GroupServiceUtil;
31 import com.liferay.portal.service.RoleLocalServiceUtil;
32 import com.liferay.portal.service.UserLocalServiceUtil;
33 import com.liferay.portal.sharepoint.dws.MemberResponseElement;
34 import com.liferay.portal.sharepoint.dws.ResponseElement;
35 import com.liferay.portal.sharepoint.dws.RoleResponseElement;
36 import com.liferay.portal.util.PortalUtil;
37 import com.liferay.portal.util.WebKeys;
38 import com.liferay.util.servlet.ServletResponseUtil;
39
40 import java.util.List;
41
42 import javax.servlet.http.HttpServlet;
43 import javax.servlet.http.HttpServletRequest;
44 import javax.servlet.http.HttpServletResponse;
45
46
52 public class SharepointDocumentWorkspaceServlet extends HttpServlet {
53
54 protected void doPost(
55 HttpServletRequest request, HttpServletResponse response) {
56
57 try {
58 getDwsMetaDataResponse(request, response);
59 }
60 catch (Exception e) {
61 _log.error(e, e);
62 }
63 }
64
65 protected void getDwsMetaDataResponse(
66 HttpServletRequest request, HttpServletResponse response)
67 throws Exception {
68
69 StringBundler sb = new StringBundler(12);
70
71 sb.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"");
72 sb.append("http://schemas.xmlsoap.org/soap/envelope/\">");
73 sb.append("<SOAP-ENV:Header/>");
74 sb.append("<SOAP-ENV:Body>");
75 sb.append("<GetDwsMetaDataResponse xmlns=\"");
76 sb.append("http://schemas.microsoft.com/sharepoint/soap/dws/\">");
77 sb.append("<GetDwsMetaDataResult>");
78
79 String results = getResults(request);
80
81 int pos = results.indexOf("\n");
82
83 if (pos != -1) {
84 results = results.substring(pos + 1);
85 }
86
87 results = results.replaceAll("<", "<");
88 results = results.replaceAll(">", ">");
89
90 sb.append(results);
91
92 sb.append("</GetDwsMetaDataResult>");
93 sb.append("</GetDwsMetaDataResponse>");
94 sb.append("</SOAP-ENV:Body>");
95 sb.append("</SOAP-ENV:Envelope>");
96
97 response.setContentType(ContentTypes.TEXT_XML_UTF8);
98
99 ServletResponseUtil.write(response, sb.toString());
100 }
101
102 protected String getResults(HttpServletRequest request)
103 throws Exception {
104
105 String xml = StringUtil.read(request.getInputStream());
106
107 String documentName = null;
108
109 int beginPos = xml.lastIndexOf("<document>");
110 int endPos = xml.lastIndexOf("</document>");
111
112 if (beginPos != -1) {
113 documentName = xml.substring(beginPos + 10, endPos);
114
115 documentName = HttpUtil.decodeURL(documentName);
116 }
117
118 String path = documentName;
119
120 int pos = documentName.lastIndexOf("sharepoint/");
121
122 if (pos != -1) {
123 path = path.substring(pos + 11);
124 }
125
126 Group group = GroupServiceUtil.getGroup(
127 SharepointUtil.getGroupId(path));
128
129 boolean minimal = false;
130
131 beginPos = xml.lastIndexOf("<minimal>");
132 endPos = xml.lastIndexOf("</minimal>");
133
134 if (beginPos != -1) {
135 minimal = GetterUtil.getBoolean(
136 xml.substring(beginPos + 9, endPos));
137 }
138
139 Document doc = SAXReaderUtil.createDocument();
140
141 Element root = doc.addElement("Results");
142
143 String url =
144 "http://" + request.getLocalAddr() + ":" + request.getServerPort() +
145 "/sharepoint";
146
147 root.addElement("SubscribeUrl").setText(url);
148 root.addElement("MtgInstance");
149 root.addElement("SettingUrl").setText(url);
150 root.addElement("PermsUrl").setText(url);
151 root.addElement("UserInfoUrl").setText(url);
152
153 Element rolesEl = root.addElement("Roles");
154
155 List<Role> roles = RoleLocalServiceUtil.getRoles(
156 PortalUtil.getCompanyId(request));
157
158 for (Role role : roles) {
159 ResponseElement responseElement = new RoleResponseElement(role);
160
161 responseElement.addElement(rolesEl);
162 }
163
164 if (!minimal) {
165 Element schemaEl = root.addElement("Schema");
166
167 schemaEl.addAttribute("Name", "Documents");
168 schemaEl.addAttribute("Url", group.getName());
169
170 Element fieldEl = schemaEl.addElement("Field");
171
172 fieldEl.addAttribute("Name", "FileLeafRef");
173 fieldEl.addAttribute("Required", "true");
174 fieldEl.addAttribute("Type", "Invalid");
175
176 fieldEl.addElement("Choices");
177
178 fieldEl = schemaEl.addElement("Field");
179
180 fieldEl.addAttribute("Name", "_SourceUrl");
181 fieldEl.addAttribute("Required", "false");
182 fieldEl.addAttribute("Type", "Text");
183
184 fieldEl.addElement("Choices");
185
186 fieldEl = schemaEl.addElement("Field");
187
188 fieldEl.addAttribute("Name", "_SharedFileIndex");
189 fieldEl.addAttribute("Required", "false");
190 fieldEl.addAttribute("Type", "Text");
191
192 fieldEl.addElement("Choices");
193
194 fieldEl = schemaEl.addElement("Field");
195
196 fieldEl.addAttribute("Name", "Order");
197 fieldEl.addAttribute("Required", "false");
198 fieldEl.addAttribute("Type", "Number");
199
200 fieldEl.addElement("Choices");
201
202 fieldEl = schemaEl.addElement("Field");
203
204 fieldEl.addAttribute("Name", "Title");
205 fieldEl.addAttribute("Required", "false");
206 fieldEl.addAttribute("Type", "Text");
207
208 fieldEl.addElement("Choices");
209
210 Element listInfoEl = root.addElement("ListInfo");
211
212 listInfoEl.addAttribute("Name", "Links");
213
214 listInfoEl.addElement("Moderated").setText(String.valueOf(false));
215
216 Element listPermissionsEl = listInfoEl.addElement(
217 "ListPermissions");
218
219 listPermissionsEl.addElement("DeleteListItems");
220 listPermissionsEl.addElement("EditListItems");
221 listPermissionsEl.addElement("InsertListItems");
222 listPermissionsEl.addElement("ManageRoles");
223 listPermissionsEl.addElement("ManageWeb");
224 }
225
226 Element permissionsEl = root.addElement("Permissions");
227
228 if (!minimal) {
229 permissionsEl.addElement("DeleteListItems");
230 permissionsEl.addElement("EditListItems");
231 permissionsEl.addElement("InsertListItems");
232 permissionsEl.addElement("ManageRoles");
233 permissionsEl.addElement("ManageWeb");
234 }
235
236 root.addElement("HasUniquePerm").setText(String.valueOf(true));
237 root.addElement("WorkspaceType").setText("DWS");
238 root.addElement("IsADMode").setText(String.valueOf(false));
239 root.addElement("DocUrl").setText(documentName);
240 root.addElement("Minimal").setText(String.valueOf(true));
241
242 Element resultsEl = root.addElement("Results");
243
244 resultsEl.addElement("Title").setText(group.getName());
245 resultsEl.addElement("LastUpdate");
246
247 User user = (User)request.getSession().getAttribute(
248 WebKeys.USER);
249
250 ResponseElement responseElement = new MemberResponseElement(
251 user, false);
252
253 responseElement.addElement(resultsEl);
254
255 Element membersEl = resultsEl.addElement("Members");
256
257 List<User> users = UserLocalServiceUtil.getGroupUsers(
258 group.getGroupId());
259
260 for (User member : users) {
261 responseElement = new MemberResponseElement(member, true);
262
263 responseElement.addElement(membersEl);
264 }
265
266 if (!minimal) {
267 Element assigneesEl = resultsEl.addElement("Assignees");
268
269 for (User member : users) {
270 responseElement = new MemberResponseElement(member, true);
271
272 responseElement.addElement(assigneesEl);
273 }
274
275 Element listEl = resultsEl.addElement("List");
276
277 listEl.addAttribute("Name", "Documents");
278
279 listEl.addElement("ID");
280
281 String parentFolderPath = path;
282
283 pos = parentFolderPath.lastIndexOf("/");
284
285 if (pos != -1) {
286 parentFolderPath = parentFolderPath.substring(0, pos);
287 }
288
289 SharepointStorage storage = SharepointUtil.getStorage(
290 parentFolderPath);
291
292 SharepointRequest sharepointRequest = new SharepointRequest(
293 parentFolderPath);
294
295 storage.addDocumentElements(sharepointRequest, listEl);
296 }
297
298 return doc.asXML();
299 }
300
301 private static Log _log = LogFactoryUtil.getLog(SharepointServlet.class);
302
303 }