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
25
26
27
28
29
30 public class DefaultUserGroupsPickerSearchService extends DefaultUserPickerSearchService implements UserGroupsPickerSearchService, UserPickerSearchService {
31
32
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
41
42
43
44
45 public Collection getResults(JiraServiceContext jiraServiceContext, String groupNames, String query) {
46
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
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
84
85
86 public Collection getGroups(String _groupNames) {
87 return StringUtil.split(_groupNames, ",");
88 }
89
90 }