package org.ovirt.engine.core.bll.adbroker;
import static org.ovirt.engine.core.bll.adbroker.RHDSRootDSEAttributes.namingContexts;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.springframework.ldap.core.ContextMapper;
import org.springframework.ldap.core.DirContextAdapter;
public class RHDSRootDSEContextMapper implements ContextMapper {
private static LogCompat log = LogFactoryCompat.getLog(RHDSRootDSEContextMapper.class);
public final static String RHDS_NAMING_CONTEXT = "o=netscaperoot";
public final static String[] ROOTDSE_ATTRIBUTE_FILTER = { namingContexts.name() };
public static String getDefaultNamingContextFromNameingContexts(Attribute namingContexts) {
for (int index = 0; index < namingContexts.size(); ++index) {
String namingContext;
try {
namingContext = (String) namingContexts.get(index);
} catch (NamingException e) {
log.error("Failed getting naming contexts from root DSE", e);
return null;
}
if (!RHDS_NAMING_CONTEXT.equalsIgnoreCase(namingContext)) {
return namingContext;
}
}
return null;
}
@Override
public Object mapFromContext(Object ctx) {
DirContextAdapter searchResult = (DirContextAdapter) ctx;
Attributes attributes = searchResult.getAttributes();
if (attributes == null) {
return null;
}
Attribute att = attributes.get(namingContexts.name());
if (att != null) {
return getDefaultNamingContextFromNameingContexts(att);
} else {
return null;
}
}
}