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 int pos = documentName.lastIndexOf("sharepoint/");
124
125 if (pos != -1) {
126 path = path.substring(pos + 11);
127 }
128
129 Group group = GroupServiceUtil.getGroup(
130 SharepointUtil.getGroupId(path));
131
132 boolean minimal = false;
133
134 beginPos = xml.lastIndexOf("<minimal>");
135 endPos = xml.lastIndexOf("</minimal>");
136
137 if (beginPos != -1) {
138 minimal = GetterUtil.getBoolean(
139 xml.substring(beginPos + 9, endPos));
140 }
141
142 Document doc = SAXReaderUtil.createDocument();
143
144 Element root = doc.addElement("Results");
145
146 String url =
147 "http:
148 "/sharepoint";
149
150 root.addElement("SubscribeUrl").setText(url);
151 root.addElement("MtgInstance");
152 root.addElement("SettingUrl").setText(url);
153 root.addElement("PermsUrl").setText(url);
154 root.addElement("UserInfoUrl").setText(url);
155
156 Element rolesEl = root.addElement("Roles");
157
158 List<Role> roles = RoleLocalServiceUtil.getRoles(
159 PortalUtil.getCompanyId(request));
160
161 for (Role role : roles) {
162 ResponseElement responseElement = new RoleResponseElement(role);
163
164 responseElement.addElement(rolesEl);
165 }
166
167 if (!minimal) {
168 Element schemaEl = root.addElement("Schema");
169
170 schemaEl.addAttribute("Name", "Documents");
171 schemaEl.addAttribute("Url", group.getName());
172
173 Element fieldEl = schemaEl.addElement("Field");
174
175 fieldEl.addAttribute("Name", "FileLeafRef");
176 fieldEl.addAttribute("Required", "true");
177 fieldEl.addAttribute("Type", "Invalid");
178
179 fieldEl.addElement("Choices");
180
181 fieldEl = schemaEl.addElement("Field");
182
183 fieldEl.addAttribute("Name", "_SourceUrl");
184 fieldEl.addAttribute("Required", "false");
185 fieldEl.addAttribute("Type", "Text");
186
187 fieldEl.addElement("Choices");
188
189 fieldEl = schemaEl.addElement("Field");
190
191 fieldEl.addAttribute("Name", "_SharedFileIndex");
192 fieldEl.addAttribute("Required", "false");
193 fieldEl.addAttribute("Type", "Text");
194
195 fieldEl.addElement("Choices");
196
197 fieldEl = schemaEl.addElement("Field");
198
199 fieldEl.addAttribute("Name", "Order");
200 fieldEl.addAttribute("Required", "false");
201 fieldEl.addAttribute("Type", "Number");
202
203 fieldEl.addElement("Choices");
204
205 fieldEl = schemaEl.addElement("Field");
206
207 fieldEl.addAttribute("Name", "Title");
208 fieldEl.addAttribute("Required", "false");
209 fieldEl.addAttribute("Type", "Text");
210
211 fieldEl.addElement("Choices");
212
213 Element listInfoEl = root.addElement("ListInfo");
214
215 listInfoEl.addAttribute("Name", "Links");
216
217 listInfoEl.addElement("Moderated").setText(String.valueOf(false));
218
219 Element listPermissionsEl = listInfoEl.addElement(
220 "ListPermissions");
221
222 listPermissionsEl.addElement("DeleteListItems");
223 listPermissionsEl.addElement("EditListItems");
224 listPermissionsEl.addElement("InsertListItems");
225 listPermissionsEl.addElement("ManageRoles");
226 listPermissionsEl.addElement("ManageWeb");
227 }
228
229 Element permissionsEl = root.addElement("Permissions");
230
231 if (!minimal) {
232 permissionsEl.addElement("DeleteListItems");
233 permissionsEl.addElement("EditListItems");
234 permissionsEl.addElement("InsertListItems");
235 permissionsEl.addElement("ManageRoles");
236 permissionsEl.addElement("ManageWeb");
237 }
238
239 root.addElement("HasUniquePerm").setText(String.valueOf(true));
240 root.addElement("WorkspaceType").setText("DWS");
241 root.addElement("IsADMode").setText(String.valueOf(false));
242 root.addElement("DocUrl").setText(documentName);
243 root.addElement("Minimal").setText(String.valueOf(true));
244
245 Element resultsEl = root.addElement("Results");
246
247 resultsEl.addElement("Title").setText(group.getName());
248 resultsEl.addElement("LastUpdate");
249
250 User user = (User)request.getSession().getAttribute(WebKeys.USER);
251
252 ResponseElement responseElement = new MemberResponseElement(
253 user, false);
254
255 responseElement.addElement(resultsEl);
256
257 Element membersEl = resultsEl.addElement("Members");
258
259 List<User> users = UserLocalServiceUtil.getGroupUsers(
260 group.getGroupId());
261
262 for (User member : users) {
263 responseElement = new MemberResponseElement(member, true);
264
265 responseElement.addElement(membersEl);
266 }
267
268 if (!minimal) {
269 Element assigneesEl = resultsEl.addElement("Assignees");
270
271 for (User member : users) {
272 responseElement = new MemberResponseElement(member, true);
273
274 responseElement.addElement(assigneesEl);
275 }
276
277 Element listEl = resultsEl.addElement("List");
278
279 listEl.addAttribute("Name", "Documents");
280
281 listEl.addElement("ID");
282
283 String parentFolderPath = path;
284
285 pos = parentFolderPath.lastIndexOf("/");
286
287 if (pos != -1) {
288 parentFolderPath = parentFolderPath.substring(0, pos);
289 }
290
291 SharepointStorage storage = SharepointUtil.getStorage(
292 parentFolderPath);
293
294 SharepointRequest sharepointRequest = new SharepointRequest(
295 parentFolderPath);
296
297 storage.addDocumentElements(sharepointRequest, listEl);
298 }
299
300 return doc.asXML();
301 }
302
303 private static Log _log = LogFactoryUtil.getLog(SharepointServlet.class);
304
305 }