diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService.java b/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService.java index 40dae8e200..fd007ec94c 100644 --- a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService.java +++ b/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityService.java @@ -106,18 +106,30 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension { authorities = Collections.emptySet(); } - return makeScriptGroups(authorities, paging, sortBy, authorityService); + return makeScriptGroups(authorities, paging, sortBy, serviceRegistry); } - /** - * Search the root groups, those without a parent group. - * @return The root groups (empty if there are no root groups) - */ - public ScriptGroup[] searchRootGroups(String displayNamePattern) + /** + * Search the root groups, those without a parent group. + * @return The root groups (empty if there are no root groups) + */ + 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. * @return The root groups (empty if there are no root groups) @@ -150,7 +162,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension { 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(); } - 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(); } - 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)) { - ScriptGroup group = new ScriptGroup(fullName, authorityService); + ScriptGroup group = new ScriptGroup(fullName, serviceRegistry); return group; } // group not found. @@ -234,7 +246,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension { if (authorityService.authorityExists(fullAuthorityName)) { - ScriptGroup group = new ScriptGroup(fullAuthorityName, authorityService); + ScriptGroup group = new ScriptGroup(fullAuthorityName, serviceRegistry); return group; } // group not found. @@ -263,6 +275,19 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension 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 * @@ -321,7 +346,7 @@ public class ScriptAuthorityService extends BaseScopableProcessorExtension // Return an empty set if unrecognised authority. authorities = Collections.emptySet(); } - return makeScriptGroups(authorities, paging, sortBy, authorityService); + return makeScriptGroups(authorities, paging, sortBy, serviceRegistry); } /** diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java b/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java index d5f8da4159..f2b69553d0 100644 --- a/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java +++ b/source/java/org/alfresco/repo/security/authority/script/ScriptAuthorityServiceTest.java @@ -219,12 +219,32 @@ public class ScriptAuthorityServiceTest extends TestCase 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() { + 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() diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java b/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java index 36c13acddf..d26bcd4e30 100644 --- a/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java +++ b/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; +import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.util.ModelUtil; @@ -45,6 +46,7 @@ import org.alfresco.util.ScriptPagingDetails; public class ScriptGroup implements Authority, Serializable { private static final long serialVersionUID = 6073732221341647273L; + private transient ServiceRegistry serviceRegistry; private transient AuthorityService authorityService; private ScriptAuthorityType authorityType = ScriptAuthorityType.GROUP; private String shortName; @@ -53,17 +55,39 @@ public class ScriptGroup implements Authority, Serializable private Set childAuthorityNames; private Boolean isAdmin; + /** + * New script group + * @param fullName + * @param serviceRegistry + */ + public ScriptGroup(String fullName, ServiceRegistry serviceRegistry) + { + this(fullName, serviceRegistry, serviceRegistry.getAuthorityService()); + } + /** * New script group * @param fullName * @param authorityService + * @deprecated Use {@link #ScriptGroup(String, ServiceRegistry)} instead */ public ScriptGroup(String fullName, AuthorityService authorityService) { - this.authorityService = authorityService; - this.fullName = fullName; - shortName = authorityService.getShortName(fullName); - displayName = authorityService.getAuthorityDisplayName(fullName); + this(fullName, null, authorityService); + } + + /** + * 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 users = new LinkedHashSet(); for (String authority : children) { - ScriptUser user = new ScriptUser(authority, authorityService); + ScriptUser user = new ScriptUser(authority, null, serviceRegistry); users.add(user); } return users.toArray(new ScriptUser[users.size()]); @@ -147,7 +171,7 @@ public class ScriptGroup implements Authority, Serializable Set groups = new LinkedHashSet(); for (String authority : children) { - ScriptGroup group = new ScriptGroup(authority, authorityService); + ScriptGroup group = new ScriptGroup(authority, serviceRegistry, authorityService); groups.add(group); } return groups.toArray(new ScriptGroup[groups.size()]); @@ -202,7 +226,7 @@ public class ScriptGroup implements Authority, Serializable Set users = new LinkedHashSet(); for (String authority : children) { - ScriptUser user = new ScriptUser(authority, authorityService); + ScriptUser user = new ScriptUser(authority, null, serviceRegistry); users.add(user); } childUsers = users.toArray(new ScriptUser[users.size()]); @@ -332,7 +356,7 @@ public class ScriptGroup implements Authority, Serializable LinkedHashSet groups = new LinkedHashSet(); for (String authority : sortedParents) { - ScriptGroup group = new ScriptGroup(authority, authorityService); + ScriptGroup group = new ScriptGroup(authority, serviceRegistry, authorityService); groups.add(group); } @@ -370,7 +394,7 @@ public class ScriptGroup implements Authority, Serializable public ScriptGroup[] getAllParentGroups(ScriptPagingDetails paging, String sortBy) { Set 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()); authorityService.addAuthority(fullName, authorityName); - ScriptGroup childGroup = new ScriptGroup(authorityName, authorityService); + ScriptGroup childGroup = new ScriptGroup(authorityName, serviceRegistry, authorityService); clearCaches(); return childGroup; } @@ -482,12 +506,12 @@ public class ScriptGroup implements Authority, Serializable } public static ScriptGroup[] makeScriptGroups(Collection 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 authorities, - ScriptPagingDetails paging, final String sortBy, AuthorityService authorityService) + ScriptPagingDetails paging, final String sortBy, ServiceRegistry serviceRegistry) { final ArrayList authList = new ArrayList(authorities); @@ -499,7 +523,7 @@ public class ScriptGroup implements Authority, Serializable { for(String authority : authorities) { - scriptGroupCache.put(authority, new ScriptGroup(authority, authorityService)); + scriptGroupCache.put(authority, new ScriptGroup(authority, serviceRegistry)); } final AuthorityComparator c2 = new AuthorityComparator(sortBy); Collections.sort(authList, new Comparator() { @@ -538,7 +562,7 @@ public class ScriptGroup implements Authority, Serializable } else { - group = new ScriptGroup(authority, authorityService); + group = new ScriptGroup(authority, serviceRegistry); } groups[i] = group; }