package org.ovirt.engine.core.itests.ldap;
import java.util.List;
import javax.naming.Name;
import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DirContextAdapter;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.EqualsFilter;
import org.ovirt.engine.core.bll.adbroker.EmptyAttributeMapper;
public class IPAPersonDaoImpl implements PersonDao {
private LdapTemplate ldapTemplate;
@Override
public void create(Person person) {
Name dn = buildDn(person);
DirContextAdapter context = new DirContextAdapter(dn);
mapToContext(person, context);
getLdapTemplate().bind(dn, context, null);
}
@Override
public void update(Person person) {
Name dn = buildDn(person);
DirContextAdapter context = (DirContextAdapter)getLdapTemplate().lookup(dn);
mapToContext(person, context);
getLdapTemplate().modifyAttributes(dn, context.getModificationItems());
}
protected void mapToContext(Person user, DirContextAdapter context) {
context.setAttributeValues("objectclass", new String[] { "top", "person", "organizationalperson",
"inetorgperson", "inetuser", "posixaccount", "krbprincipalaux", "krbticketpolicyaux", "ipaobject",
"mepOriginEntry" });
context.setAttributeValue("cn", user.getUsername());
context.setAttributeValue("sn", user.getSurName());
context.setAttributeValue("givenname", user.getGivenName());
context.setAttributeValue("description", user.getDescription());
context.setAttributeValue("homeDirectory", user.getHomeDirectory());
context.setAttributeValue("gidNumber", user.getGidNumber());
context.setAttributeValue("uidNumber", user.getUidNumber());
context.setAttributeValue("krbPrincipalName", user.getUsername() + "@" + user.getDomain());
}
protected Name buildDn(Person user) {
return buildDn(user.getUsername());
}
protected Name buildDn(String fullname) {
DistinguishedName dn = new DistinguishedName();
dn.add("cn", "accounts");
dn.add("cn", "users");
dn.add("uid", fullname);
return dn;
}
@Override
public void delete(Person person) {
ldapTemplate.unbind(buildDn(person));
}
public Person findByPrimaryKey(String name, String company, String country) {
Name dn = buildDn(name);
return (Person) ldapTemplate.lookup(dn, getContextMapper());
}
private AttributesMapper getContextMapper() {
return new EmptyAttributeMapper();
}
public List findAll() {
EqualsFilter filter = new EqualsFilter("objectclass", "person");
return ldapTemplate.search(DistinguishedName.EMPTY_PATH, filter.encode(), getContextMapper());
}
public void setLdapTemplate(LdapTemplate ldapTemplate) {
this.ldapTemplate = ldapTemplate;
}
public LdapTemplate getLdapTemplate() {
return ldapTemplate;
}
@Override
public void create(Person... persons) {
for (Person p : persons) {
create(p);
}
}
@Override
public void delete(Person... persons) {
for (Person p : persons) {
delete(p);
}
}
@Override
public List runFilter(String filter) {
return runFilter("", filter);
}
@Override
public List runFilter(String baseDN, String filter) {
return ldapTemplate.search(baseDN, filter, new IPAPersonContextMapper());
}
}