The move operation has a limited impact if we move the AP, except if we move an IAP. For subentries and entreeies, it's slightly more complex

+--+
|AP|
+--+
If the AP is an IAP, we have to check that the new position is valid. If so, we can move it. Then, as the the new parent AP may have changed, we have to modify the IAP seqNumber so that the underlying entries can be updated later. This has to be done for all the IAP descendants too.

>>>-------------------------------------------
if AP is an IAP
  then
    check that the new position is valid
    if the parentAP is not the same
      then
        get a new seqNumber
        update the IAP with the new seqNumber

        for each IAP in the IAP descendant do
          update the IAP with the new seqNumber
        done

continue down the chain
-------------------------------------------<<<


+--------+
|Subentry|
+--------+
Moving a subentry implies we update the old parentAP and the new one. Of course, we have to check first that the changed AP are not inconsistent after the change.

>>>-------------------------------------------
get a new seqNumber

update the old parentAP with the seqNumber (and all the IAP descendants)
update the new parentAP with the seqNumber (and all the IAP descendants)

continue down the chain

-------------------------------------------<<<


+-----+
|Entry|
+-----+
If we move en entry within the same area, we don't have anything to do except if the entry is not up to date, and then we proceed as we do for a search operation. Otherwise, we update the entry like if it was a add.
This has to be done for each possible roles.

>>>-------------------------------------------
for each role
  get the old parentAP
  get the new parentAP

  if the entry is not up to date
    then update the entry
done

continue down the chain
-------------------------------------------<<<


--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com

Reply via email to