View Javadoc

1   package com.atlassian.jira.bc.user.search;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Collections;
6   import java.util.Iterator;
7   import java.util.List;
8   
9   import org.apache.commons.lang.StringUtils;
10  import org.ofbiz.core.util.StringUtil;
11  
12  import com.atlassian.core.user.BestNameComparator;
13  import com.atlassian.core.user.GroupUtils;
14  import com.atlassian.core.user.UserUtils;
15  import com.atlassian.jira.bc.JiraServiceContext;
16  import com.atlassian.jira.config.properties.ApplicationProperties;
17  import com.atlassian.jira.security.PermissionManager;
18  import com.atlassian.jira.util.EasyList;
19  import com.atlassian.util.profiling.UtilTimerStack;
20  import com.opensymphony.user.User;
21  import com.opensymphony.user.UserManager;
22  
23  /**
24   * FQCN : com.atlassian.jira.bc.user.search.DefaultUserGroupsPickerSearchService
25   * @author Kaamelot
26   * @since 3.x.1.28
27   * Description : Provides a default implementation for UserGroupsPickerSearchService
28   */
29  
30  public class DefaultUserGroupsPickerSearchService extends DefaultUserPickerSearchService implements UserGroupsPickerSearchService, UserPickerSearchService {
31  
32  	/** Timer marker */
33  	private static final String RUNNING_USER_GROUPS_PICKER_SEARCH = "Running user-picker search from Groups : ";
34  
35  	public DefaultUserGroupsPickerSearchService(UserManager userManager, ApplicationProperties applicationProperties, PermissionManager permissionManager) {
36  		super(userManager, applicationProperties, permissionManager);
37  	}
38  
39  	/**
40  	 * @param jiraServiceContext JIRA Context
41  	 * @param groupNames Comma-separated List of Groups Name 
42  	 * @param query Search Query (user Id., Name, email )
43  	 * @return List of Users member of listed group
44  	 */	
45  	public Collection getResults(JiraServiceContext jiraServiceContext, String groupNames, String query) {
46  		// is it allowed? How did they get here anyway??
47  		if (!canPerformAjaxSearch(jiraServiceContext)) {
48  			return Collections.EMPTY_LIST;
49  		}
50  
51  		UtilTimerStack.push(RUNNING_USER_GROUPS_PICKER_SEARCH + query);
52  		try {
53  			final Collection returnUsers = new ArrayList();
54  			if (StringUtils.isNotBlank(query)) {
55  				boolean canShowEmailAddresses = canShowEmailAddresses(jiraServiceContext);
56  				// final Collection users = getAllUsers();
57  				final Collection users = new ArrayList();
58  				Collection groups = getGroups(groupNames);
59  				if (groups != null) {
60  					for (Iterator iterator = groups.iterator(); iterator.hasNext();) {
61  						String group = (String) iterator.next();
62  						users.addAll(UserUtils.getUsers(EasyList.build(GroupUtils.getGroup(group))));
63  					}
64  				} else {
65  					users.addAll(super.getAllUsers());
66  				}
67  
68  				for (Iterator iterator = users.iterator(); iterator.hasNext();) {
69  					final User user = (User) iterator.next();
70  					if (userMatches(user, query, canShowEmailAddresses)) {
71  						returnUsers.add(user);
72  					}
73  				}
74  			}
75  			Collections.sort((List) returnUsers, new BestNameComparator());
76  			return returnUsers;
77  		} finally {
78  			UtilTimerStack.pop(RUNNING_USER_GROUPS_PICKER_SEARCH + query);
79  		}
80  	}
81  
82  	/**
83  	 * @param _groupNames
84  	 * @return Collection of Groups Name
85  	 */
86  	public Collection getGroups(String _groupNames) {
87  		return StringUtil.split(_groupNames, ",");
88  	}
89  
90  }