ALF-8968 - Change the prefered ScriptGroup constructor to include the ServiceRegistry, so it can be passed on to child ScriptUser objects

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28424 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Nick Burch
2011-06-16 11:51:22 +00:00
parent 5aacf7e84e
commit 2445f01771
3 changed files with 99 additions and 30 deletions

View File

@@ -106,18 +106,30 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
{ {
authorities = Collections.emptySet(); authorities = Collections.emptySet();
} }
return makeScriptGroups(authorities, paging, sortBy, authorityService); return makeScriptGroups(authorities, paging, sortBy, serviceRegistry);
} }
/** /**
* Search the root groups, those without a parent group. * Search the root groups, those without a parent group.
* @return The root groups (empty if there are no root groups) * @return The root groups (empty if there are no root groups)
*/ */
public ScriptGroup[] searchRootGroups(String displayNamePattern) public ScriptGroup[] searchRootGroups(String displayNamePattern)
{ {
return searchRootGroupsInZone(displayNamePattern, null); return searchRootGroupsInZone(displayNamePattern, null);
} }
/**
* Search the root groups, those without a parent group.
*
* @param paging Paging object with max number to return, and items to skip
* @param sortBy What to sort on (authorityName, shortName or displayName)
* @return The root groups (empty if there are no root groups)
*/
public ScriptGroup[] searchRootGroups(String displayNamePattern, ScriptPagingDetails paging, String sortBy)
{
return searchRootGroupsInZone(displayNamePattern, null, paging, sortBy);
}
/** /**
* Search the root groups, those without a parent group. Searches in all zones. * Search the root groups, those without a parent group. Searches in all zones.
* @return The root groups (empty if there are no root groups) * @return The root groups (empty if there are no root groups)
@@ -150,7 +162,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
{ {
authorities = Collections.emptySet(); authorities = Collections.emptySet();
} }
return makeScriptGroups(authorities, paging, authorityService); return makeScriptGroups(authorities, paging, serviceRegistry);
} }
/** /**
@@ -182,7 +194,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
authorities = Collections.emptySet(); authorities = Collections.emptySet();
} }
return makeScriptGroups(authorities, new ScriptPagingDetails(maxItems, skipCount), null, authorityService); return makeScriptGroups(authorities, new ScriptPagingDetails(maxItems, skipCount), null, serviceRegistry);
} }
/** /**
@@ -204,7 +216,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
authorities = Collections.emptySet(); authorities = Collections.emptySet();
} }
return makeScriptGroups(authorities, paging, sortBy, authorityService); return makeScriptGroups(authorities, paging, sortBy, serviceRegistry);
} }
/** /**
@@ -218,7 +230,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
if (authorityService.authorityExists(fullName)) if (authorityService.authorityExists(fullName))
{ {
ScriptGroup group = new ScriptGroup(fullName, authorityService); ScriptGroup group = new ScriptGroup(fullName, serviceRegistry);
return group; return group;
} }
// group not found. // group not found.
@@ -234,7 +246,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
{ {
if (authorityService.authorityExists(fullAuthorityName)) if (authorityService.authorityExists(fullAuthorityName))
{ {
ScriptGroup group = new ScriptGroup(fullAuthorityName, authorityService); ScriptGroup group = new ScriptGroup(fullAuthorityName, serviceRegistry);
return group; return group;
} }
// group not found. // group not found.
@@ -263,6 +275,19 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
return searchGroupsInZone(shortNameFilter, null); return searchGroupsInZone(shortNameFilter, null);
} }
/**
* Search for groups in all zones.
*
* @param shortNameFilter partial match on shortName (* and ?) work. If empty then matches everything.
* @param paging Paging object with max number to return, and items to skip
* @param sortBy What to sort on (authorityName, shortName or displayName)
* @return the groups matching the query
*/
public ScriptGroup[] searchGroups(String shortNameFilter, ScriptPagingDetails paging, String sortBy)
{
return searchGroupsInZone(shortNameFilter, null, paging, sortBy);
}
/** /**
* Search for groups in a specific zone * Search for groups in a specific zone
* *
@@ -321,7 +346,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension
// Return an empty set if unrecognised authority. // Return an empty set if unrecognised authority.
authorities = Collections.emptySet(); authorities = Collections.emptySet();
} }
return makeScriptGroups(authorities, paging, sortBy, authorityService); return makeScriptGroups(authorities, paging, sortBy, serviceRegistry);
} }
/** /**

View File

@@ -219,12 +219,32 @@ public class ScriptAuthorityServiceTest extends TestCase
public void testFindGroups() public void testFindGroups()
{ {
// service.searchGroups(shortNameFilter, paging, sortBy);
// service.searchGroupsInZone(shortNameFilter, zone, paging, sortBy);
// service.searchRootGroups(displayNamePattern, paging, sortBy);
// service.searchRootGroupsInZone(displayNamePattern, paging, sortBy);
} }
public void testGroupUsers() public void testGroupUsers()
{ {
ScriptGroup groupA = service.getGroup(GROUP_A);
// Check on a group with no users
assertEquals(0, groupA.getUserCount());
ScriptUser[] users = groupA.getAllUsers();
assertEquals(0, users.length);
// Add some users to the group
authorityService.addAuthority(GROUP_A_FULL, USER_A);
authorityService.addAuthority(GROUP_A_FULL, USER_B);
// Now look for the users on that group
groupA = service.getGroup(GROUP_A);
assertEquals(2, groupA.getUserCount());
users = groupA.getAllUsers();
assertEquals(2, users.length);
// TODO check
} }
public void testUsers() public void testUsers()

View File

@@ -31,6 +31,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.util.ModelUtil; import org.alfresco.util.ModelUtil;
@@ -45,6 +46,7 @@ import org.alfresco.util.ScriptPagingDetails;
public class ScriptGroup implements Authority, Serializable public class ScriptGroup implements Authority, Serializable
{ {
private static final long serialVersionUID = 6073732221341647273L; private static final long serialVersionUID = 6073732221341647273L;
private transient ServiceRegistry serviceRegistry;
private transient AuthorityService authorityService; private transient AuthorityService authorityService;
private ScriptAuthorityType authorityType = ScriptAuthorityType.GROUP; private ScriptAuthorityType authorityType = ScriptAuthorityType.GROUP;
private String shortName; private String shortName;
@@ -53,17 +55,39 @@ public class ScriptGroup implements Authority, Serializable
private Set<String> childAuthorityNames; private Set<String> childAuthorityNames;
private Boolean isAdmin; private Boolean isAdmin;
/**
* New script group
* @param fullName
* @param serviceRegistry
*/
public ScriptGroup(String fullName, ServiceRegistry serviceRegistry)
{
this(fullName, serviceRegistry, serviceRegistry.getAuthorityService());
}
/** /**
* New script group * New script group
* @param fullName * @param fullName
* @param authorityService * @param authorityService
* @deprecated Use {@link #ScriptGroup(String, ServiceRegistry)} instead
*/ */
public ScriptGroup(String fullName, AuthorityService authorityService) public ScriptGroup(String fullName, AuthorityService authorityService)
{ {
this.authorityService = authorityService; this(fullName, null, authorityService);
this.fullName = fullName; }
shortName = authorityService.getShortName(fullName);
displayName = authorityService.getAuthorityDisplayName(fullName); /**
* New script group
* @param fullName
* @param authorityService
*/
private ScriptGroup(String fullName, ServiceRegistry serviceRegistry, AuthorityService authorityService)
{
this.authorityService = authorityService;
this.serviceRegistry = serviceRegistry;
this.fullName = fullName;
shortName = authorityService.getShortName(fullName);
displayName = authorityService.getAuthorityDisplayName(fullName);
} }
/** /**
@@ -131,7 +155,7 @@ public class ScriptGroup implements Authority, Serializable
Set<ScriptUser> users = new LinkedHashSet<ScriptUser>(); Set<ScriptUser> users = new LinkedHashSet<ScriptUser>();
for (String authority : children) for (String authority : children)
{ {
ScriptUser user = new ScriptUser(authority, authorityService); ScriptUser user = new ScriptUser(authority, null, serviceRegistry);
users.add(user); users.add(user);
} }
return users.toArray(new ScriptUser[users.size()]); return users.toArray(new ScriptUser[users.size()]);
@@ -147,7 +171,7 @@ public class ScriptGroup implements Authority, Serializable
Set<ScriptGroup> groups = new LinkedHashSet<ScriptGroup>(); Set<ScriptGroup> groups = new LinkedHashSet<ScriptGroup>();
for (String authority : children) for (String authority : children)
{ {
ScriptGroup group = new ScriptGroup(authority, authorityService); ScriptGroup group = new ScriptGroup(authority, serviceRegistry, authorityService);
groups.add(group); groups.add(group);
} }
return groups.toArray(new ScriptGroup[groups.size()]); return groups.toArray(new ScriptGroup[groups.size()]);
@@ -202,7 +226,7 @@ public class ScriptGroup implements Authority, Serializable
Set<ScriptUser> users = new LinkedHashSet<ScriptUser>(); Set<ScriptUser> users = new LinkedHashSet<ScriptUser>();
for (String authority : children) for (String authority : children)
{ {
ScriptUser user = new ScriptUser(authority, authorityService); ScriptUser user = new ScriptUser(authority, null, serviceRegistry);
users.add(user); users.add(user);
} }
childUsers = users.toArray(new ScriptUser[users.size()]); childUsers = users.toArray(new ScriptUser[users.size()]);
@@ -332,7 +356,7 @@ public class ScriptGroup implements Authority, Serializable
LinkedHashSet<ScriptGroup> groups = new LinkedHashSet<ScriptGroup>(); LinkedHashSet<ScriptGroup> groups = new LinkedHashSet<ScriptGroup>();
for (String authority : sortedParents) for (String authority : sortedParents)
{ {
ScriptGroup group = new ScriptGroup(authority, authorityService); ScriptGroup group = new ScriptGroup(authority, serviceRegistry, authorityService);
groups.add(group); groups.add(group);
} }
@@ -370,7 +394,7 @@ public class ScriptGroup implements Authority, Serializable
public ScriptGroup[] getAllParentGroups(ScriptPagingDetails paging, String sortBy) public ScriptGroup[] getAllParentGroups(ScriptPagingDetails paging, String sortBy)
{ {
Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, fullName, false); Set<String> parents = authorityService.getContainingAuthorities(AuthorityType.GROUP, fullName, false);
return makeScriptGroups(parents, paging, sortBy, authorityService); return makeScriptGroups(parents, paging, sortBy, serviceRegistry);
} }
/** /**
@@ -422,7 +446,7 @@ public class ScriptGroup implements Authority, Serializable
{ {
String authorityName = authorityService.createAuthority(AuthorityType.GROUP, newShortName, newDisplayName, authorityService.getDefaultZones()); String authorityName = authorityService.createAuthority(AuthorityType.GROUP, newShortName, newDisplayName, authorityService.getDefaultZones());
authorityService.addAuthority(fullName, authorityName); authorityService.addAuthority(fullName, authorityName);
ScriptGroup childGroup = new ScriptGroup(authorityName, authorityService); ScriptGroup childGroup = new ScriptGroup(authorityName, serviceRegistry, authorityService);
clearCaches(); clearCaches();
return childGroup; return childGroup;
} }
@@ -482,12 +506,12 @@ public class ScriptGroup implements Authority, Serializable
} }
public static ScriptGroup[] makeScriptGroups(Collection<String> authorities, public static ScriptGroup[] makeScriptGroups(Collection<String> authorities,
ScriptPagingDetails paging, AuthorityService authorityService) ScriptPagingDetails paging, ServiceRegistry serviceRegistry)
{ {
return makeScriptGroups(authorities, paging, null, authorityService); return makeScriptGroups(authorities, paging, null, serviceRegistry);
} }
public static ScriptGroup[] makeScriptGroups(Collection<String> authorities, public static ScriptGroup[] makeScriptGroups(Collection<String> authorities,
ScriptPagingDetails paging, final String sortBy, AuthorityService authorityService) ScriptPagingDetails paging, final String sortBy, ServiceRegistry serviceRegistry)
{ {
final ArrayList<String> authList = new ArrayList<String>(authorities); final ArrayList<String> authList = new ArrayList<String>(authorities);
@@ -499,7 +523,7 @@ public class ScriptGroup implements Authority, Serializable
{ {
for(String authority : authorities) for(String authority : authorities)
{ {
scriptGroupCache.put(authority, new ScriptGroup(authority, authorityService)); scriptGroupCache.put(authority, new ScriptGroup(authority, serviceRegistry));
} }
final AuthorityComparator c2 = new AuthorityComparator(sortBy); final AuthorityComparator c2 = new AuthorityComparator(sortBy);
Collections.sort(authList, new Comparator<String>() { Collections.sort(authList, new Comparator<String>() {
@@ -538,7 +562,7 @@ public class ScriptGroup implements Authority, Serializable
} }
else else
{ {
group = new ScriptGroup(authority, authorityService); group = new ScriptGroup(authority, serviceRegistry);
} }
groups[i] = group; groups[i] = group;
} }