1   package com.atlassian.user.impl.ldap.search.page;
2   
3   import com.atlassian.user.EntityException;
4   import com.atlassian.user.Group;
5   import com.atlassian.user.impl.ldap.LDAPEntityFactory;
6   import com.atlassian.user.impl.ldap.LDAPGroupFactory;
7   import com.atlassian.user.impl.ldap.properties.LdapSearchProperties;
8   import com.atlassian.user.impl.ldap.repository.LdapContextFactory;
9   import com.atlassian.user.impl.ldap.search.LDAPPagerInfo;
10  import org.apache.log4j.Category;
11  
12  import javax.naming.NamingEnumeration;
13  import javax.naming.directory.Attribute;
14  import javax.naming.directory.Attributes;
15  import javax.naming.directory.SearchResult;
16  import java.util.List;
17  
18  public class LDAPListOfGroupsPager extends LDAPEntityPager<Group>
19  {
20      public static final Category log = Category.getInstance(LDAPListOfGroupsPager.class);
21  
22      public LDAPListOfGroupsPager(LdapSearchProperties searchProperties, LdapContextFactory contextFactory, LDAPEntityFactory<? extends Group> groupFactory, LDAPPagerInfo info)
23      {
24          super(searchProperties, contextFactory, groupFactory, info);
25      }
26  
27      protected List<Group> preloadSearchResult(SearchResult result, List<Group> prefetched) throws EntityException
28      {
29          try
30          {
31              Attributes entityAttributes = result.getAttributes();
32              Attribute listOfEntitiesAttribute = entityAttributes.get(returningAttributes[0]);
33  
34              NamingEnumeration listOfEntitiesEnumeration = listOfEntitiesAttribute.getAll();
35  
36              while (listOfEntitiesEnumeration.hasMoreElements())
37              {
38                  String groupDN = (String) listOfEntitiesEnumeration.nextElement();
39                  log.debug("got group dn '" + groupDN + "' from pager");
40                  try
41                  {
42                      Group group = ((LDAPGroupFactory) entityFactory).getGroup(groupDN);
43                      prefetched.add(group);
44                  }
45                  catch (Exception e)
46                  {
47                      log.error("Error converting DN: " + groupDN + " into a group entity.", e);
48                  }
49              }
50          }
51          catch (Throwable e)
52          {
53              log.error("Could not covnert search result: " + result + " into a list of groups.", e);
54          }
55  
56          return prefetched;
57      }
58  }