diff --git a/source/java/org/alfresco/web/bean/groups/GroupsDialog.java b/source/java/org/alfresco/web/bean/groups/GroupsDialog.java index 5048632eee..3e4f22fd94 100644 --- a/source/java/org/alfresco/web/bean/groups/GroupsDialog.java +++ b/source/java/org/alfresco/web/bean/groups/GroupsDialog.java @@ -32,6 +32,8 @@ import javax.faces.event.ActionEvent; import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; +import org.alfresco.query.PagingRequest; +import org.alfresco.query.PagingResults; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; @@ -448,8 +450,23 @@ public class GroupsDialog extends BaseDialogBean } else { - boolean immediate = (this.filterMode.equals(FILTER_CHILDREN)); - Set authorities = this.authService.findAuthorities(AuthorityType.GROUP, this.group, immediate, search, AuthorityService.ZONE_APP_DEFAULT); + List authorities; + + if (search != null && search.startsWith("*")) + { + // if the search term starts with a wildcard use Lucene based search to find groups (results will be inconsistent) + boolean immediate = (this.filterMode.equals(FILTER_CHILDREN)); + Set results = this.authService.findAuthorities(AuthorityType.GROUP, this.group, immediate, search, AuthorityService.ZONE_APP_DEFAULT); + authorities = new ArrayList(results); + } + else + { + // all other searches use the canned query so search results are consistent + PagingResults pagedResults = this.authService.getAuthorities(AuthorityType.GROUP, + AuthorityService.ZONE_APP_DEFAULT, search, true, true, new PagingRequest(10000)); + authorities = pagedResults.getPage(); + } + groups = new ArrayList>(authorities.size()); for (String authority : authorities) { diff --git a/source/java/org/alfresco/web/bean/users/MailInviteSpaceUsersWizard.java b/source/java/org/alfresco/web/bean/users/MailInviteSpaceUsersWizard.java index 581ea054d7..b0ce5b3a62 100644 --- a/source/java/org/alfresco/web/bean/users/MailInviteSpaceUsersWizard.java +++ b/source/java/org/alfresco/web/bean/users/MailInviteSpaceUsersWizard.java @@ -20,8 +20,6 @@ package org.alfresco.web.bean.users; import java.util.Set; -import org.alfresco.service.cmr.security.AuthorityService; -import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.web.bean.spaces.InviteSpaceUsersWizard; /** @@ -30,14 +28,12 @@ import org.alfresco.web.bean.spaces.InviteSpaceUsersWizard; */ public class MailInviteSpaceUsersWizard extends InviteSpaceUsersWizard { + private static final long serialVersionUID = -68947308160920434L; + @Override protected Set getGroups(String search) { - // groups - text search match on supplied name - String term = "*" + search + "*"; - Set groups; - groups = getAuthorityService().findAuthorities(AuthorityType.GROUP, null, false, term, - AuthorityService.ZONE_APP_DEFAULT); - return groups; + // get the groups without the EVERYONE group + return super.getGroups(search, false); } } \ No newline at end of file diff --git a/source/java/org/alfresco/web/bean/wcm/SetPermissionsDialog.java b/source/java/org/alfresco/web/bean/wcm/SetPermissionsDialog.java index 6476bae933..2f4510cc56 100644 --- a/source/java/org/alfresco/web/bean/wcm/SetPermissionsDialog.java +++ b/source/java/org/alfresco/web/bean/wcm/SetPermissionsDialog.java @@ -24,6 +24,7 @@ import java.io.Serializable; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.ResourceBundle; @@ -39,6 +40,7 @@ import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; import org.alfresco.query.PagingRequest; +import org.alfresco.query.PagingResults; import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.repository.NodeRef; @@ -276,10 +278,24 @@ public class SetPermissionsDialog extends UpdatePermissionsDialog } else { - // groups - text search match on supplied name - String term = "*" + contains.trim() + "*"; Set groups; - groups = getAuthorityService().findAuthorities(AuthorityType.GROUP, null, false, term, AuthorityService.ZONE_APP_DEFAULT); + + if (contains != null && contains.startsWith("*")) + { + // if the search term starts with a wildcard use Lucene based search to find groups (results will be inconsistent) + String term = contains.trim() + "*"; + groups = getAuthorityService().findAuthorities(AuthorityType.GROUP, null, false, term, + AuthorityService.ZONE_APP_DEFAULT); + } + else + { + // all other searches use the canned query so search results are consistent + PagingResults pagedResults = getAuthorityService().getAuthorities(AuthorityType.GROUP, + AuthorityService.ZONE_APP_DEFAULT, contains, true, true, new PagingRequest(10000)); + groups = new LinkedHashSet(pagedResults.getPage()); + } + + // add the EVERYONE group to the results groups.addAll(getAuthorityService().getAllAuthorities(AuthorityType.EVERYONE)); String groupDisplayName; diff --git a/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java index 45e237f16d..b1c1712fe1 100644 --- a/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java +++ b/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java @@ -24,10 +24,12 @@ import java.io.Serializable; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; +import java.util.TreeSet; import javax.faces.component.UISelectOne; import javax.faces.context.FacesContext; @@ -39,6 +41,7 @@ import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; import org.alfresco.query.PagingRequest; +import org.alfresco.query.PagingResults; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.NodeRef; @@ -548,13 +551,35 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean protected Set getGroups(String search) { - // groups - text search match on supplied name - String term = "*" + search + "*"; - Set groups; - groups = getAuthorityService().findAuthorities(AuthorityType.GROUP, null, false, term, - AuthorityService.ZONE_APP_DEFAULT); - groups.addAll(getAuthorityService().getAllAuthorities(AuthorityType.EVERYONE)); - return groups; + return getGroups(search, true); + } + + protected Set getGroups(String search, boolean includeEveryone) + { + Set groups; + + if (search != null && search.startsWith("*")) + { + // if the search term starts with a wildcard use Lucene based search to find groups (results will be inconsistent) + String term = search.trim() + "*"; + groups = getAuthorityService().findAuthorities(AuthorityType.GROUP, null, false, term, + AuthorityService.ZONE_APP_DEFAULT); + } + else + { + // all other searches use the canned query so search results are consistent + PagingResults pagedResults = getAuthorityService().getAuthorities(AuthorityType.GROUP, + AuthorityService.ZONE_APP_DEFAULT, search, true, true, new PagingRequest(10000)); + groups = new LinkedHashSet(pagedResults.getPage()); + } + + if (includeEveryone) + { + // add the EVERYONE group to the results + groups.addAll(getAuthorityService().getAllAuthorities(AuthorityType.EVERYONE)); + } + + return groups; } /**