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