From c5220e3a962df246e2a36487e5969cba8091054d Mon Sep 17 00:00:00 2001 From: Gavin Cornwell Date: Wed, 21 May 2008 09:05:00 +0000 Subject: [PATCH] Merged V2.1-A to HEAD 8403: Fix for ADB-33 8586: Fix for ADB-33 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9192 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/messages/webclient.properties | 2 + config/alfresco/web-client-config.xml | 3 + .../web/bean/groups/AddUsersDialog.java | 10 +++ .../bean/wizard/BaseInviteUsersWizard.java | 75 +++++++++++++++++-- .../web/config/ClientConfigElement.java | 29 +++++++ .../web/config/ClientElementReader.java | 9 +++ .../jsp/users/invite-users-wizard/invite.jsp | 14 ++++ 7 files changed, 137 insertions(+), 5 deletions(-) diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties index 3d22726d2d..1ffbfb4af3 100644 --- a/config/alfresco/messages/webclient.properties +++ b/config/alfresco/messages/webclient.properties @@ -602,6 +602,8 @@ space_owner=User ''{0}'' is the current owner of this space. users_and_groups=Users and Groups authority=Username invite_users_summary=Users and Roles +too_many_users=Too many users matched by your search. Please narrow your search and try again. +max_users_returned=Search has been limited to show first {0} results. # Invite Content Users Wizard messages invite_content_title=Invite Content Users Wizard diff --git a/config/alfresco/web-client-config.xml b/config/alfresco/web-client-config.xml index 1b28d86534..f807418b38 100644 --- a/config/alfresco/web-client-config.xml +++ b/config/alfresco/web-client-config.xml @@ -51,6 +51,9 @@ 500 + + 500 + /app:company_home/app:user_homes diff --git a/source/java/org/alfresco/web/bean/groups/AddUsersDialog.java b/source/java/org/alfresco/web/bean/groups/AddUsersDialog.java index 3f44d13551..cae1b4175d 100644 --- a/source/java/org/alfresco/web/bean/groups/AddUsersDialog.java +++ b/source/java/org/alfresco/web/bean/groups/AddUsersDialog.java @@ -54,6 +54,7 @@ import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.ui.common.SortableSelectItem; import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.component.UIGenericPicker; +import org.apache.lucene.search.BooleanQuery; /** * Implementation of the add user dialog. @@ -244,6 +245,15 @@ public class AddUsersDialog extends BaseDialogBean } }); } + catch (BooleanQuery.TooManyClauses clauses) + { + Utils.addErrorMessage(Application.getMessage( + FacesContext.getCurrentInstance(), "too_many_users")); + + try { if (tx != null) {tx.rollback();} } catch (Exception tex) {} + + return new SelectItem[0]; + } catch (Exception err) { Utils.addErrorMessage(MessageFormat.format(Application.getMessage( diff --git a/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java b/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java index 3a0b6f8438..57c39deccd 100644 --- a/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java +++ b/source/java/org/alfresco/web/bean/wizard/BaseInviteUsersWizard.java @@ -46,7 +46,9 @@ import javax.transaction.UserTransaction; import org.alfresco.model.ContentModel; import org.alfresco.repo.search.impl.lucene.QueryParser; import org.alfresco.service.cmr.repository.NodeRef; +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; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; @@ -61,6 +63,9 @@ import org.alfresco.web.bean.repository.User; import org.alfresco.web.ui.common.SortableSelectItem; import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.component.UIGenericPicker; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.lucene.search.BooleanQuery; import org.springframework.mail.javamail.JavaMailSender; /** @@ -72,12 +77,15 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean { private static final long serialVersionUID = -5145813383038390250L; + private final static Log logger = LogFactory.getLog(BaseInviteUsersWizard.class); + /** I18N message strings */ protected static final String MSG_USERROLES = "invite_users_summary"; private static final String MSG_USERS = "users"; private static final String MSG_GROUPS = "groups"; private static final String MSG_INVITED_TO = "invited_to"; private static final String MSG_INVITED_ROLE = "invite_role"; + private static final String MSG_MAX_USERS = "max_users_returned"; protected static final String STEP_NOTIFY = "notify"; @@ -111,6 +119,9 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean /** True to allow duplicate authorities (with a different role) */ protected boolean allowDuplicateAuthorities = true; + /** Flag to determine if the maximum number of users have been returned */ + protected boolean maxUsersReturned = false; + /** dialog state */ private String notify = NOTIFY_NO; @@ -208,6 +219,7 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean { super.init(parameters); + maxUsersReturned = false; notify = NOTIFY_NO; userRolesDataModel = null; userGroupRoles = new ArrayList(8); @@ -339,6 +351,7 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean FacesContext context = FacesContext.getCurrentInstance(); SelectItem[] items; + this.maxUsersReturned = false; UserTransaction tx = null; try @@ -360,11 +373,32 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean query.append("*\" @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:"); query.append(term); query.append("*"); - ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query( - Repository.getStoreRef(), - SearchService.LANGUAGE_LUCENE, - query.toString()); - List nodes = resultSet.getNodeRefs(); + + int maxResults = Application.getClientConfig(context).getInviteUsersMaxResults(); + + if (logger.isDebugEnabled()) + { + logger.debug("Maximum invite users results size: " + maxResults); + } + + SearchParameters searchParams = new SearchParameters(); + searchParams.addStore(Repository.getStoreRef()); + searchParams.setLanguage(SearchService.LANGUAGE_LUCENE); + searchParams.setQuery(query.toString()); + if (maxResults > 0) + { + searchParams.setLimit(maxResults); + searchParams.setLimitBy(LimitBy.FINAL_SIZE); + } + + ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(searchParams); + List nodes = resultSet.getNodeRefs(); + + // set the maximum users returned flag if appropriate + if (nodes.size() == maxResults) + { + this.maxUsersReturned = true; + } for (int index=0; index <%@ page isELIgnored="false" %> +<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %> +<%@ page import="org.alfresco.web.ui.common.Utils" %> + + + + <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "yellowInner", "#ffffcc"); %> +    + + + + <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "yellowInner"); + out.write("
"); %> +
+