From 073380a9f77e33bc51ce4bc49d9948c06aa73110 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 06 Dec 2011 09:45:46 +0000
Subject: [PATCH] OPENDJ-370: Implement an example Sun DSEE -> OpenDJ change log based synchronization daemon.

---
 opendj3/opendj-ldap-sync/src/main/java/org/forgerock/opendj/sync/filters/Transforms.java |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/opendj3/opendj-ldap-sync/src/main/java/org/forgerock/opendj/sync/filters/Transforms.java b/opendj3/opendj-ldap-sync/src/main/java/org/forgerock/opendj/sync/filters/Transforms.java
index ad10087..c33187e 100644
--- a/opendj3/opendj-ldap-sync/src/main/java/org/forgerock/opendj/sync/filters/Transforms.java
+++ b/opendj3/opendj-ldap-sync/src/main/java/org/forgerock/opendj/sync/filters/Transforms.java
@@ -498,6 +498,32 @@
         final ModifyDNRequest change)
     {
       change.setName(change.getName().rename(from, to));
+
+      // Rename the new superior or the new RDN if needed.
+      final DN newSuperior = change.getNewSuperior();
+      if (newSuperior != null && newSuperior.isSubordinateOrEqualTo(from))
+      {
+        // The new superior is in scope so rename.
+        change.setNewSuperior(newSuperior.rename(from, to));
+      }
+      else
+      {
+        // The new superior is not in scope, but perhaps the new DN matches
+        // "from".
+        final DN newDN;
+        if (newSuperior != null)
+        {
+          newDN = newSuperior.child(change.getNewRDN());
+        }
+        else
+        {
+          newDN = change.getName().parent().child(change.getNewRDN());
+        }
+        if (newDN.equals(from))
+        {
+          change.setNewRDN(to.rdn());
+        }
+      }
       return FilterResult.next();
     }
 

--
Gitblit v1.10.0