public String buildQueryGroupsForUser(final LDAPConfiguration ldapConfigurator, final String userId) {
String searchExpression = null;
if (ldapConfigurator.getQueryGroupsForUser() != null) {
LDAPTemplate ldapTemplate = new LDAPTemplate(ldapConfigurator);
String userDn = ldapTemplate.execute(new LDAPCallBack<String>() {
@Override
public String executeInContext(InitialDirContext initialDirContext) {
String userDnSearch = buildQueryByUserId(ldapConfigurator, userId);
try {
String baseDn = ldapConfigurator.getUserBaseDn() != null ? ldapConfigurator.getUserBaseDn() : ldapConfigurator.getBaseDn();
NamingEnumeration<?> namingEnum = initialDirContext.search(baseDn, userDnSearch, createSearchControls(ldapConfigurator));
while (namingEnum.hasMore()) {
SearchResult result = (SearchResult) namingEnum.next();
return result.getNameInNamespace();
}
namingEnum.close();
} catch (NamingException e) {
LOGGER.debug("Could not find user dn : {}", e.getMessage(), e);
}
return null;
}
});
searchExpression = MessageFormat.format(ldapConfigurator.getQueryGroupsForUser(), Rdn.escapeValue(userDn));
} else {
searchExpression = userId;
}
return searchExpression;
}