com.liferay.site.my.sites.web.internal.portlet.MySitesPortlet.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.site.my.sites.web.internal.portlet.MySitesPortlet.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.site.my.sites.web.internal.portlet;

import com.liferay.portal.kernel.exception.MembershipRequestCommentsException;
import com.liferay.portal.kernel.model.MembershipRequestConstants;
import com.liferay.portal.kernel.model.Release;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.service.MembershipRequestLocalService;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.service.ServiceContextFactory;
import com.liferay.portal.kernel.service.UserLocalService;
import com.liferay.portal.kernel.service.UserService;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.liveusers.LiveUsers;
import com.liferay.site.my.sites.web.internal.constants.MySitesPortletKeys;

import java.util.HashSet;
import java.util.Set;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Eudaldo Alonso
 */
@Component(immediate = true, property = { "com.liferay.portlet.css-class-wrapper=portlet-my-sites",
        "com.liferay.portlet.display-category=category.community",
        "com.liferay.portlet.icon=/icons/communities.png", "com.liferay.portlet.preferences-owned-by-group=true",
        "com.liferay.portlet.private-request-attributes=false",
        "com.liferay.portlet.private-session-attributes=false", "com.liferay.portlet.render-weight=50",
        "com.liferay.portlet.use-default-template=true", "javax.portlet.display-name=My Sites",
        "javax.portlet.expiration-cache=0", "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp", "javax.portlet.name=" + MySitesPortletKeys.MY_SITES,
        "javax.portlet.resource-bundle=content.Language", "javax.portlet.security-role-ref=power-user,user",
        "javax.portlet.supports.mime-type=text/html" }, service = Portlet.class)
public class MySitesPortlet extends MVCPortlet {

    public void postMembershipRequest(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

        long groupId = ParamUtil.getLong(actionRequest, "groupId");
        String comments = ParamUtil.getString(actionRequest, "comments");

        ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest);

        long userId = serviceContext.getUserId();

        if (_membershipRequestLocalService.hasMembershipRequest(userId, groupId,
                MembershipRequestConstants.STATUS_PENDING)) {

            SessionErrors.add(actionRequest, "membershipAlreadyRequested");
        } else {
            _membershipRequestLocalService.addMembershipRequest(userId, groupId, comments, serviceContext);

            SessionMessages.add(actionRequest, "membershipRequestSent");

            addSuccessMessage(actionRequest, actionResponse);
        }

        sendRedirect(actionRequest, actionResponse);
    }

    public void updateGroupUsers(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY);

        long groupId = ParamUtil.getLong(actionRequest, "groupId");

        long[] addUserIds = StringUtil.split(ParamUtil.getString(actionRequest, "addUserIds"), 0L);

        addUserIds = filterAddUserIds(groupId, addUserIds);

        long[] removeUserIds = StringUtil.split(ParamUtil.getString(actionRequest, "removeUserIds"), 0L);

        removeUserIds = filterRemoveUserIds(groupId, removeUserIds);

        ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest);

        _userService.addGroupUsers(groupId, addUserIds, serviceContext);
        _userService.unsetGroupUsers(groupId, removeUserIds, serviceContext);

        LiveUsers.joinGroup(themeDisplay.getCompanyId(), groupId, addUserIds);
        LiveUsers.leaveGroup(themeDisplay.getCompanyId(), groupId, removeUserIds);
    }

    protected long[] filterAddUserIds(long groupId, long[] userIds) throws Exception {

        Set<Long> filteredUserIds = new HashSet<>(userIds.length);

        for (long userId : userIds) {
            if (!_userLocalService.hasGroupUser(groupId, userId)) {
                filteredUserIds.add(userId);
            }
        }

        return ArrayUtil.toArray(filteredUserIds.toArray(new Long[filteredUserIds.size()]));
    }

    protected long[] filterRemoveUserIds(long groupId, long[] userIds) throws Exception {

        Set<Long> filteredUserIds = new HashSet<>(userIds.length);

        for (long userId : userIds) {
            if (_userLocalService.hasGroupUser(groupId, userId)) {
                filteredUserIds.add(userId);
            }
        }

        return ArrayUtil.toArray(filteredUserIds.toArray(new Long[filteredUserIds.size()]));
    }

    @Override
    protected boolean isSessionErrorException(Throwable cause) {
        if (cause instanceof MembershipRequestCommentsException || cause instanceof PrincipalException
                || super.isSessionErrorException(cause)) {

            return true;
        }

        return false;
    }

    @Reference(unbind = "-")
    protected void setMembershipRequestLocalService(MembershipRequestLocalService membershipRequestLocalService) {

        _membershipRequestLocalService = membershipRequestLocalService;
    }

    @Reference(target = "(&(release.bundle.symbolic.name=com.liferay.site.my.sites.web)(release.schema.version=1.0.0))", unbind = "-")
    protected void setRelease(Release release) {
    }

    @Reference(unbind = "-")
    protected void setUserLocalService(UserLocalService userLocalService) {
        _userLocalService = userLocalService;
    }

    @Reference(unbind = "-")
    protected void setUserService(UserService userService) {
        _userService = userService;
    }

    private MembershipRequestLocalService _membershipRequestLocalService;
    private UserLocalService _userLocalService;
    private UserService _userService;

}