Merged V3.1 to HEAD

12899: Fix for ETHREEOH-1175

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13527 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2009-03-10 14:45:49 +00:00
parent 12f5f0f53b
commit 292c0d92f2
5 changed files with 93 additions and 64 deletions

View File

@@ -36,6 +36,7 @@ import org.alfresco.repo.security.authority.AuthorityDAO;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.LimitBy;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
@@ -304,6 +305,11 @@ public final class People extends BaseScopableProcessorExtension
params.setLanguage(SearchService.LANGUAGE_LUCENE);
params.addStore(this.storeRef);
params.setQuery(query.toString());
if (maxResults > 0)
{
params.setLimitBy(LimitBy.FINAL_SIZE);
params.setLimit(maxResults);
}
ResultSet results = null;
try
@@ -325,12 +331,6 @@ public final class People extends BaseScopableProcessorExtension
{
people = new Object[0];
}
else if (maxResults > 0 && people.length > maxResults)
{
Object[] copy = new Object[maxResults];
System.arraycopy(people, 0, copy, 0, maxResults);
people = copy;
}
return Context.getCurrentContext().newArray(getScope(), people);
}

View File

@@ -83,6 +83,9 @@ public class SiteServiceImpl implements SiteService, SiteModel
/** Activity tool */
private static final String ACTIVITY_TOOL = "siteService";
private static final String SITE_PREFIX = "site_";
private static final int GROUP_PREFIX_LENGTH = SITE_PREFIX.length() + PermissionService.GROUP_PREFIX.length();
private String sitesXPath;
/** Messages */
@@ -402,8 +405,7 @@ public class SiteServiceImpl implements SiteService, SiteModel
/**
* Helper method to get the name of the site group
*
* @param shortName
* site short name
* @param shortName site short name
* @return String site group name
*/
public String getSiteGroup(String shortName, boolean withGroupPrefix)
@@ -413,7 +415,7 @@ public class SiteServiceImpl implements SiteService, SiteModel
{
sb.append(PermissionService.GROUP_PREFIX);
}
sb.append("site_");
sb.append(SITE_PREFIX);
sb.append(shortName);
return sb.toString();
}
@@ -421,14 +423,11 @@ public class SiteServiceImpl implements SiteService, SiteModel
/**
* Helper method to get the name of the site permission group
*
* @param shortName
* site short name
* @param permission
* permission name
* @param shortName site short name
* @param permission permission name
* @return String site permission group name
*/
public String getSiteRoleGroup(String shortName, String permission,
boolean withGroupPrefix)
public String getSiteRoleGroup(String shortName, String permission, boolean withGroupPrefix)
{
return getSiteGroup(shortName, withGroupPrefix) + "_" + permission;
}
@@ -436,8 +435,7 @@ public class SiteServiceImpl implements SiteService, SiteModel
/**
* Gets a sites parent folder based on it's short name ]
*
* @param shortName
* site short name
* @param shortName site short name
* @return NodeRef the site's parent
*/
private NodeRef getSiteParent(String shortName)
@@ -739,17 +737,17 @@ public class SiteServiceImpl implements SiteService, SiteModel
}
/**
* @see org.alfresco.service.cmr.site.SiteService#listMembers(java.lang.String, java.lang.String, java.lang.String)
* @see org.alfresco.service.cmr.site.SiteService#listMembers(java.lang.String, java.lang.String, java.lang.String, int)
*/
public Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter)
public Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter, int size)
{
return listMembers(shortName, nameFilter, roleFilter, false);
return listMembers(shortName, nameFilter, roleFilter, size, false);
}
/**
* @see org.alfresco.service.cmr.site.SiteService#listMembers(String, String, String, boolean)
* @see org.alfresco.service.cmr.site.SiteService#listMembers(String, String, String, int, boolean)
*/
public Map<String, String> listMembers(String shortName, final String nameFilter, final String roleFilter, final boolean collapseGroups)
public Map<String, String> listMembers(String shortName, final String nameFilter, final String roleFilter, final int size, final boolean collapseGroups)
{
// MT share - for activity service system callback
if (tenantService.isEnabled() && (AuthenticationUtil.SYSTEM_USER_NAME.equals(AuthenticationUtil.getRunAsUser())) && tenantService.isTenantName(shortName))
@@ -761,17 +759,17 @@ public class SiteServiceImpl implements SiteService, SiteModel
{
public Map<String, String> doWork() throws Exception
{
return listMembersImpl(sName, nameFilter, roleFilter, collapseGroups);
return listMembersImpl(sName, nameFilter, roleFilter, size, collapseGroups);
}
}, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantDomain));
}
else
{
return listMembersImpl(shortName, nameFilter, roleFilter, collapseGroups);
return listMembersImpl(shortName, nameFilter, roleFilter, size, collapseGroups);
}
}
private Map<String, String> listMembersImpl(String shortName, String nameFilter, String roleFilter, boolean collapseGroups)
private Map<String, String> listMembersImpl(String shortName, String nameFilter, String roleFilter, int size, boolean collapseGroups)
{
NodeRef siteNodeRef = getSiteNodeRef(shortName);
if (siteNodeRef == null)
@@ -779,50 +777,72 @@ public class SiteServiceImpl implements SiteService, SiteModel
throw new SiteServiceException(MSG_SITE_NO_EXIST, new Object[]{shortName});
}
Map<String, String> members = new HashMap<String, String>(23);
Map<String, String> members = new HashMap<String, String>(32);
Set<String> permissions = permissionService.getSettablePermissions(SiteModel.TYPE_SITE);
Set<String> permissions = this.permissionService.getSettablePermissions(SiteModel.TYPE_SITE);
for (String permission : permissions)
{
if (filterMatch(roleFilter, permission) == true)
if (roleFilter == null || roleFilter.length() == 0 || roleFilter.equals(permission))
{
String groupName = getSiteRoleGroup(shortName, permission, true);
Set<String> users = this.authorityService.getContainedAuthorities(AuthorityType.USER, groupName, true);
for (String user : users)
{
if (filterMatch(nameFilter, user) == true)
boolean addUser = true;
if (nameFilter != null && nameFilter.length() != 0 && !nameFilter.equals(user))
{
// found a filter - does it match person first/last name?
addUser = matchPerson(nameFilter, user);
}
if (addUser)
{
// Add the user and their permission to the returned map
members.put(user, permission);
// break on max size limit reached
if (members.size() == size) break;
}
}
Set<String> groups = this.authorityService.getContainedAuthorities(AuthorityType.GROUP, groupName, true);
for (String group : groups)
{
if (collapseGroups == false)
{
if (filterMatch(nameFilter, group) == true)
boolean addGroup = true;
if (nameFilter != null && nameFilter.length() != 0)
{
// found a filter - does it match Group name part?
if (group.substring(GROUP_PREFIX_LENGTH).toLowerCase().contains(nameFilter.toLowerCase()))
{
// Add the group and their permission to the returned map
members.put(group, permission);
}
}
}
else
{
Set<String> subUsers = this.authorityService.getContainedAuthorities(AuthorityType.USER, group, false);
for (String subUser : subUsers)
{
if (filterMatch(nameFilter, subUser) == true)
boolean addUser = true;
if (nameFilter != null && nameFilter.length() != 0 && !nameFilter.equals(subUser))
{
// found a filter - does it match person first/last name?
addUser = matchPerson(nameFilter, subUser);
}
if (addUser)
{
// Add the collapsed user into the members list if they do not already appear in the list
if (members.containsKey(subUser) == false)
{
members.put(subUser, permission);
}
}
}
}
// break on max size limit reached
if (members.size() == size) break;
}
}
}
}
}
}
@@ -831,22 +851,27 @@ public class SiteServiceImpl implements SiteService, SiteModel
}
/**
* Helper method to calculate whether a value matches a filter or not
*
* @param filter filter
* @param value value
* @return boolean true if the value matches the filter, false otherwise
* Helper to
* @param filter
* @param username
* @return
*/
private boolean filterMatch(String filter, String value)
private boolean matchPerson(String filter, String username)
{
boolean result = false;
if (filter == null ||
filter.length() == 0 ||
filter.equals(value) == true)
boolean addUser = false;
NodeRef personRef = this.personService.getPerson(username);
Map<QName, Serializable> props = this.nodeService.getProperties(personRef);
String firstName = (String)props.get(ContentModel.PROP_FIRSTNAME);
String lastName = (String)props.get(ContentModel.PROP_LASTNAME);
if (firstName != null && firstName.toLowerCase().indexOf(filter.toLowerCase()) != -1)
{
result = true;
addUser = true;
}
return result;
else if (lastName != null && lastName.toLowerCase().indexOf(filter.toLowerCase()) != -1)
{
addUser = true;
}
return addUser;
}
/**

View File

@@ -381,7 +381,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.createSite(TEST_SITE_PRESET, "testMembership", TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PRIVATE);
// Get the members of the site and check that user one is a manager
Map<String, String> members = this.siteService.listMembers("testMembership", null, null);
Map<String, String> members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -392,7 +392,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR);
// Get the members of the site
members = this.siteService.listMembers("testMembership", null, null);
members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -403,14 +403,14 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertEquals(SiteModel.SITE_COLLABORATOR, members.get(USER_THREE));
// Get only the site managers
members = this.siteService.listMembers("testMembership", null, SiteModel.SITE_MANAGER);
members = this.siteService.listMembers("testMembership", null, SiteModel.SITE_MANAGER, 0);
assertNotNull(members);
assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE));
assertEquals(SiteModel.SITE_MANAGER, members.get(USER_ONE));
// Get only user two
members = this.siteService.listMembers("testMembership", USER_TWO, null);
members = this.siteService.listMembers("testMembership", USER_TWO, null, 0);
assertNotNull(members);
assertEquals(1, members.size());
assertTrue(members.containsKey(USER_TWO));
@@ -420,7 +420,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.setMembership("testMembership", USER_TWO, SiteModel.SITE_COLLABORATOR);
// Check the members of the site
members = this.siteService.listMembers("testMembership", null, null);
members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -434,7 +434,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.removeMembership("testMembership", USER_TWO);
// Check the members of the site
members = this.siteService.listMembers("testMembership", null, null);
members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(2, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -677,7 +677,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.createSite(TEST_SITE_PRESET, "testMembership", TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PRIVATE);
// Get the members of the site and check that user one is a manager
Map<String, String> members = this.siteService.listMembers("testMembership", null, null);
Map<String, String> members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -686,7 +686,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
// Add a group
this.siteService.setMembership("testMembership", this.groupTwo, SiteModel.SITE_CONSUMER);
// - is the group in the list of all members?
members = this.siteService.listMembers("testMembership", null, null);
members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(2, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -694,7 +694,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertTrue(members.containsKey(this.groupTwo));
assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo));
// - is the user in the expanded list?
members = this.siteService.listMembers("testMembership", null, null, true);
members = this.siteService.listMembers("testMembership", null, null, 0, true);
assertNotNull(members);
assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -718,7 +718,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
// Add a group member as an explicit member
this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR);
// - check the explicit members list
members = this.siteService.listMembers("testMembership", null, null);
members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members);
assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE));
@@ -728,7 +728,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertTrue(members.containsKey(this.groupTwo));
assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo));
// - check the expanded members list
members = this.siteService.listMembers("testMembership", null, null, true);
members = this.siteService.listMembers("testMembership", null, null, 0, true);
assertNotNull(members);
assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE));

View File

@@ -299,11 +299,13 @@ public class Site implements Serializable
*
* @param nameFilter user name filter
* @param roleFilter user role filter
* @param size max results size crop if >0
*
* @return ScriptableHashMap<String, String> list of members of site with their roles
*/
public ScriptableHashMap<String, String> listMembers(String nameFilter, String roleFilter)
public ScriptableHashMap<String, String> listMembers(String nameFilter, String roleFilter, int size)
{
Map<String, String> members = this.siteService.listMembers(getShortName(), nameFilter, roleFilter);
Map<String, String> members = this.siteService.listMembers(getShortName(), nameFilter, roleFilter, size);
ScriptableHashMap<String, String> result = new ScriptableHashMap<String, String>();
result.putAll(members);

View File

@@ -92,9 +92,10 @@ public interface SiteService
* @param shortName site short name
* @param nameFilter name filter
* @param roleFilter role filter
* @param size max results size crop if >0
* @return Map<String, String> the authority name and their role
*/
Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter);
Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter, int size);
/**
* List the members of the site. This includes both users and groups if collapseGroups is set to false, otherwise all
@@ -103,10 +104,11 @@ public interface SiteService
* @param shortName site short name
* @param nameFilter name filter
* @param roleFilter role filter
* @param size max results size crop if >0
* @param collapseGroups true if collapse member groups into user list, false otherwise
* @return Map<String, String> the authority name and their role
*/
Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter, boolean collapseGroups);
Map<String, String> listMembers(String shortName, String nameFilter, String roleFilter, int size, boolean collapseGroups);
/**
* Gets the role of the specified user.