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