package org.ovirt.engine.core.bll.adbroker;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.springframework.ldap.core.support.LdapContextSource;
/**
* Factory for getting ldap template wrapper according to the configuration
*
*
*/
public class LDAPTemplateWrapperFactory {
private static HashMap<LDAPSecurityAuthentication, Class<? extends LDAPTemplateWrapper>> classesOfLDAPTemplateWrappers =
new HashMap<LDAPSecurityAuthentication, Class<? extends LDAPTemplateWrapper>>();
private static LogCompat log = LogFactoryCompat.getLog(LDAPTemplateWrapperFactory.class);
static {
registerClass(LDAPSecurityAuthentication.GSSAPI, GSSAPILdapTemplateWrapper.class);
registerClass(LDAPSecurityAuthentication.SIMPLE, SimpleLdapTemplateWrapper.class);
}
private static void registerClass(LDAPSecurityAuthentication enumVal,
Class<? extends LDAPTemplateWrapper> matchingClass) {
classesOfLDAPTemplateWrappers.put(enumVal, matchingClass);
}
public static LDAPTemplateWrapper getLDAPTemplateWrapper(LdapContextSource contextSource, String userName,
String password, String domain) {
Domain requestedDomain = UsersDomainsCacheManagerService.getInstance().getDomain(domain);
if (requestedDomain == null) {
throw new DomainNotConfiguredException(domain);
}
LDAPSecurityAuthentication ldapSecurityAuthentication =
UsersDomainsCacheManagerService.getInstance().getDomain(domain).getLdapSecurityAuthentication();
try {
Class<? extends LDAPTemplateWrapper> wrapperClass =
classesOfLDAPTemplateWrappers.get(ldapSecurityAuthentication);
Constructor<? extends LDAPTemplateWrapper> constructor = wrapperClass.getConstructor(
LdapContextSource.class, String.class, String.class, String.class);
return constructor.newInstance(contextSource, userName, password, domain);
} catch (Exception ex) {
log.error("Failed to get LDAPTemplateWrapper for security authentication "
+ ldapSecurityAuthentication.toString());
return null;
}
}
}