001
014
015 package com.liferay.portal.googleapps;
016
017 import com.liferay.portal.kernel.googleapps.GGroup;
018 import com.liferay.portal.kernel.googleapps.GGroupManager;
019 import com.liferay.portal.kernel.googleapps.GGroupMember;
020 import com.liferay.portal.kernel.googleapps.GGroupOwner;
021 import com.liferay.portal.kernel.googleapps.GUser;
022 import com.liferay.portal.kernel.googleapps.GUserManager;
023 import com.liferay.portal.kernel.googleapps.GoogleAppsException;
024 import com.liferay.portal.kernel.log.Log;
025 import com.liferay.portal.kernel.log.LogFactoryUtil;
026 import com.liferay.portal.kernel.util.GetterUtil;
027 import com.liferay.portal.kernel.util.StringBundler;
028 import com.liferay.portal.kernel.util.StringPool;
029 import com.liferay.portal.kernel.xml.Attribute;
030 import com.liferay.portal.kernel.xml.Document;
031 import com.liferay.portal.kernel.xml.Element;
032 import com.liferay.portal.kernel.xml.SAXReaderUtil;
033
034 import java.util.ArrayList;
035 import java.util.List;
036
037
040 public class GGroupManagerImpl
041 extends GBaseManagerImpl implements GGroupManager {
042
043 public GGroupManagerImpl(GoogleApps googleApps) {
044 super(googleApps);
045
046 GAuthenticator gAuthenticator = googleApps.getGAuthenticator();
047
048 groupURL = APPS_URL.concat("/group/2.0/").concat(
049 gAuthenticator.getDomain());
050 }
051
052 public void addGGroupMember(
053 String groupEmailAddress, String memberEmailAddress)
054 throws GoogleAppsException {
055
056 Document document = SAXReaderUtil.createDocument();
057
058 Element atomEntryElement = addAtomEntry(document);
059
060 addAppsProperty(atomEntryElement, "memberId", memberEmailAddress);
061
062 StringBundler sb = new StringBundler(4);
063
064 sb.append(groupURL);
065 sb.append(StringPool.SLASH);
066 sb.append(groupEmailAddress);
067 sb.append("/member");
068
069 submitAdd(sb.toString(), document);
070 }
071
072 public void addGGroupOwner(
073 String groupEmailAddress, String ownerEmailAddress)
074 throws GoogleAppsException {
075
076 Document document = SAXReaderUtil.createDocument();
077
078 Element atomEntryElement = addAtomEntry(document);
079
080 addAppsProperty(atomEntryElement, "email", ownerEmailAddress);
081
082 StringBundler sb = new StringBundler(4);
083
084 sb.append(groupURL);
085 sb.append(StringPool.SLASH);
086 sb.append(groupEmailAddress);
087 sb.append("/owner");
088
089 submitAdd(sb.toString(), document);
090 }
091
092 public void deleteGGroup(String emailAddress) throws GoogleAppsException {
093 submitDelete(getGroupURL(emailAddress));
094 }
095
096 public void deleteGGroupMember(
097 String groupEmailAddress, String memberEmailAddress)
098 throws GoogleAppsException {
099
100 StringBundler sb = new StringBundler(5);
101
102 sb.append(groupURL);
103 sb.append(StringPool.SLASH);
104 sb.append(groupEmailAddress);
105 sb.append("/member/");
106 sb.append(memberEmailAddress);
107
108 submitDelete(sb.toString());
109 }
110
111 public void deleteGGroupOwner(
112 String groupEmailAddress, String ownerEmailAddress)
113 throws GoogleAppsException {
114
115 StringBundler sb = new StringBundler(5);
116
117 sb.append(groupURL);
118 sb.append(StringPool.SLASH);
119 sb.append(groupEmailAddress);
120 sb.append("/owner/");
121 sb.append(ownerEmailAddress);
122
123 submitDelete(sb.toString());
124 }
125
126 public GGroup getGGroup(String emailAddress) throws GoogleAppsException {
127 Document document = getDocument(getGroupURL(emailAddress));
128
129 if (hasError(document)) {
130 if (_log.isInfoEnabled()) {
131 _log.info(getErrorMessage(document));
132 }
133
134 return null;
135 }
136
137 Element atomEntryElement = document.getRootElement();
138
139 return getGGroup(atomEntryElement);
140 }
141
142 public GGroupMember getGGroupMember(
143 String groupEmailAddress, String memberEmailAddress)
144 throws GoogleAppsException {
145
146 StringBundler sb = new StringBundler(5);
147
148 sb.append(groupURL);
149 sb.append(StringPool.SLASH);
150 sb.append(groupEmailAddress);
151 sb.append("/member/");
152 sb.append(memberEmailAddress);
153
154 Document document = getDocument(sb.toString());
155
156 if (hasError(document)) {
157 if (_log.isInfoEnabled()) {
158 _log.info(getErrorMessage(document));
159 }
160
161 return null;
162 }
163
164 Element atomEntryElement = document.getRootElement();
165
166 return getGGroupMember(atomEntryElement);
167 }
168
169 public List<GGroupMember> getGGroupMembers(String emailAddress)
170 throws GoogleAppsException {
171
172 List<GGroupMember> gGroupMembers = new ArrayList<GGroupMember>();
173
174 StringBundler sb = new StringBundler(4);
175
176 sb.append(groupURL);
177 sb.append(StringPool.SLASH);
178 sb.append(emailAddress);
179 sb.append("/member");
180
181 getGGroupMembers(gGroupMembers, sb.toString());
182
183 return gGroupMembers;
184 }
185
186 public GGroupOwner getGGroupOwner(
187 String groupEmailAddress, String ownerEmailAddress)
188 throws GoogleAppsException {
189
190 StringBundler sb = new StringBundler(5);
191
192 sb.append(groupURL);
193 sb.append(StringPool.SLASH);
194 sb.append(groupEmailAddress);
195 sb.append("/owner/");
196 sb.append(ownerEmailAddress);
197
198 Document document = getDocument(sb.toString());
199
200 if (hasError(document)) {
201 if (_log.isInfoEnabled()) {
202 _log.info(getErrorMessage(document));
203 }
204
205 return null;
206 }
207
208 Element atomEntryElement = document.getRootElement();
209
210 return getGGroupOwner(atomEntryElement);
211 }
212
213 public List<GGroupOwner> getGGroupOwners(String emailAddress)
214 throws GoogleAppsException {
215
216 List<GGroupOwner> gGroupOwners = new ArrayList<GGroupOwner>();
217
218 StringBundler sb = new StringBundler(4);
219
220 sb.append(groupURL);
221 sb.append(StringPool.SLASH);
222 sb.append(emailAddress);
223 sb.append("/owner");
224
225 getGGroupOwners(gGroupOwners, sb.toString());
226
227 return gGroupOwners;
228 }
229
230 public List<GGroup> getGGroups() throws GoogleAppsException {
231 List<GGroup> gGroups = new ArrayList<GGroup>();
232
233 getGGroups(gGroups, groupURL);
234
235 return gGroups;
236 }
237
238 public List<GGroup> getGGroups(long userId, boolean directOnly)
239 throws GoogleAppsException {
240
241 List<GGroup> gGroups = new ArrayList<GGroup>();
242
243 StringBundler sb = new StringBundler(4);
244
245 sb.append(groupURL);
246 sb.append("?member=");
247 sb.append(userId);
248 sb.append("&directOnly=");
249 sb.append(directOnly);
250
251 getGGroups(gGroups, sb.toString());
252
253 return gGroups;
254 }
255
256 public void updateDescription(String emailAddress, String description)
257 throws GoogleAppsException {
258
259 Document document = getDocument(getGroupURL(emailAddress));
260
261 if (hasError(document)) {
262 if (_log.isInfoEnabled()) {
263 _log.info(getErrorMessage(document));
264 }
265
266 return;
267 }
268
269 Element atomEntryElement = document.getRootElement();
270
271 List<Element> appsPropertyElements = atomEntryElement.elements(
272 getAppsQName("property"));
273
274 for (Element appsPropertyElement : appsPropertyElements) {
275 String name = appsPropertyElement.attributeValue("name");
276
277 if (name.equals("description")) {
278 Attribute valueAttribute = appsPropertyElement.attribute(
279 "value");
280
281 valueAttribute.setValue(description);
282 }
283 }
284
285 submitUpdate(getGroupURL(emailAddress), document);
286 }
287
288 protected GGroup getGGroup(Element atomEntryElement) {
289 GGroup gGroup = new GGroup();
290
291 List<Element> appsPropertyElements = atomEntryElement.elements(
292 getAppsQName("property"));
293
294 for (Element appsPropertyElement : appsPropertyElements) {
295 String name = appsPropertyElement.attributeValue("name");
296 String value = appsPropertyElement.attributeValue("value");
297
298 if (name.equals("description")) {
299 gGroup.setDescription(value);
300 }
301 else if (name.equals("emailPermission")) {
302 gGroup.setEmailPermission(value);
303 }
304 else if (name.equals("groupId")) {
305 gGroup.setEmailAddress(value);
306 }
307 else if (name.equals("groupName")) {
308 gGroup.setName(value);
309 }
310 else if (name.equals("permissionPreset")) {
311 gGroup.setPermissionPreset(value);
312 }
313 }
314
315 return gGroup;
316 }
317
318 protected GGroupMember getGGroupMember(Element atomEntryElement)
319 throws GoogleAppsException {
320
321 GGroupMember gGroupMember = new GGroupMember();
322
323 List<Element> appsPropertyElements = atomEntryElement.elements(
324 getAppsQName("property"));
325
326 for (Element appsPropertyElement : appsPropertyElements) {
327 String name = appsPropertyElement.attributeValue("name");
328 String value = appsPropertyElement.attributeValue("value");
329
330 if (name.equals("directMember")) {
331 gGroupMember.setDirect(GetterUtil.getBoolean(value));
332 }
333 else if (name.equals("memberId")) {
334 gGroupMember.setEmailAddress(value);
335 }
336 else if (name.equals("memberType")) {
337 gGroupMember.setType(value);
338 }
339 }
340
341 String type = gGroupMember.getType();
342
343 if (type.equals("Group")) {
344 GGroup gGroup = getGGroup(gGroupMember.getEmailAddress());
345
346 gGroupMember.setGGroup(gGroup);
347 }
348 else if (type.equals("User")) {
349 GUserManager gUserManager = googleApps.getGUserManager();
350
351 GUser gUser = gUserManager.getGUser(gGroupMember.getEmailAddress());
352
353 gGroupMember.setGUser(gUser);
354 }
355
356 return gGroupMember;
357 }
358
359 protected void getGGroupMembers(
360 final List<GGroupMember> gGroupMembers, String url)
361 throws GoogleAppsException {
362
363 Document document = getDocument(url);
364
365 Element atomFeedElement = document.getRootElement();
366
367 List<Element> atomEntryElements = atomFeedElement.elements(
368 getAtomQName("entry"));
369
370 for (Element atomEntryElement : atomEntryElements) {
371 GGroupMember gGroupMember = getGGroupMember(atomEntryElement);
372
373 gGroupMembers.add(gGroupMember);
374 }
375
376 new GetNextItems(url, atomFeedElement) {
377
378 public void getNextItems(String nextURL)
379 throws GoogleAppsException {
380
381 getGGroupMembers(gGroupMembers, nextURL);
382 }
383
384 };
385 }
386
387 protected GGroupOwner getGGroupOwner(Element atomEntryElement)
388 throws GoogleAppsException {
389
390 GGroupOwner gGroupOwner = new GGroupOwner();
391
392 List<Element> appsPropertyElements = atomEntryElement.elements(
393 getAppsQName("property"));
394
395 for (Element appsPropertyElement : appsPropertyElements) {
396 String name = appsPropertyElement.attributeValue("name");
397 String value = appsPropertyElement.attributeValue("value");
398
399 if (name.equals("email")) {
400 gGroupOwner.setEmailAddress(value);
401 }
402 else if (name.equals("type")) {
403 gGroupOwner.setType(value);
404 }
405 }
406
407 String type = gGroupOwner.getType();
408
409 if (type.equals("Group")) {
410 GGroup gGroup = getGGroup(gGroupOwner.getEmailAddress());
411
412 gGroupOwner.setGGroup(gGroup);
413 }
414 else if (type.equals("User")) {
415 GUserManager gUserManager = googleApps.getGUserManager();
416
417 GUser gUser = gUserManager.getGUser(gGroupOwner.getEmailAddress());
418
419 gGroupOwner.setGUser(gUser);
420 }
421
422 return gGroupOwner;
423 }
424
425 protected void getGGroupOwners(
426 final List<GGroupOwner> gGroupOwners, String url)
427 throws GoogleAppsException {
428
429 Document document = getDocument(url);
430
431 Element atomFeedElement = document.getRootElement();
432
433 List<Element> atomEntryElements = atomFeedElement.elements(
434 getAtomQName("entry"));
435
436 for (Element atomEntryElement : atomEntryElements) {
437 GGroupOwner gGroupOwner = getGGroupOwner(atomEntryElement);
438
439 gGroupOwners.add(gGroupOwner);
440 }
441
442 new GetNextItems(url, atomFeedElement) {
443
444 public void getNextItems(String nextURL)
445 throws GoogleAppsException {
446
447 getGGroupOwners(gGroupOwners, nextURL);
448 }
449
450 };
451 }
452
453 protected void getGGroups(final List<GGroup> gGroups, String url)
454 throws GoogleAppsException {
455
456 Document document = getDocument(url);
457
458 Element atomFeedElement = document.getRootElement();
459
460 List<Element> atomEntryElements = atomFeedElement.elements(
461 getAtomQName("entry"));
462
463 for (Element atomEntryElement : atomEntryElements) {
464 GGroup gGroup = getGGroup(atomEntryElement);
465
466 gGroups.add(gGroup);
467 }
468
469 new GetNextItems(url, atomFeedElement) {
470
471 public void getNextItems(String nextURL)
472 throws GoogleAppsException {
473
474 getGGroups(gGroups, nextURL);
475 }
476
477 };
478 }
479
480 protected String getGroupURL(String emailAddress) {
481 return groupURL.concat(StringPool.SLASH).concat(emailAddress);
482 }
483
484 protected String groupURL;
485
486 private static Log _log = LogFactoryUtil.getLog(GGroupManagerImpl.class);
487
488 }