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.ServletResponseUtil;
020 import com.liferay.portal.kernel.util.ContentTypes;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.HttpUtil;
023 import com.liferay.portal.kernel.util.StringBundler;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.kernel.xml.Document;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portal.kernel.xml.SAXReaderUtil;
028 import com.liferay.portal.model.Group;
029 import com.liferay.portal.model.Role;
030 import com.liferay.portal.model.User;
031 import com.liferay.portal.service.GroupServiceUtil;
032 import com.liferay.portal.service.RoleLocalServiceUtil;
033 import com.liferay.portal.service.UserLocalServiceUtil;
034 import com.liferay.portal.sharepoint.dws.MemberResponseElement;
035 import com.liferay.portal.sharepoint.dws.ResponseElement;
036 import com.liferay.portal.sharepoint.dws.RoleResponseElement;
037 import com.liferay.portal.util.PortalUtil;
038 import com.liferay.portal.util.WebKeys;
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 @Override
052 protected void doPost(
053 HttpServletRequest request, HttpServletResponse response) {
054
055 try {
056 getDwsMetaDataResponse(request, response);
057 }
058 catch (Exception e) {
059 _log.error(e, e);
060 }
061 }
062
063 protected void getDwsMetaDataResponse(
064 HttpServletRequest request, HttpServletResponse response)
065 throws Exception {
066
067 StringBundler sb = new StringBundler(12);
068
069 sb.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"");
070 sb.append("http:
071 sb.append("<SOAP-ENV:Header/>");
072 sb.append("<SOAP-ENV:Body>");
073 sb.append("<GetDwsMetaDataResponse xmlns=\"");
074 sb.append("http:
075 sb.append("<GetDwsMetaDataResult>");
076
077 String results = getResults(request);
078
079 int pos = results.indexOf("\n");
080
081 if (pos != -1) {
082 results = results.substring(pos + 1);
083 }
084
085 results = results.replaceAll("<", "<");
086 results = results.replaceAll(">", ">");
087
088 sb.append(results);
089
090 sb.append("</GetDwsMetaDataResult>");
091 sb.append("</GetDwsMetaDataResponse>");
092 sb.append("</SOAP-ENV:Body>");
093 sb.append("</SOAP-ENV:Envelope>");
094
095 response.setContentType(ContentTypes.TEXT_XML_UTF8);
096
097 ServletResponseUtil.write(response, sb.toString());
098 }
099
100 protected String getResults(HttpServletRequest request)
101 throws Exception {
102
103 String xml = StringUtil.read(request.getInputStream());
104
105 String documentName = null;
106
107 int beginPos = xml.lastIndexOf("<document>");
108 int endPos = xml.lastIndexOf("</document>");
109
110 if (beginPos != -1) {
111 documentName = xml.substring(beginPos + 10, endPos);
112
113 documentName = HttpUtil.decodeURL(documentName);
114 }
115
116 String path = documentName;
117
118 int pos = documentName.lastIndexOf("sharepoint/");
119
120 if (pos != -1) {
121 path = path.substring(pos + 11);
122 }
123
124 Group group = GroupServiceUtil.getGroup(
125 SharepointUtil.getGroupId(path));
126
127 boolean minimal = false;
128
129 beginPos = xml.lastIndexOf("<minimal>");
130 endPos = xml.lastIndexOf("</minimal>");
131
132 if (beginPos != -1) {
133 minimal = GetterUtil.getBoolean(
134 xml.substring(beginPos + 9, endPos));
135 }
136
137 Document doc = SAXReaderUtil.createDocument();
138
139 Element root = doc.addElement("Results");
140
141 String url =
142 "http:
143 "/sharepoint";
144
145 root.addElement("SubscribeUrl").setText(url);
146 root.addElement("MtgInstance");
147 root.addElement("SettingUrl").setText(url);
148 root.addElement("PermsUrl").setText(url);
149 root.addElement("UserInfoUrl").setText(url);
150
151 Element rolesEl = root.addElement("Roles");
152
153 List<Role> roles = RoleLocalServiceUtil.getRoles(
154 PortalUtil.getCompanyId(request));
155
156 for (Role role : roles) {
157 ResponseElement responseElement = new RoleResponseElement(role);
158
159 responseElement.addElement(rolesEl);
160 }
161
162 if (!minimal) {
163 Element schemaEl = root.addElement("Schema");
164
165 schemaEl.addAttribute("Name", "Documents");
166 schemaEl.addAttribute("Url", group.getName());
167
168 Element fieldEl = schemaEl.addElement("Field");
169
170 fieldEl.addAttribute("Name", "FileLeafRef");
171 fieldEl.addAttribute("Required", "true");
172 fieldEl.addAttribute("Type", "Invalid");
173
174 fieldEl.addElement("Choices");
175
176 fieldEl = schemaEl.addElement("Field");
177
178 fieldEl.addAttribute("Name", "_SourceUrl");
179 fieldEl.addAttribute("Required", "false");
180 fieldEl.addAttribute("Type", "Text");
181
182 fieldEl.addElement("Choices");
183
184 fieldEl = schemaEl.addElement("Field");
185
186 fieldEl.addAttribute("Name", "_SharedFileIndex");
187 fieldEl.addAttribute("Required", "false");
188 fieldEl.addAttribute("Type", "Text");
189
190 fieldEl.addElement("Choices");
191
192 fieldEl = schemaEl.addElement("Field");
193
194 fieldEl.addAttribute("Name", "Order");
195 fieldEl.addAttribute("Required", "false");
196 fieldEl.addAttribute("Type", "Number");
197
198 fieldEl.addElement("Choices");
199
200 fieldEl = schemaEl.addElement("Field");
201
202 fieldEl.addAttribute("Name", "Title");
203 fieldEl.addAttribute("Required", "false");
204 fieldEl.addAttribute("Type", "Text");
205
206 fieldEl.addElement("Choices");
207
208 Element listInfoEl = root.addElement("ListInfo");
209
210 listInfoEl.addAttribute("Name", "Links");
211
212 listInfoEl.addElement("Moderated").setText(String.valueOf(false));
213
214 Element listPermissionsEl = listInfoEl.addElement(
215 "ListPermissions");
216
217 listPermissionsEl.addElement("DeleteListItems");
218 listPermissionsEl.addElement("EditListItems");
219 listPermissionsEl.addElement("InsertListItems");
220 listPermissionsEl.addElement("ManageRoles");
221 listPermissionsEl.addElement("ManageWeb");
222 }
223
224 Element permissionsEl = root.addElement("Permissions");
225
226 if (!minimal) {
227 permissionsEl.addElement("DeleteListItems");
228 permissionsEl.addElement("EditListItems");
229 permissionsEl.addElement("InsertListItems");
230 permissionsEl.addElement("ManageRoles");
231 permissionsEl.addElement("ManageWeb");
232 }
233
234 root.addElement("HasUniquePerm").setText(String.valueOf(true));
235 root.addElement("WorkspaceType").setText("DWS");
236 root.addElement("IsADMode").setText(String.valueOf(false));
237 root.addElement("DocUrl").setText(documentName);
238 root.addElement("Minimal").setText(String.valueOf(true));
239
240 Element resultsEl = root.addElement("Results");
241
242 resultsEl.addElement("Title").setText(group.getName());
243 resultsEl.addElement("LastUpdate");
244
245 User user = (User)request.getSession().getAttribute(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 }