* {@inheritDoc}
*/
public Collection<Group> findGroupByMembership(String userName, String membershipType) throws Exception
{
List<Group> groups = new ArrayList<Group>();
LdapContext ctx = ldapService.getLdapContext();
try
{
NamingEnumeration<SearchResult> results = null;
for (int err = 0;; err++)
{
groups.clear();
try
{
String userDN = getDNFromUsername(ctx, userName);
if (userDN == null)
{
return groups;
}
String filter =
"(&(" + ldapAttrMapping.membershipTypeMemberValue + "=" + userDN + ")("
+ ldapAttrMapping.membershipTypeRoleNameAttr + "=" + membershipType + "))";
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
results = ctx.search(ldapAttrMapping.groupsURL, filter, constraints);
while (results.hasMoreElements())
{
SearchResult sr = results.next();
NameParser parser = ctx.getNameParser("");
Name entryNameName = parser.parse(new CompositeName(sr.getName()).get(0));
String entryName =
String.valueOf(entryNameName).substring(entryNameName.getSuffix(1).toString().length() + 1);
String groupDN = entryName + "," + ldapAttrMapping.groupsURL;
Group group = getGroupByDN(ctx, groupDN);