com.liferay.google.apps.connector.GGroupManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.google.apps.connector.GGroupManagerImpl.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.google.apps.connector;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.xml.Attribute;
import com.liferay.portal.kernel.xml.Document;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.kernel.xml.SAXReaderUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Brian Wing Shun Chan
 */
public class GGroupManagerImpl extends GBaseManagerImpl implements GGroupManager {

    public GGroupManagerImpl(GoogleAppsConnection googleApps) {
        super(googleApps);

        GAuthenticator gAuthenticator = googleApps.getGAuthenticator();

        groupURL = APPS_URL.concat("/group/2.0/").concat(gAuthenticator.getDomain());
    }

    @Override
    public void addGGroup(String groupEmailAddress, String groupName, String description, String emailPermission)
            throws GoogleAppsException {

        Document document = SAXReaderUtil.createDocument();

        Element atomEntryElement = addAtomEntry(document);

        addAppsProperty(atomEntryElement, "description", description);
        addAppsProperty(atomEntryElement, "emailPermission", emailPermission);
        addAppsProperty(atomEntryElement, "groupId", groupEmailAddress);
        addAppsProperty(atomEntryElement, "groupName", groupName);

        submitAdd(groupURL, document);
    }

    @Override
    public void addGGroupMember(String groupEmailAddress, String memberEmailAddress) throws GoogleAppsException {

        Document document = SAXReaderUtil.createDocument();

        Element atomEntryElement = addAtomEntry(document);

        addAppsProperty(atomEntryElement, "memberId", memberEmailAddress);

        StringBundler sb = new StringBundler(4);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/member");

        submitAdd(sb.toString(), document);
    }

    @Override
    public void addGGroupOwner(String groupEmailAddress, String ownerEmailAddress) throws GoogleAppsException {

        Document document = SAXReaderUtil.createDocument();

        Element atomEntryElement = addAtomEntry(document);

        addAppsProperty(atomEntryElement, "email", ownerEmailAddress);

        StringBundler sb = new StringBundler(4);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/owner");

        submitAdd(sb.toString(), document);
    }

    @Override
    public void deleteGGroup(String emailAddress) throws GoogleAppsException {
        submitDelete(getGroupURL(emailAddress));
    }

    @Override
    public void deleteGGroupMember(String groupEmailAddress, String memberEmailAddress) throws GoogleAppsException {

        StringBundler sb = new StringBundler(5);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/member/");
        sb.append(memberEmailAddress);

        submitDelete(sb.toString());
    }

    @Override
    public void deleteGGroupOwner(String groupEmailAddress, String ownerEmailAddress) throws GoogleAppsException {

        StringBundler sb = new StringBundler(5);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/owner/");
        sb.append(ownerEmailAddress);

        submitDelete(sb.toString());
    }

    @Override
    public GGroup getGGroup(String emailAddress) throws GoogleAppsException {
        Document document = getDocument(getGroupURL(emailAddress));

        if (hasError(document)) {
            if (_log.isInfoEnabled()) {
                _log.info(getErrorMessage(document));
            }

            return null;
        }

        Element atomEntryElement = document.getRootElement();

        return getGGroup(atomEntryElement);
    }

    @Override
    public GGroupMember getGGroupMember(String groupEmailAddress, String memberEmailAddress)
            throws GoogleAppsException {

        StringBundler sb = new StringBundler(5);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/member/");
        sb.append(memberEmailAddress);

        Document document = getDocument(sb.toString());

        if (hasError(document)) {
            if (_log.isInfoEnabled()) {
                _log.info(getErrorMessage(document));
            }

            return null;
        }

        Element atomEntryElement = document.getRootElement();

        return getGGroupMember(atomEntryElement);
    }

    @Override
    public List<GGroupMember> getGGroupMembers(String emailAddress) throws GoogleAppsException {

        List<GGroupMember> gGroupMembers = new ArrayList<GGroupMember>();

        StringBundler sb = new StringBundler(4);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(emailAddress);
        sb.append("/member");

        getGGroupMembers(gGroupMembers, sb.toString());

        return gGroupMembers;
    }

