下面列出了javax.naming.directory.DirContext#rename ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void move(final DirContext ctx, final T obj, final String newOrganizationalUnit) throws NamingException
{
final Object id = getId(obj);
// The dn is may-be changed, so find the original dn by id:
final T origObject = findById(id, obj.getOrganizationalUnit());
if (origObject == null) {
throw new RuntimeException("Object with id "
+ id
+ " not found in search base '"
+ StringHelper.listToString(",", obj.getOrganizationalUnit())
+ "'. Can't move the object: "
+ obj);
}
final String ou = LdapUtils.getOrganizationalUnit(newOrganizationalUnit);
final String origOu = LdapUtils.getOu(origObject.getOrganizationalUnit());
if (StringUtils.equals(origOu, ou) == false) {
log.info("Move object with id '" + obj.getId() + "' from '" + origOu + "' to '" + ou);
final String dnIdentifier = buildDnIdentifier(obj);
ctx.rename(dnIdentifier + "," + origOu, dnIdentifier + "," + ou);
}
}
public void rename(final DirContext ctx, final T obj, final T oldObj) throws NamingException
{
final String newDnIdentifier = buildDnIdentifier(obj);
final String oldDnIdentifier = buildDnIdentifier(oldObj);
if (StringUtils.equals(newDnIdentifier, oldDnIdentifier) == true) {
// Nothing to rename.
return;
}
final Object id = getId(obj);
// The dn is may-be changed, so find the original dn by id:
final T origObject = findById(id, obj.getOrganizationalUnit());
if (origObject == null) {
throw new RuntimeException("Object with id "
+ id
+ " not found in search base '"
+ StringHelper.listToString(",", obj.getOrganizationalUnit())
+ "'. Can't rename the object: "
+ obj);
}
final String ou = LdapUtils.getOu(origObject.getOrganizationalUnit());
log.info("Rename object with id '" + obj.getId() + "' from '" + oldDnIdentifier + "' to '" + newDnIdentifier);
ctx.rename(oldDnIdentifier + "," + ou, newDnIdentifier + "," + ou);
}
/**
* modifies the dn to the one provided by the attributes.
* No attempt is made to verify the attributes are valid i.e
* in the format dn = ....
*/
public void modifyDN() throws NamingException{
DirContext ctx = new InitialDirContext(env);
ctx.rename(dn, attributes[0]);
ctx.close();
}
/**
* Adds/modifies ctx using entry information.
*
* @param ctx directory context to use for change.
* @param e entry with change description.
* @throws NamingException if operation with directory failed.
*/
static void modify(DirContext ctx, final Entry e) throws NamingException {
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Processing " + e);
}
Attributes atts = e.getAttributes();
final String rootDn = ctx.getNameInNamespace();
if (atts != null) { //If add entry
ctx.createSubcontext(getRelativeDN(rootDn, e.getDn()), e.getAttributes());
} else if (e.isChangeDelete()) {
ctx.destroySubcontext(getRelativeDN(rootDn, e.getDn()));
} else if (e.isChangeModDn() || e.isChangeModRdn()) {
Name newRdn;
if (e.getNewSuperior() != null) { //If new superior
newRdn = getRelativeDN(rootDn, e.getNewSuperior());
} else { //otherwise use DN as a base
newRdn = getRelativeDN(rootDn, e.getDn());
newRdn.remove(newRdn.size() - 1);
}
newRdn.add(e.getNewRdn());
ctx.addToEnvironment("java.naming.ldap.deleteRDN", String.valueOf(e.isDeleteOldRdn()));
ctx.rename(getRelativeDN(rootDn, e.getDn()), newRdn);
ctx.removeFromEnvironment("java.naming.ldap.deleteRDN");//a better solution to use the previous value
} else {
List<ModificationItem> items = e.getModificationItems();
ctx.modifyAttributes(getRelativeDN(rootDn, e.getDn()),
items.toArray(new ModificationItem[items.size()]));
}
}
/**
* 重命名节点
*
* @param oldDN
* @param newDN
* @return
*/
public static boolean renameEntry(String oldDN, String newDN, DirContext dc) {
try {
dc.rename(oldDN, newDN);
return true;
} catch (NamingException ne) {
System.err.println("Error: " + ne.getMessage());
return false;
}
}