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

View File

@@ -82,6 +82,9 @@ public class SiteServiceImpl implements SiteService, SiteModel
/** Activity tool */ /** Activity tool */
private static final String ACTIVITY_TOOL = "siteService"; 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; private String sitesXPath;
@@ -402,8 +405,7 @@ public class SiteServiceImpl implements SiteService, SiteModel
/** /**
* Helper method to get the name of the site group * Helper method to get the name of the site group
* *
* @param shortName * @param shortName site short name
* site short name
* @return String site group name * @return String site group name
*/ */
public String getSiteGroup(String shortName, boolean withGroupPrefix) public String getSiteGroup(String shortName, boolean withGroupPrefix)
@@ -413,7 +415,7 @@ public class SiteServiceImpl implements SiteService, SiteModel
{ {
sb.append(PermissionService.GROUP_PREFIX); sb.append(PermissionService.GROUP_PREFIX);
} }
sb.append("site_"); sb.append(SITE_PREFIX);
sb.append(shortName); sb.append(shortName);
return sb.toString(); return sb.toString();
} }
@@ -421,14 +423,11 @@ public class SiteServiceImpl implements SiteService, SiteModel
/** /**
* Helper method to get the name of the site permission group * Helper method to get the name of the site permission group
* *
* @param shortName * @param shortName site short name
* site short name * @param permission permission name
* @param permission
* permission name
* @return String site permission group name * @return String site permission group name
*/ */
public String getSiteRoleGroup(String shortName, String permission, public String getSiteRoleGroup(String shortName, String permission, boolean withGroupPrefix)
boolean withGroupPrefix)
{ {
return getSiteGroup(shortName, withGroupPrefix) + "_" + permission; 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 ] * Gets a sites parent folder based on it's short name ]
* *
* @param shortName * @param shortName site short name
* site short name
* @return NodeRef the site's parent * @return NodeRef the site's parent
*/ */
private NodeRef getSiteParent(String shortName) 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 // MT share - for activity service system callback
if (tenantService.isEnabled() && (AuthenticationUtil.SYSTEM_USER_NAME.equals(AuthenticationUtil.getRunAsUser())) && tenantService.isTenantName(shortName)) 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 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)); }, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantDomain));
} }
else 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); NodeRef siteNodeRef = getSiteNodeRef(shortName);
if (siteNodeRef == null) if (siteNodeRef == null)
@@ -779,74 +777,101 @@ public class SiteServiceImpl implements SiteService, SiteModel
throw new SiteServiceException(MSG_SITE_NO_EXIST, new Object[]{shortName}); 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) for (String permission : permissions)
{ {
if (filterMatch(roleFilter, permission) == true) if (roleFilter == null || roleFilter.length() == 0 || roleFilter.equals(permission))
{ {
String groupName = getSiteRoleGroup(shortName, permission, true); String groupName = getSiteRoleGroup(shortName, permission, true);
Set<String> users = this.authorityService.getContainedAuthorities(AuthorityType.USER, groupName, true); Set<String> users = this.authorityService.getContainedAuthorities(AuthorityType.USER, groupName, true);
for (String user : users) 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 // Add the user and their permission to the returned map
members.put(user, permission); 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); Set<String> groups = this.authorityService.getContainedAuthorities(AuthorityType.GROUP, groupName, true);
for (String group : groups) for (String group : groups)
{ {
if (collapseGroups == false) if (collapseGroups == false)
{ {
if (filterMatch(nameFilter, group) == true) boolean addGroup = true;
if (nameFilter != null && nameFilter.length() != 0)
{ {
// Add the group and their permission to the returned map // found a filter - does it match Group name part?
members.put(group, permission); if (group.substring(GROUP_PREFIX_LENGTH).toLowerCase().contains(nameFilter.toLowerCase()))
} {
members.put(group, permission);
}
}
} }
else else
{ {
Set<String> subUsers = this.authorityService.getContainedAuthorities(AuthorityType.USER, group, false); Set<String> subUsers = this.authorityService.getContainedAuthorities(AuthorityType.USER, group, false);
for (String subUser : subUsers) 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 // Add the collapsed user into the members list if they do not already appear in the list
if (members.containsKey(subUser) == false) if (members.containsKey(subUser) == false)
{ {
members.put(subUser, permission); members.put(subUser, permission);
} }
// break on max size limit reached
if (members.size() == size) break;
} }
} }
} }
} }
} }
} }
return members; return members;
} }
/** /**
* Helper method to calculate whether a value matches a filter or not * Helper to
* * @param filter
* @param filter filter * @param username
* @param value value * @return
* @return boolean true if the value matches the filter, false otherwise
*/ */
private boolean filterMatch(String filter, String value) private boolean matchPerson(String filter, String username)
{ {
boolean result = false; boolean addUser = false;
if (filter == null || NodeRef personRef = this.personService.getPerson(username);
filter.length() == 0 || Map<QName, Serializable> props = this.nodeService.getProperties(personRef);
filter.equals(value) == true) 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); 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 // 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); assertNotNull(members);
assertEquals(1, members.size()); assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -392,7 +392,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR); this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR);
// Get the members of the site // Get the members of the site
members = this.siteService.listMembers("testMembership", null, null); members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members); assertNotNull(members);
assertEquals(3, members.size()); assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -403,14 +403,14 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertEquals(SiteModel.SITE_COLLABORATOR, members.get(USER_THREE)); assertEquals(SiteModel.SITE_COLLABORATOR, members.get(USER_THREE));
// Get only the site managers // 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); assertNotNull(members);
assertEquals(1, members.size()); assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
assertEquals(SiteModel.SITE_MANAGER, members.get(USER_ONE)); assertEquals(SiteModel.SITE_MANAGER, members.get(USER_ONE));
// Get only user two // Get only user two
members = this.siteService.listMembers("testMembership", USER_TWO, null); members = this.siteService.listMembers("testMembership", USER_TWO, null, 0);
assertNotNull(members); assertNotNull(members);
assertEquals(1, members.size()); assertEquals(1, members.size());
assertTrue(members.containsKey(USER_TWO)); assertTrue(members.containsKey(USER_TWO));
@@ -420,7 +420,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.setMembership("testMembership", USER_TWO, SiteModel.SITE_COLLABORATOR); this.siteService.setMembership("testMembership", USER_TWO, SiteModel.SITE_COLLABORATOR);
// Check the members of the site // Check the members of the site
members = this.siteService.listMembers("testMembership", null, null); members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members); assertNotNull(members);
assertEquals(3, members.size()); assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -434,7 +434,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
this.siteService.removeMembership("testMembership", USER_TWO); this.siteService.removeMembership("testMembership", USER_TWO);
// Check the members of the site // Check the members of the site
members = this.siteService.listMembers("testMembership", null, null); members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members); assertNotNull(members);
assertEquals(2, members.size()); assertEquals(2, members.size());
assertTrue(members.containsKey(USER_ONE)); 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); 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 // 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); assertNotNull(members);
assertEquals(1, members.size()); assertEquals(1, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -686,7 +686,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
// Add a group // Add a group
this.siteService.setMembership("testMembership", this.groupTwo, SiteModel.SITE_CONSUMER); this.siteService.setMembership("testMembership", this.groupTwo, SiteModel.SITE_CONSUMER);
// - is the group in the list of all members? // - 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); assertNotNull(members);
assertEquals(2, members.size()); assertEquals(2, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -694,7 +694,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertTrue(members.containsKey(this.groupTwo)); assertTrue(members.containsKey(this.groupTwo));
assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo)); assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo));
// - is the user in the expanded list? // - 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); assertNotNull(members);
assertEquals(3, members.size()); assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -718,7 +718,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
// Add a group member as an explicit member // Add a group member as an explicit member
this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR); this.siteService.setMembership("testMembership", USER_THREE, SiteModel.SITE_COLLABORATOR);
// - check the explicit members list // - check the explicit members list
members = this.siteService.listMembers("testMembership", null, null); members = this.siteService.listMembers("testMembership", null, null, 0);
assertNotNull(members); assertNotNull(members);
assertEquals(3, members.size()); assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));
@@ -728,7 +728,7 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest
assertTrue(members.containsKey(this.groupTwo)); assertTrue(members.containsKey(this.groupTwo));
assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo)); assertEquals(SiteModel.SITE_CONSUMER, members.get(this.groupTwo));
// - check the expanded members list // - check the expanded members list
members = this.siteService.listMembers("testMembership", null, null, true); members = this.siteService.listMembers("testMembership", null, null, 0, true);
assertNotNull(members); assertNotNull(members);
assertEquals(3, members.size()); assertEquals(3, members.size());
assertTrue(members.containsKey(USER_ONE)); assertTrue(members.containsKey(USER_ONE));

View File

@@ -299,11 +299,13 @@ public class Site implements Serializable
* *
* @param nameFilter user name filter * @param nameFilter user name filter
* @param roleFilter user role 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 * @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>(); ScriptableHashMap<String, String> result = new ScriptableHashMap<String, String>();
result.putAll(members); result.putAll(members);

View File

@@ -92,9 +92,10 @@ public interface SiteService
* @param shortName site short name * @param shortName site short name
* @param nameFilter name filter * @param nameFilter name filter
* @param roleFilter role filter * @param roleFilter role filter
* @param size max results size crop if >0
* @return Map<String, String> the authority name and their role * @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 * 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 shortName site short name
* @param nameFilter name filter * @param nameFilter name filter
* @param roleFilter role 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 * @param collapseGroups true if collapse member groups into user list, false otherwise
* @return Map<String, String> the authority name and their role * @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. * Gets the role of the specified user.