    @Override
    public GGroupOwner getGGroupOwner(String groupEmailAddress, String ownerEmailAddress)
            throws GoogleAppsException {

        StringBundler sb = new StringBundler(5);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(groupEmailAddress);
        sb.append("/owner/");
        sb.append(ownerEmailAddress);

        Document document = getDocument(sb.toString());

        if (hasError(document)) {
            if (_log.isInfoEnabled()) {
                _log.info(getErrorMessage(document));
            }

            return null;
        }

        Element atomEntryElement = document.getRootElement();

        return getGGroupOwner(atomEntryElement);
    }

    @Override
    public List<GGroupOwner> getGGroupOwners(String emailAddress) throws GoogleAppsException {

        List<GGroupOwner> gGroupOwners = new ArrayList<GGroupOwner>();

        StringBundler sb = new StringBundler(4);

        sb.append(groupURL);
        sb.append(StringPool.SLASH);
        sb.append(emailAddress);
        sb.append("/owner");

        getGGroupOwners(gGroupOwners, sb.toString());

        return gGroupOwners;
    }

    @Override
    public List<GGroup> getGGroups() throws GoogleAppsException {
        List<GGroup> gGroups = new ArrayList<GGroup>();

        getGGroups(gGroups, groupURL);

        return gGroups;
    }

    @Override
    public List<GGroup> getGGroups(long userId, boolean directOnly) throws GoogleAppsException {

        List<GGroup> gGroups = new ArrayList<GGroup>();

        StringBundler sb = new StringBundler(4);

        sb.append(groupURL);
        sb.append("?member=");
        sb.append(userId);
        sb.append("&directOnly=");
        sb.append(directOnly);

        getGGroups(gGroups, sb.toString());

        return gGroups;
    }

    @Override
    public void updateDescription(String emailAddress, String description) throws GoogleAppsException {

        Document document = getDocument(getGroupURL(emailAddress));

        if (hasError(document)) {
            if (_log.isInfoEnabled()) {
                _log.info(getErrorMessage(document));
            }

            return;
        }

        Element atomEntryElement = document.getRootElement();

        List<Element> appsPropertyElements = atomEntryElement.elements(getAppsQName("property"));

        for (Element appsPropertyElement : appsPropertyElements) {
            String name = appsPropertyElement.attributeValue("name");

            if (name.equals("description")) {
                Attribute valueAttribute = appsPropertyElement.attribute("value");

                valueAttribute.setValue(description);
            }
        }

        submitUpdate(getGroupURL(emailAddress), document);
    }

    protected GGroup getGGroup(Element atomEntryElement) {
        GGroup gGroup = new GGroup();

        List<Element> appsPropertyElements = atomEntryElement.elements(getAppsQName("property"));

        for (Element appsPropertyElement : appsPropertyElements) {
            String name = appsPropertyElement.attributeValue("name");
            String value = appsPropertyElement.attributeValue("value");

            if (name.equals("description")) {
                gGroup.setDescription(value);
            } else if (name.equals("emailPermission")) {
                gGroup.setEmailPermission(value);
            } else if (name.equals("groupId")) {
                gGroup.setEmailAddress(value);
            } else if (name.equals("groupName")) {
                gGroup.setName(value);
            } else if (name.equals("permissionPreset")) {
                gGroup.setPermissionPreset(value);
            }
        }

        return gGroup;
    }

