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