mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
[REPO-5184] [REPO-5185] REST API: Add endpoint to expose the groups of a site (#669)
* [REPO-5185] REST API: Add endpoint to expose the groups of a site * fix comments * * IsMemberOfGroup is added and where class added * * fixed braces * fixed comments * * rename method names * update pom * fix pox conflicts * fix pagination
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -37,7 +37,7 @@
|
|||||||
<dir.root>${project.build.directory}/alf_data</dir.root>
|
<dir.root>${project.build.directory}/alf_data</dir.root>
|
||||||
<img.exe>convert</img.exe>
|
<img.exe>convert</img.exe>
|
||||||
|
|
||||||
<dependency.alfresco-repository.version>8.232</dependency.alfresco-repository.version>
|
<dependency.alfresco-repository.version>8.235</dependency.alfresco-repository.version>
|
||||||
<dependency.alfresco-data-model.version>8.132</dependency.alfresco-data-model.version>
|
<dependency.alfresco-data-model.version>8.132</dependency.alfresco-data-model.version>
|
||||||
<dependency.alfresco-core.version>8.36</dependency.alfresco-core.version>
|
<dependency.alfresco-core.version>8.36</dependency.alfresco-core.version>
|
||||||
|
|
||||||
|
@@ -67,6 +67,12 @@ public interface Sites
|
|||||||
String getSiteRole(String siteId);
|
String getSiteRole(String siteId);
|
||||||
String getSiteRole(String siteId, String personId);
|
String getSiteRole(String siteId, String personId);
|
||||||
|
|
||||||
|
CollectionWithPagingInfo<SiteGroup> getSiteGroupMemberships(String siteId, Parameters parameters);
|
||||||
|
SiteGroup addSiteGroupMembership(String siteId, SiteGroup group);
|
||||||
|
SiteGroup getSiteGroupMembership(String siteId, String groupId);
|
||||||
|
SiteGroup updateSiteGroupMembership(String siteId, SiteGroup group);
|
||||||
|
void removeSiteGroupMembership(String groupId, String siteId);
|
||||||
|
|
||||||
String PARAM_PERMANENT = "permanent";
|
String PARAM_PERMANENT = "permanent";
|
||||||
String PARAM_SKIP_ADDTOFAVORITES = "skipAddToFavorites";
|
String PARAM_SKIP_ADDTOFAVORITES = "skipAddToFavorites";
|
||||||
String PARAM_SKIP_SURF_CONFIGURATION = "skipConfiguration";
|
String PARAM_SKIP_SURF_CONFIGURATION = "skipConfiguration";
|
||||||
|
@@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.rest.api.groups;
|
||||||
|
|
||||||
|
import org.alfresco.rest.api.Sites;
|
||||||
|
import org.alfresco.rest.api.model.SiteGroup;
|
||||||
|
import org.alfresco.rest.api.sites.SiteEntityResource;
|
||||||
|
import org.alfresco.rest.framework.WebApiDescription;
|
||||||
|
import org.alfresco.rest.framework.resource.RelationshipResource;
|
||||||
|
import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction;
|
||||||
|
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
|
||||||
|
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||||
|
import org.alfresco.util.ParameterCheck;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@RelationshipResource(name = "group-members", entityResource = SiteEntityResource.class, title = "Site Groups")
|
||||||
|
public class SiteGroupsRelation implements RelationshipResourceAction.Read<SiteGroup>,
|
||||||
|
RelationshipResourceAction.Delete,
|
||||||
|
RelationshipResourceAction.Create<SiteGroup>,
|
||||||
|
RelationshipResourceAction.Update<SiteGroup>,
|
||||||
|
RelationshipResourceAction.ReadById<SiteGroup>,
|
||||||
|
InitializingBean
|
||||||
|
{
|
||||||
|
|
||||||
|
private Sites sites;
|
||||||
|
|
||||||
|
public void setSites(Sites sites)
|
||||||
|
{
|
||||||
|
this.sites = sites;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet()
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatory("sites", this.sites);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST sites/<siteId>/group-members
|
||||||
|
* <p>
|
||||||
|
* Adds groups to site
|
||||||
|
* <p>
|
||||||
|
* If group does not exist throws NotFoundException (status 404).
|
||||||
|
*
|
||||||
|
* @see RelationshipResourceAction.Create#create(String, List, Parameters)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@WebApiDescription(title = "Adds groups as a member of site siteId.")
|
||||||
|
public List<SiteGroup> create(String siteId, List<SiteGroup> siteMembers, Parameters parameters)
|
||||||
|
{
|
||||||
|
return siteMembers.stream().map((group) -> sites.addSiteGroupMembership(siteId, group)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a paged list of all the groups of the site 'siteId'.
|
||||||
|
* <p>
|
||||||
|
* If siteId does not exist, throws NotFoundException (status 404).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@WebApiDescription(title = "A paged list of all the groups of the site 'siteId'.")
|
||||||
|
public CollectionWithPagingInfo<SiteGroup> readAll(String siteId, Parameters parameters)
|
||||||
|
{
|
||||||
|
return sites.getSiteGroupMemberships(siteId, parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns site membership information for groupId in siteId.
|
||||||
|
* <p>
|
||||||
|
* GET sites/<siteId>/group-members/<groupId>
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@WebApiDescription(title = "Returns site membership information for groupId in siteId.")
|
||||||
|
public SiteGroup readById(String siteId, String groupId, Parameters parameters)
|
||||||
|
{
|
||||||
|
return sites.getSiteGroupMembership(siteId, groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PUT sites/<siteId>/group-members/<groupId>
|
||||||
|
* <p>
|
||||||
|
* Updates the membership of group in the site.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@WebApiDescription(title = "Updates the membership of groupId in the site.")
|
||||||
|
public SiteGroup update(String siteId, SiteGroup groupMember, Parameters parameters)
|
||||||
|
{
|
||||||
|
return sites.updateSiteGroupMembership(siteId, groupMember);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DELETE sites/<siteId>/group-members/<groupId>
|
||||||
|
* <p>
|
||||||
|
* Remove a group from site.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@WebApiDescription(title = "Removes groupId as a member of site siteId.")
|
||||||
|
public void delete(String siteId, String groupId, Parameters parameters)
|
||||||
|
{
|
||||||
|
sites.removeSiteGroupMembership(siteId, groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -40,6 +40,7 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
@@ -53,11 +54,7 @@ import org.alfresco.repo.node.getchildren.FilterPropString;
|
|||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.security.authority.UnknownAuthorityException;
|
import org.alfresco.repo.security.authority.UnknownAuthorityException;
|
||||||
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
import org.alfresco.repo.security.permissions.AccessDeniedException;
|
||||||
import org.alfresco.repo.site.SiteMembership;
|
import org.alfresco.repo.site.*;
|
||||||
import org.alfresco.repo.site.SiteMembershipComparator;
|
|
||||||
import org.alfresco.repo.site.SiteModel;
|
|
||||||
import org.alfresco.repo.site.SiteServiceException;
|
|
||||||
import org.alfresco.repo.site.SiteServiceImpl;
|
|
||||||
import org.alfresco.rest.antlr.WhereClauseParser;
|
import org.alfresco.rest.antlr.WhereClauseParser;
|
||||||
import org.alfresco.rest.api.Nodes;
|
import org.alfresco.rest.api.Nodes;
|
||||||
import org.alfresco.rest.api.People;
|
import org.alfresco.rest.api.People;
|
||||||
@@ -76,6 +73,7 @@ import org.alfresco.rest.framework.resource.parameters.Parameters;
|
|||||||
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
import org.alfresco.rest.framework.resource.parameters.SortColumn;
|
||||||
import org.alfresco.rest.framework.resource.parameters.where.Query;
|
import org.alfresco.rest.framework.resource.parameters.where.Query;
|
||||||
import org.alfresco.rest.framework.resource.parameters.where.QueryHelper;
|
import org.alfresco.rest.framework.resource.parameters.where.QueryHelper;
|
||||||
|
import org.alfresco.rest.workflow.api.impl.MapBasedQueryWalker;
|
||||||
import org.alfresco.rest.workflow.api.impl.MapBasedQueryWalkerOrSupported;
|
import org.alfresco.rest.workflow.api.impl.MapBasedQueryWalkerOrSupported;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.favourites.FavouritesService;
|
import org.alfresco.service.cmr.favourites.FavouritesService;
|
||||||
@@ -84,14 +82,16 @@ import org.alfresco.service.cmr.preference.PreferenceService;
|
|||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
import org.alfresco.service.cmr.repository.NodeService;
|
||||||
import org.alfresco.service.cmr.security.AccessStatus;
|
import org.alfresco.service.cmr.security.AccessStatus;
|
||||||
|
import org.alfresco.service.cmr.security.AuthorityService;
|
||||||
|
import org.alfresco.service.cmr.security.AuthorityType;
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
import org.alfresco.service.cmr.security.PermissionService;
|
||||||
import org.alfresco.service.cmr.site.SiteInfo;
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
|
import org.alfresco.service.cmr.site.SiteMemberInfo;
|
||||||
import org.alfresco.service.cmr.site.SiteService;
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
import org.alfresco.service.cmr.view.ImportPackageHandler;
|
import org.alfresco.service.cmr.view.ImportPackageHandler;
|
||||||
import org.alfresco.service.cmr.view.ImporterBinding;
|
import org.alfresco.service.cmr.view.ImporterBinding;
|
||||||
import org.alfresco.service.cmr.view.ImporterContentCache;
|
import org.alfresco.service.cmr.view.ImporterContentCache;
|
||||||
import org.alfresco.service.cmr.view.ImporterProgress;
|
|
||||||
import org.alfresco.service.cmr.view.ImporterService;
|
import org.alfresco.service.cmr.view.ImporterService;
|
||||||
import org.alfresco.service.cmr.view.Location;
|
import org.alfresco.service.cmr.view.Location;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
@@ -121,6 +121,7 @@ public class SitesImpl implements Sites
|
|||||||
private static final String SITE_ID_VALID_CHARS_PARTIAL_REGEX = "A-Za-z0-9\\-";
|
private static final String SITE_ID_VALID_CHARS_PARTIAL_REGEX = "A-Za-z0-9\\-";
|
||||||
|
|
||||||
private static final String DEFAULT_SITE_PRESET = "site-dashboard";
|
private static final String DEFAULT_SITE_PRESET = "site-dashboard";
|
||||||
|
private static final String PARAM_IS_MEMBER_OF_GROUP = "isMemberOfGroup";
|
||||||
|
|
||||||
private final static Map<String,QName> SORT_PARAMS_TO_QNAMES;
|
private final static Map<String,QName> SORT_PARAMS_TO_QNAMES;
|
||||||
static
|
static
|
||||||
@@ -146,7 +147,7 @@ public class SitesImpl implements Sites
|
|||||||
}
|
}
|
||||||
|
|
||||||
// list children filtering (via where clause)
|
// list children filtering (via where clause)
|
||||||
private final static Set<String> LIST_SITES_EQUALS_QUERY_PROPERTIES = new HashSet<>(Arrays.asList(new String[] { PARAM_VISIBILITY, PARAM_PRESET }));
|
private final static Set<String> LIST_SITES_EQUALS_QUERY_PROPERTIES = new HashSet<>(Arrays.asList(PARAM_VISIBILITY, PARAM_PRESET));
|
||||||
|
|
||||||
protected Nodes nodes;
|
protected Nodes nodes;
|
||||||
protected People people;
|
protected People people;
|
||||||
@@ -159,6 +160,7 @@ public class SitesImpl implements Sites
|
|||||||
protected SiteSurfConfig siteSurfConfig;
|
protected SiteSurfConfig siteSurfConfig;
|
||||||
protected PermissionService permissionService;
|
protected PermissionService permissionService;
|
||||||
protected SiteServiceImpl siteServiceImpl;
|
protected SiteServiceImpl siteServiceImpl;
|
||||||
|
protected AuthorityService authorityService;
|
||||||
|
|
||||||
public void setPreferenceService(PreferenceService preferenceService)
|
public void setPreferenceService(PreferenceService preferenceService)
|
||||||
{
|
{
|
||||||
@@ -215,6 +217,15 @@ public class SitesImpl implements Sites
|
|||||||
this.siteServiceImpl = siteServiceImpl;
|
this.siteServiceImpl = siteServiceImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AuthorityService getAuthorityService()
|
||||||
|
{
|
||||||
|
return authorityService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthorityService(AuthorityService authorityService)
|
||||||
|
{
|
||||||
|
this.authorityService = authorityService;
|
||||||
|
}
|
||||||
|
|
||||||
public SiteInfo validateSite(NodeRef guid)
|
public SiteInfo validateSite(NodeRef guid)
|
||||||
{
|
{
|
||||||
@@ -267,25 +278,31 @@ public class SitesImpl implements Sites
|
|||||||
siteId = siteInfo.getShortName();
|
siteId = siteInfo.getShortName();
|
||||||
|
|
||||||
Paging paging = parameters.getPaging();
|
Paging paging = parameters.getPaging();
|
||||||
|
|
||||||
PagingRequest pagingRequest = Util.getPagingRequest(paging);
|
PagingRequest pagingRequest = Util.getPagingRequest(paging);
|
||||||
|
pagingRequest.setRequestTotalCountMax(100);
|
||||||
|
|
||||||
|
MapBasedQueryWalker propertyWalker = new MapBasedQueryWalker(new HashSet<>(Collections.singletonList(PARAM_IS_MEMBER_OF_GROUP)), null);;
|
||||||
|
QueryHelper.walk(parameters.getQuery(), propertyWalker);
|
||||||
|
|
||||||
|
Boolean expandGroups = propertyWalker.getProperty(PARAM_IS_MEMBER_OF_GROUP, WhereClauseParser.EQUALS, Boolean.class);
|
||||||
|
|
||||||
|
if (expandGroups == null) {
|
||||||
|
expandGroups = true;
|
||||||
|
}
|
||||||
|
|
||||||
final List<Pair<SiteService.SortFields, Boolean>> sort = new ArrayList<Pair<SiteService.SortFields, Boolean>>();
|
final List<Pair<SiteService.SortFields, Boolean>> sort = new ArrayList<Pair<SiteService.SortFields, Boolean>>();
|
||||||
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.LastName, Boolean.TRUE));
|
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.LastName, Boolean.TRUE));
|
||||||
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.FirstName, Boolean.TRUE));
|
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.FirstName, Boolean.TRUE));
|
||||||
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.Role, Boolean.TRUE));
|
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.Role, Boolean.TRUE));
|
||||||
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.Username, Boolean.TRUE));
|
sort.add(new Pair<SiteService.SortFields, Boolean>(SiteService.SortFields.Username, Boolean.TRUE));
|
||||||
PagingResults<SiteMembership> pagedResults = siteService.listMembersPaged(siteId, true, sort, pagingRequest);
|
PagingResults<SiteMembership> pagedResults = siteService.listMembersPaged(siteId, expandGroups, sort, pagingRequest);
|
||||||
|
|
||||||
List<SiteMembership> siteMembers = pagedResults.getPage();
|
List<SiteMember> ret = pagedResults.getPage()
|
||||||
List<SiteMember> ret = new ArrayList<SiteMember>(siteMembers.size());
|
.stream()
|
||||||
for(SiteMembership siteMembership : siteMembers)
|
.map((siteMembership) -> new SiteMember(siteMembership.getPersonId(), siteMembership.getRole(), siteMembership.isMemberOfGroup()))
|
||||||
{
|
.collect(Collectors.toList());
|
||||||
SiteMember siteMember = new SiteMember(siteMembership.getPersonId(), siteMembership.getRole());
|
|
||||||
ret.add(siteMember);
|
|
||||||
}
|
|
||||||
|
|
||||||
return CollectionWithPagingInfo.asPaged(paging, ret, pagedResults.hasMoreItems(), null);
|
return CollectionWithPagingInfo.asPaged(paging, ret, pagedResults.hasMoreItems(), pagedResults.getTotalResultCount().getFirst());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSiteRole(String siteId)
|
public String getSiteRole(String siteId)
|
||||||
@@ -910,7 +927,7 @@ public class SitesImpl implements Sites
|
|||||||
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
|
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
|
||||||
prefKey.append(siteId);
|
prefKey.append(siteId);
|
||||||
String value = (String)preferenceService.getPreference(personId, prefKey.toString());
|
String value = (String)preferenceService.getPreference(personId, prefKey.toString());
|
||||||
boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true"));
|
boolean isFavouriteSite = (value != null && value.equalsIgnoreCase("true"));
|
||||||
|
|
||||||
if(isFavouriteSite)
|
if(isFavouriteSite)
|
||||||
{
|
{
|
||||||
@@ -939,7 +956,7 @@ public class SitesImpl implements Sites
|
|||||||
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
|
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
|
||||||
prefKey.append(siteId);
|
prefKey.append(siteId);
|
||||||
String value = (String)preferenceService.getPreference(personId, prefKey.toString());
|
String value = (String)preferenceService.getPreference(personId, prefKey.toString());
|
||||||
boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true"));
|
boolean isFavouriteSite = (value != null && value.equalsIgnoreCase("true"));
|
||||||
|
|
||||||
if(!isFavouriteSite)
|
if(!isFavouriteSite)
|
||||||
{
|
{
|
||||||
@@ -1304,6 +1321,125 @@ public class SitesImpl implements Sites
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
importerService.importView(acpHandler, location, binding, (ImporterProgress)null);
|
importerService.importView(acpHandler, location, binding, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CollectionWithPagingInfo<SiteGroup> getSiteGroupMemberships(String siteId, Parameters parameters)
|
||||||
|
{
|
||||||
|
validateSite(siteId);
|
||||||
|
|
||||||
|
PagingRequest pagingRequest = Util.getPagingRequest(parameters.getPaging());
|
||||||
|
pagingRequest.setRequestTotalCountMax(100);
|
||||||
|
PagingResults<SiteGroupMembership> pagedResults = siteService.listGroupMembersPaged(siteId, new ArrayList<>(), pagingRequest);
|
||||||
|
List<SiteGroup> groups = pagedResults.getPage().stream().map(siteMembership -> new SiteGroup(siteMembership.getId(), siteMembership.getRole())).collect(Collectors.toList());
|
||||||
|
return CollectionWithPagingInfo.asPaged(parameters.getPaging(), groups, pagedResults.hasMoreItems(), pagedResults.getTotalResultCount().getFirst());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SiteGroup addSiteGroupMembership(String siteId, SiteGroup group)
|
||||||
|
{
|
||||||
|
SiteInfo siteInfo = validateSite(siteId);
|
||||||
|
if(siteInfo == null)
|
||||||
|
{
|
||||||
|
logger.debug("Site does not exist: " + siteId);
|
||||||
|
throw new EntityNotFoundException(siteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
validateGroup(group.getId());
|
||||||
|
|
||||||
|
SiteMemberInfo groupInfo = siteService.getMembersRoleInfo(siteId, group.getId());
|
||||||
|
if(groupInfo != null)
|
||||||
|
{
|
||||||
|
logger.debug("addSiteGroupMembership: "+ group.getId() + " is already a member of site " + siteId);
|
||||||
|
throw new ConstraintViolatedException(group.getId() + " is already a member of site " + siteId);
|
||||||
|
}
|
||||||
|
if(group.getRole() == null)
|
||||||
|
{
|
||||||
|
logger.debug("Getting member role but role is null");
|
||||||
|
throw new RelationshipResourceNotFoundException(group.getId(), siteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
siteService.setMembership(siteId, group.getId(), group.getRole());
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SiteGroup getSiteGroupMembership(String siteId, String groupId)
|
||||||
|
{
|
||||||
|
SiteMemberInfo groupInfo = isMemberOfSite(siteId, groupId);
|
||||||
|
return new SiteGroup(groupId, groupInfo.getMemberRole());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SiteGroup updateSiteGroupMembership(String siteId, SiteGroup group)
|
||||||
|
{
|
||||||
|
isMemberOfSite(siteId, group.getId());
|
||||||
|
siteService.setMembership(siteId, group.getId(), group.getRole());
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeSiteGroupMembership(String siteId, String groupId)
|
||||||
|
{
|
||||||
|
isMemberOfSite(siteId, groupId);
|
||||||
|
String role = this.siteService.getMembersRole(siteId, groupId);
|
||||||
|
if(role != null)
|
||||||
|
{
|
||||||
|
if(role.equals(SiteModel.SITE_MANAGER))
|
||||||
|
{
|
||||||
|
int numAuthorities = this.siteService.countAuthoritiesWithRole(siteId, SiteModel.SITE_MANAGER);
|
||||||
|
if(numAuthorities <= 1)
|
||||||
|
{
|
||||||
|
throw new InvalidArgumentException("Can't remove last manager of site " + siteId);
|
||||||
|
}
|
||||||
|
this.siteService.removeMembership(siteId, groupId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.siteService.removeMembership(siteId, groupId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("Unable to determine role of site member");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private SiteMemberInfo isMemberOfSite(String siteId, String id)
|
||||||
|
{
|
||||||
|
|
||||||
|
SiteInfo siteInfo = validateSite(siteId);
|
||||||
|
if(siteInfo == null)
|
||||||
|
{
|
||||||
|
logger.debug("Site does not exist: " + siteId);
|
||||||
|
throw new EntityNotFoundException(siteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
validateGroup(id);
|
||||||
|
|
||||||
|
SiteMemberInfo memberInfo = this.siteService.getMembersRoleInfo(siteId, id);
|
||||||
|
if(memberInfo == null)
|
||||||
|
{
|
||||||
|
logger.debug("Given authority is not a member of the site");
|
||||||
|
throw new InvalidArgumentException("Given authority is not a member of the site");
|
||||||
|
}
|
||||||
|
if(memberInfo.getMemberRole() == null)
|
||||||
|
{
|
||||||
|
logger.debug("Getting authority role but role is null");
|
||||||
|
throw new RelationshipResourceNotFoundException(memberInfo.getMemberName(), siteId);
|
||||||
|
}
|
||||||
|
return memberInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateGroup(String groupId) throws EntityNotFoundException
|
||||||
|
{
|
||||||
|
String authorityName = authorityService.getName(AuthorityType.GROUP, groupId);
|
||||||
|
if(authorityName == null)
|
||||||
|
{
|
||||||
|
logger.debug("AuthorityName does not exist: " + groupId);
|
||||||
|
throw new EntityNotFoundException(groupId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
143
src/main/java/org/alfresco/rest/api/model/SiteGroup.java
Normal file
143
src/main/java/org/alfresco/rest/api/model/SiteGroup.java
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.rest.api.model;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.alfresco.rest.api.groups.GroupsEntityResource;
|
||||||
|
import org.alfresco.rest.framework.resource.EmbeddedEntityResource;
|
||||||
|
import org.alfresco.rest.framework.resource.UniqueId;
|
||||||
|
|
||||||
|
public class SiteGroup implements Comparable<SiteGroup>
|
||||||
|
{
|
||||||
|
private String role;
|
||||||
|
private String id; // group id (aka authority name)
|
||||||
|
|
||||||
|
public SiteGroup() {}
|
||||||
|
|
||||||
|
public SiteGroup(String id, String role)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
if (role == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
this.role = role;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SiteGroup getMemberOfSite(String id, String role)
|
||||||
|
{
|
||||||
|
return new SiteGroup(id, role);
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonProperty("id")
|
||||||
|
@UniqueId
|
||||||
|
@EmbeddedEntityResource(propertyName = "group", entityResource = GroupsEntityResource.class)
|
||||||
|
public String getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRole()
|
||||||
|
{
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRole(String role)
|
||||||
|
{
|
||||||
|
if (role == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
this.role = role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id)
|
||||||
|
{
|
||||||
|
if (id == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((role == null) ? 0 : role.hashCode());
|
||||||
|
result = prime * result + ((id == null) ? 0 : id.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (this == obj)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SiteGroup other = (SiteGroup) obj;
|
||||||
|
if (role != other.role)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return id.equals(other.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(SiteGroup o)
|
||||||
|
{
|
||||||
|
int i = id.compareTo(o.getId());
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
i = role.compareTo(o.getRole());
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return "SiteGroup [role='" + role + '\'' + ", id='" + id + '\'' + ", role='" + role + '\'' + "]";
|
||||||
|
}
|
||||||
|
}
|
@@ -29,7 +29,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||||||
import org.alfresco.rest.api.people.PeopleEntityResource;
|
import org.alfresco.rest.api.people.PeopleEntityResource;
|
||||||
import org.alfresco.rest.framework.resource.EmbeddedEntityResource;
|
import org.alfresco.rest.framework.resource.EmbeddedEntityResource;
|
||||||
import org.alfresco.rest.framework.resource.UniqueId;
|
import org.alfresco.rest.framework.resource.UniqueId;
|
||||||
import org.alfresco.service.cmr.site.SiteRole;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents site membership.
|
* Represents site membership.
|
||||||
@@ -41,6 +40,7 @@ public class SiteMember
|
|||||||
{
|
{
|
||||||
private String personId;
|
private String personId;
|
||||||
private String role;
|
private String role;
|
||||||
|
private boolean isMemberOfGroup;
|
||||||
|
|
||||||
public SiteMember()
|
public SiteMember()
|
||||||
{
|
{
|
||||||
@@ -61,6 +61,22 @@ public class SiteMember
|
|||||||
this.role = role;
|
this.role = role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SiteMember(String personId, String role, boolean isMemberOfGroup)
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
if(personId == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
if(role == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
this.personId = personId;
|
||||||
|
this.role = role;
|
||||||
|
this.isMemberOfGroup = isMemberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
@JsonProperty("id")
|
@JsonProperty("id")
|
||||||
@UniqueId
|
@UniqueId
|
||||||
@EmbeddedEntityResource(propertyName = "person", entityResource = PeopleEntityResource.class)
|
@EmbeddedEntityResource(propertyName = "person", entityResource = PeopleEntityResource.class)
|
||||||
@@ -92,6 +108,16 @@ public class SiteMember
|
|||||||
this.personId = personId;
|
this.personId = personId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setIsMemberOfGroup(boolean isMemberOfGroup)
|
||||||
|
{
|
||||||
|
this.isMemberOfGroup = isMemberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getIsMemberOfGroup()
|
||||||
|
{
|
||||||
|
return isMemberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
@@ -127,13 +153,18 @@ public class SiteMember
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isMemberOfGroup != other.isMemberOfGroup)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return(role == other.role);
|
return(role == other.role);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "SiteMember [personId=" + personId + ", role=" + role + "]";
|
return "SiteMember [personId=" + personId + ", isMemberOfGroup=" + isMemberOfGroup + ", role=" + role + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -762,6 +762,7 @@
|
|||||||
<property name="siteSurfConfig" ref="siteSurfConfig" />
|
<property name="siteSurfConfig" ref="siteSurfConfig" />
|
||||||
<property name="permissionService" ref="PermissionService" />
|
<property name="permissionService" ref="PermissionService" />
|
||||||
<property name="siteServiceImpl" ref="siteService" />
|
<property name="siteServiceImpl" ref="siteService" />
|
||||||
|
<property name="authorityService" ref="authorityService" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="siteSurfConfig" class="org.alfresco.rest.api.impl.SiteSurfConfig">
|
<bean id="siteSurfConfig" class="org.alfresco.rest.api.impl.SiteSurfConfig">
|
||||||
@@ -1471,4 +1472,8 @@
|
|||||||
<bean class="org.alfresco.rest.api.groups.GroupMembersRelation">
|
<bean class="org.alfresco.rest.api.groups.GroupMembersRelation">
|
||||||
<property name="groups" ref="Groups" />
|
<property name="groups" ref="Groups" />
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<bean class="org.alfresco.rest.api.groups.SiteGroupsRelation">
|
||||||
|
<property name="sites" ref="Sites" />
|
||||||
|
</bean>
|
||||||
</beans>
|
</beans>
|
||||||
|
@@ -71,6 +71,7 @@ import org.junit.runners.Suite;
|
|||||||
GroupsTest.class,
|
GroupsTest.class,
|
||||||
TestPeople.class,
|
TestPeople.class,
|
||||||
TestSiteMembers.class,
|
TestSiteMembers.class,
|
||||||
|
TestSiteGroups.class,
|
||||||
TestPersonSites.class,
|
TestPersonSites.class,
|
||||||
TestSiteMembershipRequests.class,
|
TestSiteMembershipRequests.class,
|
||||||
TestFavourites.class,
|
TestFavourites.class,
|
||||||
|
286
src/test/java/org/alfresco/rest/api/tests/TestSiteGroups.java
Normal file
286
src/test/java/org/alfresco/rest/api/tests/TestSiteGroups.java
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.rest.api.tests;
|
||||||
|
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
import org.alfresco.repo.tenant.TenantUtil;
|
||||||
|
import org.alfresco.rest.api.tests.RepoService.TestSite;
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiClient.Sites;
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiException;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.SiteGroup;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.SiteMember;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.SiteRole;
|
||||||
|
import org.alfresco.service.cmr.security.AuthorityService;
|
||||||
|
import org.alfresco.service.cmr.security.AuthorityType;
|
||||||
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
|
import org.alfresco.util.GUID;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class TestSiteGroups extends AbstractBaseApiTest
|
||||||
|
{
|
||||||
|
protected AuthorityService authorityService;
|
||||||
|
private String groupName = null;
|
||||||
|
private PublicApiClient.Paging paging = getPaging(0, 10);
|
||||||
|
private PublicApiClient.ListResponse<SiteMember> siteMembers = null;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() throws Exception
|
||||||
|
{
|
||||||
|
super.setup();
|
||||||
|
authorityService = (AuthorityService) applicationContext.getBean("AuthorityService");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCrudSiteGroups() throws Exception
|
||||||
|
{
|
||||||
|
Sites sitesProxy = publicApiClient.sites();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
groupName = createAuthorityContext(user1);
|
||||||
|
setRequestContext(networkOne.getId(), DEFAULT_ADMIN, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
|
TestSite site = TenantUtil.runAsUserTenant(() -> networkOne.createSite(SiteVisibility.PRIVATE), DEFAULT_ADMIN, networkOne.getId());
|
||||||
|
|
||||||
|
|
||||||
|
SiteGroup response = sitesProxy.addGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteCollaborator.name()));
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
response = sitesProxy.getGroup(site.getSiteId(), groupName);
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 3);
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<>(1);
|
||||||
|
params.put("where", "(isMemberOfGroup=false)");
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, params));
|
||||||
|
assertFalse(siteMembers.getList().get(0).isMemberOfGroup());
|
||||||
|
assertEquals(siteMembers.getList().size(), 1);
|
||||||
|
|
||||||
|
params = new HashMap<>(1);
|
||||||
|
params.put("where", "(isMemberOfGroup=true)");
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, params));
|
||||||
|
assertEquals(siteMembers.getList().size(), 3);
|
||||||
|
|
||||||
|
PublicApiClient.ListResponse<SiteGroup> groups = sitesProxy.getGroups(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(groups.getList().size(), 1);
|
||||||
|
assertEquals(groups.getList().get(0).getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
response = sitesProxy.updateGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteContributor.name()));
|
||||||
|
groups = sitesProxy.getGroups(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(groups.getList().size(), 1);
|
||||||
|
assertEquals(groups.getList().get(0).getRole(), SiteRole.SiteContributor.name());
|
||||||
|
|
||||||
|
sitesProxy.deleteGroup(site.getSiteId(), response.getId());
|
||||||
|
groups = sitesProxy.getGroups(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(groups.getList().size(), 0);
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 1);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
clearAuthorityContext(groupName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldAddGroup() throws Exception
|
||||||
|
{
|
||||||
|
Sites sitesProxy = publicApiClient.sites();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
groupName = createAuthorityContext(user1);
|
||||||
|
setRequestContext(networkOne.getId(), DEFAULT_ADMIN, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
|
TestSite site = TenantUtil.runAsUserTenant(() -> networkOne.createSite(SiteVisibility.PRIVATE), DEFAULT_ADMIN, networkOne.getId());
|
||||||
|
|
||||||
|
// Should throw 404 error
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sitesProxy.addGroup(site.getSiteId(), new SiteGroup(GUID.generate(), SiteRole.SiteCollaborator.name()));
|
||||||
|
}
|
||||||
|
catch (PublicApiException e)
|
||||||
|
{
|
||||||
|
assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
SiteGroup response = sitesProxy.addGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteCollaborator.name()));
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
// Should throw 409 error
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sitesProxy.addGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteCollaborator.name()));
|
||||||
|
}
|
||||||
|
catch (PublicApiException e)
|
||||||
|
{
|
||||||
|
assertEquals(HttpStatus.SC_CONFLICT, e.getHttpResponse().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 3);
|
||||||
|
|
||||||
|
PublicApiClient.ListResponse<SiteGroup> groups = sitesProxy.getGroups(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(groups.getList().size(), 1);
|
||||||
|
assertEquals(groups.getList().get(0).getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
clearAuthorityContext(groupName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldUpdateGroup() throws Exception
|
||||||
|
{
|
||||||
|
Sites sitesProxy = publicApiClient.sites();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
groupName = createAuthorityContext(user1);
|
||||||
|
setRequestContext(networkOne.getId(), DEFAULT_ADMIN, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
|
TestSite site = TenantUtil.runAsUserTenant(() -> networkOne.createSite(SiteVisibility.PRIVATE), DEFAULT_ADMIN, networkOne.getId());
|
||||||
|
|
||||||
|
// Should throw 400 error
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sitesProxy.updateGroup(site.getSiteId(), new SiteGroup(GUID.generate(), SiteRole.SiteCollaborator.name()));
|
||||||
|
}
|
||||||
|
catch (PublicApiException e)
|
||||||
|
{
|
||||||
|
assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
SiteGroup response = sitesProxy.addGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteCollaborator.name()));
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
response = sitesProxy.updateGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteContributor.name()));
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteContributor.name());
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 3);
|
||||||
|
assertEquals(siteMembers.getList().get(1).getRole(), SiteRole.SiteContributor.name());
|
||||||
|
assertEquals(siteMembers.getList().get(2).getRole(), SiteRole.SiteContributor.name());
|
||||||
|
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
clearAuthorityContext(groupName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldDeleteGroup() throws Exception
|
||||||
|
{
|
||||||
|
Sites sitesProxy = publicApiClient.sites();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
groupName = createAuthorityContext(user1);
|
||||||
|
setRequestContext(networkOne.getId(), DEFAULT_ADMIN, DEFAULT_ADMIN_PWD);
|
||||||
|
|
||||||
|
TestSite site = TenantUtil.runAsUserTenant(() -> networkOne.createSite(SiteVisibility.PRIVATE), DEFAULT_ADMIN, networkOne.getId());
|
||||||
|
|
||||||
|
// Should throw 400 error
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sitesProxy.updateGroup(site.getSiteId(), new SiteGroup(GUID.generate(), SiteRole.SiteCollaborator.name()));
|
||||||
|
}
|
||||||
|
catch (PublicApiException e)
|
||||||
|
{
|
||||||
|
assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
SiteGroup response = sitesProxy.addGroup(site.getSiteId(), new SiteGroup(groupName, SiteRole.SiteCollaborator.name()));
|
||||||
|
assertEquals(response.getGroup().getId(), groupName);
|
||||||
|
assertEquals(response.getRole(), SiteRole.SiteCollaborator.name());
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 3);
|
||||||
|
|
||||||
|
sitesProxy.deleteGroup(site.getSiteId(), response.getId());
|
||||||
|
|
||||||
|
siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
|
assertEquals(siteMembers.getList().size(), 1);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
clearAuthorityContext(groupName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String createAuthorityContext(String userName) throws PublicApiException
|
||||||
|
{
|
||||||
|
String groupName = "Test_GroupA" + GUID.generate();
|
||||||
|
AuthenticationUtil.setRunAsUser(userName);
|
||||||
|
|
||||||
|
groupName = authorityService.getName(AuthorityType.GROUP, groupName);
|
||||||
|
|
||||||
|
if (!authorityService.authorityExists(groupName))
|
||||||
|
{
|
||||||
|
AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
|
||||||
|
|
||||||
|
groupName = authorityService.createAuthority(AuthorityType.GROUP, groupName);
|
||||||
|
authorityService.setAuthorityDisplayName(groupName, "Test Group A");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
authorityService.addAuthority(groupName, user1);
|
||||||
|
authorityService.addAuthority(groupName, user2);
|
||||||
|
|
||||||
|
return groupName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void clearAuthorityContext(String groupName)
|
||||||
|
{
|
||||||
|
if (groupName != null && authorityService.authorityExists(groupName))
|
||||||
|
{
|
||||||
|
AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
|
||||||
|
authorityService.deleteAuthority(groupName, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getScope()
|
||||||
|
{
|
||||||
|
return "public";
|
||||||
|
}
|
||||||
|
}
|
@@ -105,7 +105,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
{
|
{
|
||||||
int skipCount = 0;
|
int skipCount = 0;
|
||||||
int maxItems = 2;
|
int maxItems = 2;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 6);
|
||||||
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
||||||
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null));
|
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null));
|
||||||
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
||||||
@@ -114,7 +114,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
{
|
{
|
||||||
int skipCount = 2;
|
int skipCount = 2;
|
||||||
int maxItems = 10;
|
int maxItems = 10;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 6);
|
||||||
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
||||||
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null));
|
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(testSite.getSiteId(), createParams(paging, null));
|
||||||
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
||||||
@@ -132,7 +132,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
{
|
{
|
||||||
int skipCount = 2;
|
int skipCount = 2;
|
||||||
int maxItems = 10;
|
int maxItems = 10;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 6);
|
||||||
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
publicApiClient.setRequestContext(new RequestContext(testNetwork.getId(), personId));
|
||||||
sitesProxy.getSiteMembers(GUID.generate(), createParams(paging, null));
|
sitesProxy.getSiteMembers(GUID.generate(), createParams(paging, null));
|
||||||
fail();
|
fail();
|
||||||
@@ -415,7 +415,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
{
|
{
|
||||||
int skipCount = 0;
|
int skipCount = 0;
|
||||||
int maxItems = Integer.MAX_VALUE;
|
int maxItems = Integer.MAX_VALUE;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 2);
|
||||||
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
||||||
}
|
}
|
||||||
@@ -559,7 +559,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
{
|
{
|
||||||
int skipCount = 0;
|
int skipCount = 0;
|
||||||
int maxItems = Integer.MAX_VALUE;
|
int maxItems = Integer.MAX_VALUE;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 2);
|
||||||
publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId()));
|
publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId()));
|
||||||
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
||||||
@@ -658,7 +658,7 @@ public class TestSiteMembers extends EnterpriseTestApi
|
|||||||
|
|
||||||
int skipCount = 0;
|
int skipCount = 0;
|
||||||
int maxItems = Integer.MAX_VALUE;
|
int maxItems = Integer.MAX_VALUE;
|
||||||
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), null);
|
Paging paging = getPaging(skipCount, maxItems, expectedSiteMembers.size(), 3);
|
||||||
publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId()));
|
publicApiClient.setRequestContext(new RequestContext(network1.getId(), person2.getId()));
|
||||||
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
ListResponse<SiteMember> siteMembers = sitesProxy.getSiteMembers(site.getSiteId(), createParams(paging, null));
|
||||||
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
checkList(expectedSiteMembers.subList(skipCount, skipCount + paging.getExpectedPaging().getCount()), paging.getExpectedPaging(), siteMembers);
|
||||||
|
@@ -74,6 +74,7 @@ import org.alfresco.rest.api.tests.client.data.Site;
|
|||||||
import org.alfresco.rest.api.tests.client.data.SiteContainer;
|
import org.alfresco.rest.api.tests.client.data.SiteContainer;
|
||||||
import org.alfresco.rest.api.tests.client.data.SiteImpl;
|
import org.alfresco.rest.api.tests.client.data.SiteImpl;
|
||||||
import org.alfresco.rest.api.tests.client.data.SiteMember;
|
import org.alfresco.rest.api.tests.client.data.SiteMember;
|
||||||
|
import org.alfresco.rest.api.tests.client.data.SiteGroup;
|
||||||
import org.alfresco.rest.api.tests.client.data.SiteMembershipRequest;
|
import org.alfresco.rest.api.tests.client.data.SiteMembershipRequest;
|
||||||
import org.alfresco.rest.api.tests.client.data.Tag;
|
import org.alfresco.rest.api.tests.client.data.Tag;
|
||||||
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
||||||
@@ -1132,6 +1133,35 @@ public class PublicApiClient
|
|||||||
{
|
{
|
||||||
remove("people", personId, "favorite-sites", site.getSiteId(), "Failed to remove favourite site");
|
remove("people", personId, "favorite-sites", site.getSiteId(), "Failed to remove favourite site");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SiteGroup addGroup(String siteId, SiteGroup group) throws PublicApiException
|
||||||
|
{
|
||||||
|
HttpResponse response = create("sites", siteId, "group-members", null, group.toJSON().toString() , "Failed to add site groups");
|
||||||
|
return SiteGroup.parseSiteGroup(siteId, (JSONObject)response.getJsonResponse().get("entry"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListResponse<SiteGroup> getGroups(String siteId, Map<String, String> params) throws PublicApiException
|
||||||
|
{
|
||||||
|
HttpResponse response = getAll("sites", siteId, "group-members", null, params, "Failed to fetch all site groups");
|
||||||
|
return SiteGroup.parseGroupMemberOfSites(siteId, response.getJsonResponse());
|
||||||
|
}
|
||||||
|
|
||||||
|
public SiteGroup getGroup(String siteId, String groupId) throws PublicApiException
|
||||||
|
{
|
||||||
|
HttpResponse response = getSingle("sites", siteId, "group-members", groupId.toString() , "Failed to get a site group");
|
||||||
|
return SiteGroup.parseSiteGroup(siteId, (JSONObject)response.getJsonResponse().get("entry"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SiteGroup updateGroup(String siteId, SiteGroup group) throws PublicApiException
|
||||||
|
{
|
||||||
|
HttpResponse response = update("sites", siteId, "group-members", group.getId(), group.toJSON().toString() , "Failed to update a site group");
|
||||||
|
return SiteGroup.parseSiteGroup(siteId, (JSONObject)response.getJsonResponse().get("entry"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteGroup(String siteId, String groupId) throws PublicApiException
|
||||||
|
{
|
||||||
|
remove("sites", siteId, "group-members", groupId , "Failed to delete site group");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SiteMembershipRequests extends AbstractProxy
|
public class SiteMembershipRequests extends AbstractProxy
|
||||||
|
@@ -0,0 +1,208 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco 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 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco 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.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.rest.api.tests.client.data;
|
||||||
|
|
||||||
|
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.text.Collator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
public class SiteGroup implements Serializable, ExpectedComparison, Comparable<SiteGroup>
|
||||||
|
{
|
||||||
|
private static final long serialVersionUID = 505331886661880399L;
|
||||||
|
|
||||||
|
private String role;
|
||||||
|
private String id; // group id (aka authority name)
|
||||||
|
private Group group;
|
||||||
|
|
||||||
|
public SiteGroup()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SiteGroup(String id, String role)
|
||||||
|
{
|
||||||
|
this.role = role;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SiteGroup(String id, Group group, String role)
|
||||||
|
{
|
||||||
|
this.role = role;
|
||||||
|
this.id = id;
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRole()
|
||||||
|
{
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRole(String role)
|
||||||
|
{
|
||||||
|
this.role = role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id)
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Group getGroup()
|
||||||
|
{
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup(Group group)
|
||||||
|
{
|
||||||
|
this.group = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collator getCollator()
|
||||||
|
{
|
||||||
|
return collator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCollator(Collator collator)
|
||||||
|
{
|
||||||
|
this.collator = collator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SiteGroup parseSiteGroup(String siteId, JSONObject jsonObject)
|
||||||
|
{
|
||||||
|
String id = (String)jsonObject.get("id");
|
||||||
|
String role = (String)jsonObject.get("role");
|
||||||
|
JSONObject personJSON = (JSONObject)jsonObject.get("group");
|
||||||
|
Group group = Group.parseGroup(personJSON);
|
||||||
|
SiteGroup siteMember = new SiteGroup(id, group, role);
|
||||||
|
return siteMember;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PublicApiClient.ListResponse<SiteGroup> parseGroupMemberOfSites(String siteId, JSONObject jsonObject)
|
||||||
|
{
|
||||||
|
List<SiteGroup> groups = new ArrayList<SiteGroup>();
|
||||||
|
|
||||||
|
JSONObject jsonList = (JSONObject)jsonObject.get("list");
|
||||||
|
assertNotNull(jsonList);
|
||||||
|
|
||||||
|
JSONArray jsonEntries = (JSONArray)jsonList.get("entries");
|
||||||
|
assertNotNull(jsonEntries);
|
||||||
|
|
||||||
|
for(int i = 0; i < jsonEntries.size(); i++)
|
||||||
|
{
|
||||||
|
JSONObject jsonEntry = (JSONObject)jsonEntries.get(i);
|
||||||
|
JSONObject entry = (JSONObject)jsonEntry.get("entry");
|
||||||
|
groups.add(parseSiteGroup(siteId, entry));
|
||||||
|
}
|
||||||
|
|
||||||
|
PublicApiClient.ExpectedPaging paging = PublicApiClient.ExpectedPaging.parsePagination(jsonList);
|
||||||
|
return new PublicApiClient.ListResponse<SiteGroup>(paging, groups);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public JSONObject toJSON()
|
||||||
|
{
|
||||||
|
JSONObject entry = new JSONObject();
|
||||||
|
|
||||||
|
if (getId() != null)
|
||||||
|
{
|
||||||
|
entry.put("id", getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getRole() != null)
|
||||||
|
{
|
||||||
|
entry.put("role", getRole());
|
||||||
|
}
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result;
|
||||||
|
result = prime * result + ((role == null) ? 0 : role.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
SiteGroup other = (SiteGroup) obj;
|
||||||
|
if (getId() == null)
|
||||||
|
{
|
||||||
|
if (other.getId() != null)
|
||||||
|
return false;
|
||||||
|
} else if (!getId().equals(other.getId()))
|
||||||
|
return false;
|
||||||
|
if (role == null)
|
||||||
|
{
|
||||||
|
if (other.role != null)
|
||||||
|
return false;
|
||||||
|
} else if (!role.equals(other.role))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void expected(Object o)
|
||||||
|
{
|
||||||
|
assertTrue(o instanceof SiteGroup);
|
||||||
|
SiteGroup other = (SiteGroup)o;
|
||||||
|
AssertUtil.assertEquals("id", getId(), other.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collator collator = Collator.getInstance();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(SiteGroup o)
|
||||||
|
{
|
||||||
|
String displayName = group.getDisplayName();
|
||||||
|
return collator.compare(displayName, o.getGroup().getDisplayName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -51,6 +51,7 @@ public class SiteMember implements Serializable, ExpectedComparison, Comparable<
|
|||||||
private String siteId;
|
private String siteId;
|
||||||
private String role;
|
private String role;
|
||||||
private Status status;
|
private Status status;
|
||||||
|
private boolean isMemberOfGroup;
|
||||||
|
|
||||||
public SiteMember()
|
public SiteMember()
|
||||||
{
|
{
|
||||||
@@ -75,6 +76,15 @@ public class SiteMember implements Serializable, ExpectedComparison, Comparable<
|
|||||||
this.role = role;
|
this.role = role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SiteMember(String memberId, Person member, String siteId, String role, boolean isMemberOfGroup)
|
||||||
|
{
|
||||||
|
this.memberId = memberId;
|
||||||
|
this.member = member;
|
||||||
|
this.siteId = siteId;
|
||||||
|
this.role = role;
|
||||||
|
this.isMemberOfGroup = isMemberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
public String getMemberId()
|
public String getMemberId()
|
||||||
{
|
{
|
||||||
return memberId;
|
return memberId;
|
||||||
@@ -120,22 +130,32 @@ public class SiteMember implements Serializable, ExpectedComparison, Comparable<
|
|||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMemberOfGroup()
|
||||||
|
{
|
||||||
|
return isMemberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMemberOfGroup(boolean memberOfGroup)
|
||||||
|
{
|
||||||
|
isMemberOfGroup = memberOfGroup;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "SiteMember [memberId=" + memberId + ", member=" + member
|
return "SiteMember [memberId=" + memberId + ", member=" + member
|
||||||
+ ", siteId=" + siteId + ", role=" + role + ", status="
|
+ ", siteId=" + siteId + ", role=" + role + ", status="
|
||||||
+ status + "]";
|
+ status + ", isMemberOfGroup=" + isMemberOfGroup + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiteMember parseSiteMember(String siteId, JSONObject jsonObject)
|
public static SiteMember parseSiteMember(String siteId, JSONObject jsonObject)
|
||||||
{
|
{
|
||||||
String id = (String)jsonObject.get("id");
|
String id = (String)jsonObject.get("id");
|
||||||
String role = (String)jsonObject.get("role");
|
String role = (String)jsonObject.get("role");
|
||||||
|
boolean isMemberOfGroup = (boolean)jsonObject.get("isMemberOfGroup");
|
||||||
JSONObject personJSON = (JSONObject)jsonObject.get("person");
|
JSONObject personJSON = (JSONObject)jsonObject.get("person");
|
||||||
Person member = Person.parsePerson(personJSON);
|
Person member = Person.parsePerson(personJSON);
|
||||||
SiteMember siteMember = new SiteMember(id, member, siteId, role);
|
return new SiteMember(id, member, siteId, role, isMemberOfGroup);
|
||||||
return siteMember;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ListResponse<SiteMember> parseSiteMembers(String siteId, JSONObject jsonObject)
|
public static ListResponse<SiteMember> parseSiteMembers(String siteId, JSONObject jsonObject)
|
||||||
|
Reference in New Issue
Block a user