public void create(final DirContext ctx, final String ouBase, final T obj, final Object... args)
throws NamingException
{
final String dn = buildDn(ouBase, obj);
log.info("Create " + getObjectClass() + ": " + dn + ": " + getLogInfo(obj));
final Attributes attrs = new BasicAttributes();
final List<ModificationItem> modificationItems = getModificationItems(new ArrayList<ModificationItem>(), obj);
modificationItems.add(createModificationItem(DirContext.ADD_ATTRIBUTE, "objectClass", getObjectClass()));
final String[] additionalObjectClasses = getAdditionalObjectClasses(obj);
if (additionalObjectClasses != null) {
for (final String objectClass : additionalObjectClasses) {
modificationItems.add(createModificationItem(DirContext.ADD_ATTRIBUTE, "objectClass", objectClass));
}
}
for (final ModificationItem modItem : modificationItems) {
final Attribute attr = modItem.getAttribute();
LdapUtils.putAttribute(attrs, attr.getID(), (String) attr.get());
}
LdapUtils.putAttribute(attrs, "cn", LdapUtils.escapeCommonName(obj.getCommonName()));
onBeforeBind(dn, attrs, args);
ctx.bind(dn, null, attrs);
}