com.adobe.cq.social.group.client.api.AbstractCommunityGroupMemberListComponent Maven / Gradle / Ivy
/*************************************************************************
*
* ADOBE CONFIDENTIAL
* __________________
*
* Copyright 2012 Adobe Systems Incorporated
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any. The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
**************************************************************************/
package com.adobe.cq.social.group.client.api;
import com.adobe.cq.social.community.api.CommunityContext;
import com.adobe.cq.social.group.api.GroupUtil;
import com.adobe.cq.social.scf.ClientUtilities;
import com.adobe.cq.social.scf.PageInfo;
import com.adobe.cq.social.scf.QueryRequestInfo;
import com.adobe.cq.social.serviceusers.internal.ServiceUserWrapper;
import com.adobe.cq.social.user.api.AbstractCommunityAuthorizableCollection;
import com.adobe.granite.security.user.UserPropertiesService;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
public class AbstractCommunityGroupMemberListComponent extends AbstractCommunityAuthorizableCollection implements CommunityGroupMemberListComponent{
private static final Logger LOG = LoggerFactory.getLogger(AbstractCommunityGroupMemberListComponent.class);
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY, policy = ReferencePolicy.STATIC)
private SlingRepository repository;
@Reference
private ServiceUserWrapper serviceUserWrapper;
private final PageInfo pageInfo;
private final CommunityContext context;
private static final String USER_ADMIN = "communities-user-admin";
public AbstractCommunityGroupMemberListComponent(final Resource resource, final ClientUtilities utilities,
final QueryRequestInfo queryRequestInfo, final UserPropertiesService userPropertiesService,
final UserManager userManager,
final ServiceUserWrapper serviceUserWrapper,
SlingRepository repository) {
super(resource, utilities, userManager, queryRequestInfo);
final ResourceResolver resolver = resource.getResourceResolver();
this.context = resource.adaptTo(CommunityContext.class);
this.pageInfo = new PageInfo(this, utilities, pagination);
this.serviceUserWrapper = serviceUserWrapper;
this.repository = repository;
}
/*
* (non-Javadoc)
* @see com.adobe.cq.social.commons.client.api.SocialCollectionComponent#getTotalSize ()
*/
@Override
public int getTotalSize() {
final int size = getItems().size();
if (size < 10) {
return ((int) (pageInfo.getSelectedPage()) - 1) * 10 + size;
} else {
return (int) (pageInfo.getSelectedPage()) * 10 + 1;
}
}
@Override
public PageInfo getPageInfo() {
return pageInfo;
}
/*
* (non-Javadoc)
* @see com.adobe.cq.social.user.api.AbstractCommunityAuthorizableCollection#getChildResourceType()
*/
@Override
protected String getChildResourceType() {
return CommunityGroupUser.RESOURCE_TYPE;
}
@Override
public boolean isCanInvite() {
final ResourceResolver resolver = this.clientUtils.getRequest().getResourceResolver();
Session userAdminSession = null;
boolean canInviteGroupMember = false;
try {
userAdminSession = serviceUserWrapper.loginService(repository, USER_ADMIN);
userAdminSession.refresh(true);
UserManager um = ((JackrabbitSession) userAdminSession).getUserManager();
canInviteGroupMember = GroupUtil.canInviteGroupMember(resolver, context, serviceUserWrapper, repository, um);
} catch (RepositoryException e) {
LOG.error("Unable to check if user can invite", e);
} finally {
if (userAdminSession != null) {
userAdminSession.logout();
}
}
return canInviteGroupMember;
}
}