You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/10/25 19:37:05 UTC

svn commit: r328432 - /directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java

Author: akarasulu
Date: Tue Oct 25 10:37:02 2005
New Revision: 328432

URL: http://svn.apache.org/viewcvs?rev=328432&view=rev
Log:
changes ...

 o made sure the before binding in a OBJECT_CHANGED event is the original 
   attributes before a modify operation
 o packaged the ModificationItem[] into the info field of the NamingEvent when
   the change type is set to OBJECT_CHANGED


Modified:
    directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java

Modified: directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java?rev=328432&r1=328431&r2=328432&view=diff
==============================================================================
--- directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java (original)
+++ directory/apacheds/trunk/core/src/main/java/org/apache/ldap/server/event/EventService.java Tue Oct 25 10:37:02 2005
@@ -18,12 +18,15 @@
 
 
 import org.apache.ldap.server.DirectoryServiceConfiguration;
+import org.apache.ldap.server.invocation.Invocation;
+import org.apache.ldap.server.invocation.InvocationStack;
 import org.apache.ldap.server.interceptor.BaseInterceptor;
 import org.apache.ldap.server.interceptor.NextInterceptor;
 import org.apache.ldap.server.configuration.InterceptorConfiguration;
 import org.apache.ldap.server.schema.AttributeTypeRegistry;
 import org.apache.ldap.server.schema.OidRegistry;
 import org.apache.ldap.server.partition.DirectoryPartitionNexus;
+import org.apache.ldap.server.partition.DirectoryPartitionNexusProxy;
 import org.apache.ldap.common.filter.ExprNode;
 import org.apache.ldap.common.filter.ScopeNode;
 import org.apache.ldap.common.filter.BranchNode;
@@ -32,10 +35,12 @@
 import javax.naming.Name;
 import javax.naming.NamingException;
 import javax.naming.Binding;
+import javax.naming.NamingEnumeration;
 import javax.naming.event.*;
 import javax.naming.directory.Attributes;
 import javax.naming.directory.ModificationItem;
 import javax.naming.directory.SearchControls;
+import javax.naming.directory.Attribute;
 import java.util.*;
 
 
@@ -190,7 +195,7 @@
     }
 
 
-    private void notifyOnModify( Name name ) throws NamingException
+    private void notifyOnModify( Name name, ModificationItem[] mods, Attributes oriEntry ) throws NamingException
     {
         Attributes entry = nexus.lookup( name );
         Set selecting = getSelectingSources( name, entry );
@@ -208,24 +213,39 @@
             if ( listener instanceof ObjectChangeListener )
             {
                 ObjectChangeListener oclistener = ( ObjectChangeListener ) listener;
-                Binding binding = new Binding( name.toString(), entry, false );
+                Binding before = new Binding( name.toString(), oriEntry, false );
+                Binding after = new Binding( name.toString(), entry, false );
                 oclistener.objectChanged( new NamingEvent( rec.getEventContext(),
-                        NamingEvent.OBJECT_CHANGED, binding, binding, entry ) );
+                        NamingEvent.OBJECT_CHANGED, after, before, mods ) );
             }
         }
     }
 
     public void modify( NextInterceptor next, Name name, int modOp, Attributes mods ) throws NamingException
     {
+        Invocation invocation = InvocationStack.getInstance().peek();
+        DirectoryPartitionNexusProxy proxy = invocation.getProxy();
+        Attributes oriEntry = proxy.lookup( name, DirectoryPartitionNexusProxy.LOOKUP_BYPASS );
         super.modify( next, name, modOp, mods );
-        notifyOnModify( name );
+
+        // package modifications in ModItem format for event delivery
+        ModificationItem[] modItems = new ModificationItem[mods.size()];
+        NamingEnumeration list = mods.getAll();
+        for ( int ii = 0; ii < modItems.length; ii++ )
+        {
+            modItems[ii] = new ModificationItem( modOp, ( Attribute ) list.next() );
+        }
+        notifyOnModify( name, modItems, oriEntry );
     }
 
 
     public void modify( NextInterceptor next, Name name, ModificationItem[] mods ) throws NamingException
     {
+        Invocation invocation = InvocationStack.getInstance().peek();
+        DirectoryPartitionNexusProxy proxy = invocation.getProxy();
+        Attributes oriEntry = proxy.lookup( name, DirectoryPartitionNexusProxy.LOOKUP_BYPASS );
         super.modify( next, name, mods );
-        notifyOnModify( name );
+        notifyOnModify( name, mods, oriEntry );
     }