    protected GGroupMember getGGroupMember(Element atomEntryElement) throws GoogleAppsException {

        GGroupMember gGroupMember = new GGroupMember();

        List<Element> appsPropertyElements = atomEntryElement.elements(getAppsQName("property"));

        for (Element appsPropertyElement : appsPropertyElements) {
            String name = appsPropertyElement.attributeValue("name");
            String value = appsPropertyElement.attributeValue("value");

            if (name.equals("directMember")) {
                gGroupMember.setDirect(GetterUtil.getBoolean(value));
            } else if (name.equals("memberId")) {
                gGroupMember.setEmailAddress(value);
            } else if (name.equals("memberType")) {
                gGroupMember.setType(value);
            }
        }

        String type = gGroupMember.getType();

        if (type.equals("Group")) {
            GGroup gGroup = getGGroup(gGroupMember.getEmailAddress());

            gGroupMember.setGGroup(gGroup);
        } else if (type.equals("User")) {
            GUserManager gUserManager = googleApps.getGUserManager();

            GUser gUser = gUserManager.getGUser(gGroupMember.getEmailAddress());

            gGroupMember.setGUser(gUser);
        }

        return gGroupMember;
    }

    protected void getGGroupMembers(final List<GGroupMember> gGroupMembers, String url) throws GoogleAppsException {

        Document document = getDocument(url);

        Element atomFeedElement = document.getRootElement();

        List<Element> atomEntryElements = atomFeedElement.elements(getAtomQName("entry"));

        for (Element atomEntryElement : atomEntryElements) {
            GGroupMember gGroupMember = getGGroupMember(atomEntryElement);

            gGroupMembers.add(gGroupMember);
        }

        new GetNextItems(url, atomFeedElement) {

            @Override
            public void getNextItems(String nextURL) throws GoogleAppsException {

                getGGroupMembers(gGroupMembers, nextURL);
            }

        };
    }

    protected GGroupOwner getGGroupOwner(Element atomEntryElement) throws GoogleAppsException {

        GGroupOwner gGroupOwner = new GGroupOwner();

        List<Element> appsPropertyElements = atomEntryElement.elements(getAppsQName("property"));

        for (Element appsPropertyElement : appsPropertyElements) {
            String name = appsPropertyElement.attributeValue("name");
            String value = appsPropertyElement.attributeValue("value");

            if (name.equals("email")) {
                gGroupOwner.setEmailAddress(value);
            } else if (name.equals("type")) {
                gGroupOwner.setType(value);
            }
        }

        String type = gGroupOwner.getType();

        if (type.equals("Group")) {
            GGroup gGroup = getGGroup(gGroupOwner.getEmailAddress());

            gGroupOwner.setGGroup(gGroup);
        } else if (type.equals("User")) {
            GUserManager gUserManager = googleApps.getGUserManager();

            GUser gUser = gUserManager.getGUser(gGroupOwner.getEmailAddress());

            gGroupOwner.setGUser(gUser);
        }

        return gGroupOwner;
    }

    protected void getGGroupOwners(final List<GGroupOwner> gGroupOwners, String url) throws GoogleAppsException {

        Document document = getDocument(url);

        Element atomFeedElement = document.getRootElement();

        List<Element> atomEntryElements = atomFeedElement.elements(getAtomQName("entry"));

        for (Element atomEntryElement : atomEntryElements) {
            GGroupOwner gGroupOwner = getGGroupOwner(atomEntryElement);

            gGroupOwners.add(gGroupOwner);
        }

        new GetNextItems(url, atomFeedElement) {

            @Override
            public void getNextItems(String nextURL) throws GoogleAppsException {

                getGGroupOwners(gGroupOwners, nextURL);
            }

        };
    }

    protected void getGGroups(final List<GGroup> gGroups, String url) throws GoogleAppsException {

        Document document = getDocument(url);

        Element atomFeedElement = document.getRootElement();

        List<Element> atomEntryElements = atomFeedElement.elements(getAtomQName("entry"));

        for (Element atomEntryElement : atomEntryElements) {
            GGroup gGroup = getGGroup(atomEntryElement);

            gGroups.add(gGroup);
        }

        new GetNextItems(url, atomFeedElement) {

            @Override
            public void getNextItems(String nextURL) throws GoogleAppsException {

                getGGroups(gGroups, nextURL);
            }

        };
    }

    protected String getGroupURL(String emailAddress) {
        return groupURL.concat(StringPool.SLASH).concat(emailAddress);
    }

    protected String groupURL;

    private static Log _log = LogFactoryUtil.getLog(GGroupManagerImpl.class);

}