You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2007/10/14 22:11:40 UTC

svn commit: r584597 - in /directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core: internal/model/ jobs/ model/

Author: seelmann
Date: Sun Oct 14 13:11:40 2007
New Revision: 584597

URL: http://svn.apache.org/viewvc?rev=584597&view=rev
Log:
DIRSTUDIO-123: Moved modrdn code from BrowserConnection to MoveEntriesJob and RenameEntryJob.

Modified:
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/BrowserConnection.java
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/ConnectionModifyHandler.java
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/DummyConnection.java
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/MoveEntriesJob.java
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/RenameEntryJob.java
    directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IBrowserConnection.java

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/BrowserConnection.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/BrowserConnection.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/BrowserConnection.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/BrowserConnection.java Sun Oct 14 13:11:40 2007
@@ -547,18 +547,6 @@
     }
 
 
-    public void rename( IEntry entryToRename, DN newDn, boolean deleteOldRdn, StudioProgressMonitor monitor )
-    {
-        modifyHandler.rename( entryToRename, newDn, deleteOldRdn, monitor );
-    }
-
-
-    public void move( IEntry entryToMove, DN newSuperior, StudioProgressMonitor monitor )
-    {
-        modifyHandler.move( entryToMove, newSuperior, monitor );
-    }
-
-
     public LdifEnumeration exportLdif( SearchParameter searchParameter, StudioProgressMonitor monitor )
         throws ConnectionException
     {
@@ -786,6 +774,20 @@
     protected void uncacheEntry( IEntry entry )
     {
         this.dnToEntryCache.remove( entry.getDn().toOidString( this.schema ) );
+    }
+    
+
+    public void uncacheEntryRecursive( IEntry entry )
+    {
+        IEntry[] children = entry.getChildren();
+        if ( entry.getChildren() != null )
+        {
+            for ( int i = 0; i < children.length; i++ )
+            {
+                uncacheEntryRecursive( children[i] );
+            }
+        }
+        uncacheEntry( entry );
     }
 
 

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/ConnectionModifyHandler.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/ConnectionModifyHandler.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/ConnectionModifyHandler.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/ConnectionModifyHandler.java Sun Oct 14 13:11:40 2007
@@ -210,70 +210,6 @@
     }
 
 
-    void rename( IEntry entryToRename, DN newDn, boolean deleteOldRdn, StudioProgressMonitor monitor )
-    {
-        try
-        {
-            LdifChangeModDnRecord cmdr = new LdifChangeModDnRecord( LdifDnLine
-                .create( entryToRename.getDn().toString() ) );
-            ModelConverter.addControls( cmdr, entryToRename );
-            cmdr.setChangeType( LdifChangeTypeLine.createModDn() );
-
-            cmdr.setNewrdn( LdifNewrdnLine.create( newDn.getRdn().toString() ) );
-            cmdr.setDeloldrdn( deleteOldRdn ? LdifDeloldrdnLine.create1() : LdifDeloldrdnLine.create0() );
-            cmdr.finish( LdifSepLine.create() );
-
-            this.applyModificationAndLog( cmdr, monitor );
-
-            uncacheChildren( entryToRename );
-
-        }
-        catch ( ConnectionException e )
-        {
-            monitor.reportError( e );
-        }
-    }
-
-
-    void move( IEntry entryToMove, DN newSuperior, StudioProgressMonitor monitor )
-    {
-        try
-        {
-            LdifChangeModDnRecord cmdr = new LdifChangeModDnRecord( LdifDnLine.create( entryToMove.getDn().toString() ) );
-            ModelConverter.addControls( cmdr, entryToMove );
-            cmdr.setChangeType( LdifChangeTypeLine.createModDn() );
-
-            cmdr.setNewrdn( LdifNewrdnLine.create( entryToMove.getRdn().toString() ) );
-            cmdr.setDeloldrdn( LdifDeloldrdnLine.create0() );
-            cmdr.setNewsuperior( LdifNewsuperiorLine.create( newSuperior.toString() ) );
-            cmdr.finish( LdifSepLine.create() );
-
-            this.applyModificationAndLog( cmdr, monitor );
-
-            uncacheChildren( entryToMove );
-
-        }
-        catch ( ConnectionException e )
-        {
-            monitor.reportError( e );
-        }
-    }
-
-
-    private void uncacheChildren( IEntry entry )
-    {
-        IEntry[] children = entry.getChildren();
-        if ( entry.getChildren() != null )
-        {
-            for ( int i = 0; i < children.length; i++ )
-            {
-                uncacheChildren( children[i] );
-            }
-        }
-        browserConnection.uncacheEntry( entry );
-    }
-
-
     void delete( IEntry entry, StudioProgressMonitor monitor )
     {
         try

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/DummyConnection.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/DummyConnection.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/DummyConnection.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/internal/model/DummyConnection.java Sun Oct 14 13:11:40 2007
@@ -172,16 +172,6 @@
     }
 
 
-    public void move( IEntry entryToMove, DN newSuperior, StudioProgressMonitor monitor )
-    {
-    }
-
-
-    public void rename( IEntry entryToRename, DN newDn, boolean deleteOldRdn, StudioProgressMonitor monitor )
-    {
-    }
-
-
     public void search( ISearch searchRequest, StudioProgressMonitor monitor )
     {
     }
@@ -259,4 +249,7 @@
         return null;
     }
 
+    public void uncacheEntryRecursive( IEntry entry )
+    {
+    }
 }

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/MoveEntriesJob.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/MoveEntriesJob.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/MoveEntriesJob.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/MoveEntriesJob.java Sun Oct 14 13:11:40 2007
@@ -24,10 +24,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import javax.naming.ldap.Control;
+import javax.naming.ldap.ManageReferralControl;
+
 import org.apache.directory.studio.connection.core.Connection;
 import org.apache.directory.studio.connection.core.StudioProgressMonitor;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
@@ -41,23 +43,39 @@
 import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult;
 
 
+/**
+ * Job to move entries.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
 public class MoveEntriesJob extends AbstractNotificationJob
 {
 
-    private IBrowserConnection connection;
+    /** The browser connection. */
+    private IBrowserConnection browserConnection;
 
+    /** The entries to move. */
     private IEntry[] oldEntries;
 
+    /** The new parent. */
     private IEntry newParent;
 
+    /** The moved entries. */
     private IEntry[] newEntries;
 
-    private Set searchesToUpdateSet = new HashSet();
+    private Set<ISearch> updatedSearches = new HashSet<ISearch>();
 
 
+    /**
+     * Creates a new instance of MoveEntriesJob.
+     * 
+     * @param entries the entries to move
+     * @param newParent the new parent
+     */
     public MoveEntriesJob( IEntry[] entries, IEntry newParent )
     {
-        this.connection = newParent.getBrowserConnection();
+        this.browserConnection = newParent.getBrowserConnection();
         this.oldEntries = entries;
         this.newParent = newParent;
 
@@ -66,25 +84,33 @@
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getConnections()
+     */
     protected Connection[] getConnections()
     {
         return new Connection[]
-            { connection.getConnection() };
+            { browserConnection.getConnection() };
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getLockedObjects()
+     */
     protected Object[] getLockedObjects()
     {
-        List l = new ArrayList();
+        List<IEntry> l = new ArrayList<IEntry>();
         l.add( newParent );
         l.addAll( Arrays.asList( oldEntries ) );
         return l.toArray();
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractNotificationJob#executeNotificationJob(org.apache.directory.studio.connection.core.StudioProgressMonitor)
+     */
     protected void executeNotificationJob( StudioProgressMonitor monitor )
     {
-
         monitor.beginTask( BrowserCoreMessages.bind(
             oldEntries.length == 1 ? BrowserCoreMessages.jobs__move_entry_task_1
                 : BrowserCoreMessages.jobs__move_entry_task_n, new String[]
@@ -92,15 +118,14 @@
         monitor.reportProgress( " " ); //$NON-NLS-1$
         monitor.worked( 1 );
 
-        this.newEntries = new IEntry[oldEntries.length];
+        newEntries = new IEntry[oldEntries.length];
         for ( int i = 0; i < oldEntries.length; i++ )
         {
-            this.newEntries[i] = oldEntries[i];
+            newEntries[i] = oldEntries[i];
         }
 
         for ( int i = 0; i < oldEntries.length; i++ )
         {
-
             IEntry oldEntry = oldEntries[i];
             IEntry oldParent = oldEntry.getParententry();
             DN newDn = new DN( oldEntry.getRdn(), newParent.getDn() );
@@ -109,15 +134,16 @@
             // TODO: use manual/simulated move, if move of subtree is not
             // supported
             int errorStatusSize1 = monitor.getErrorStatus( "" ).getChildren().length; //$NON-NLS-1$
-            connection.move( oldEntry, newParent.getDn(), monitor );
+            moveEntry( browserConnection, oldEntry, newDn.toString(), monitor );
+            //connection.move( oldEntry, newParent.getDn(), monitor );
             int errorStatusSize2 = monitor.getErrorStatus( "" ).getChildren().length; //$NON-NLS-1$
 
             if ( errorStatusSize1 == errorStatusSize2 )
             {
                 // move in parent
                 oldParent.deleteChild( oldEntry );
-                IEntry newEntry = connection.getEntry( newDn, monitor );
-                this.newEntries[i] = newEntry;
+                IEntry newEntry = browserConnection.getEntry( newDn, monitor );
+                newEntries[i] = newEntry;
                 newParent.addChild( newEntry );
                 newParent.setHasMoreChildren( false );
 
@@ -128,7 +154,7 @@
                 }
 
                 // move in searches
-                ISearch[] searches = connection.getSearchManager().getSearches();
+                ISearch[] searches = browserConnection.getSearchManager().getSearches();
                 for ( int j = 0; j < searches.length; j++ )
                 {
                     ISearch search = searches[j];
@@ -146,7 +172,7 @@
                                 search.setSearchResults( newsrs );
                                 searchResults = newsrs;
                                 k--;
-                                searchesToUpdateSet.add( search );
+                                updatedSearches.add( search );
                             }
                         }
                     }
@@ -156,6 +182,9 @@
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractNotificationJob#runNotification()
+     */
     protected void runNotification()
     {
         for ( int i = 0; i < newEntries.length; i++ )
@@ -165,18 +194,47 @@
                 EventRegistry.fireEntryUpdated( new EntryMovedEvent( oldEntries[i], newEntries[i] ), this );
             }
         }
-        for ( Iterator it = searchesToUpdateSet.iterator(); it.hasNext(); )
+        for ( ISearch search : updatedSearches )
         {
-            ISearch search = ( ISearch ) it.next();
-            EventRegistry.fireSearchUpdated( new SearchUpdateEvent( search, SearchUpdateEvent.EventDetail.SEARCH_PERFORMED ), this );
+            EventRegistry.fireSearchUpdated( new SearchUpdateEvent( search,
+                SearchUpdateEvent.EventDetail.SEARCH_PERFORMED ), this );
         }
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getErrorMessage()
+     */
     protected String getErrorMessage()
     {
         return oldEntries.length == 1 ? BrowserCoreMessages.jobs__move_entry_error_1
             : BrowserCoreMessages.jobs__move_entry_error_n;
+    }
+
+
+    /**
+     * Moves an entry.
+     * 
+     * @param browserConnection the browser connection
+     * @param oldEntry the old entry
+     * @param newDn the new dn
+     * @param monitor the progress monitor
+     */
+    private void moveEntry( IBrowserConnection browserConnection, IEntry oldEntry, String newDn,
+        StudioProgressMonitor monitor )
+    {
+        // dn
+        String oldDn = oldEntry.getDn().toString();
+
+        // controls
+        Control[] controls = null;
+        if ( oldEntry.isReferral() )
+        {
+            controls = new Control[]
+                { new ManageReferralControl() };
+        }
+
+        browserConnection.getConnection().getJNDIConnectionWrapper().rename( oldDn, newDn, false, controls, monitor );
     }
 
 }

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/RenameEntryJob.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/RenameEntryJob.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/RenameEntryJob.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/RenameEntryJob.java Sun Oct 14 13:11:40 2007
@@ -23,10 +23,12 @@
 
 import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import javax.naming.ldap.Control;
+import javax.naming.ldap.ManageReferralControl;
+
 import org.apache.directory.studio.connection.core.Connection;
 import org.apache.directory.studio.connection.core.StudioProgressMonitor;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCoreMessages;
@@ -41,22 +43,41 @@
 import org.apache.directory.studio.ldapbrowser.core.model.RDN;
 
 
+/**
+ * Job to rename an entry.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
 public class RenameEntryJob extends AbstractNotificationJob
 {
 
+    /** The browser connection. */
     private IBrowserConnection browserConnection;
 
+    /** The old entry. */
     private IEntry oldEntry;
 
+    /** The new rdn. */
     private RDN newRdn;
 
+    /** The delete old rdn flag. */
     private boolean deleteOldRdn;
 
+    /** The new entry. */
     private IEntry newEntry;
 
-    private Set searchesToUpdateSet = new HashSet();
+    /** The updated searches. */
+    private Set<ISearch> updatedSearchesSet = new HashSet<ISearch>();
 
 
+    /**
+     * Creates a new instance of RenameEntryJob.
+     * 
+     * @param entry the entry to rename
+     * @param newRdn the new rdn
+     * @param deleteOldRdn the delete old rdn flag
+     */
     public RenameEntryJob( IEntry entry, RDN newRdn, boolean deleteOldRdn )
     {
         this.browserConnection = entry.getBrowserConnection();
@@ -69,6 +90,9 @@
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getConnections()
+     */
     protected Connection[] getConnections()
     {
         return new Connection[]
@@ -76,19 +100,24 @@
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getLockedObjects()
+     */
     protected Object[] getLockedObjects()
     {
-        List l = new ArrayList();
+        List<Object> l = new ArrayList<Object>();
         l.add( oldEntry.getParententry() );
         return l.toArray();
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractNotificationJob#executeNotificationJob(org.apache.directory.studio.connection.core.StudioProgressMonitor)
+     */
     protected void executeNotificationJob( StudioProgressMonitor monitor )
     {
-
         monitor.beginTask( BrowserCoreMessages.bind( BrowserCoreMessages.jobs__rename_entry_task, new String[]
-            { this.oldEntry.getDn().toString() } ), 3 );
+            { oldEntry.getDn().toString() } ), 3 );
         monitor.reportProgress( " " ); //$NON-NLS-1$
         monitor.worked( 1 );
 
@@ -98,13 +127,16 @@
         // rename in directory
         // TODO: use manual/simulated rename, if rename of subtree is not
         // supported
-        browserConnection.rename( oldEntry, newDn, deleteOldRdn, monitor );
+        renameEntry( browserConnection, oldEntry, newDn.toString(), deleteOldRdn, monitor );
 
         if ( !monitor.errorsReported() )
         {
+            // uncache old entry
+            browserConnection.uncacheEntryRecursive( oldEntry );
+
             // rename in parent
             parent.deleteChild( oldEntry );
-            this.newEntry = browserConnection.getEntry( newDn, monitor );
+            newEntry = browserConnection.getEntry( newDn, monitor );
             parent.addChild( newEntry );
             parent.setHasMoreChildren( false );
 
@@ -133,7 +165,7 @@
                             search.setSearchResults( newsrs );
                             searchResults = newsrs;
                             k--;
-                            searchesToUpdateSet.add( search );
+                            updatedSearchesSet.add( search );
                         }
                     }
                 }
@@ -142,23 +174,57 @@
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractNotificationJob#runNotification()
+     */
     protected void runNotification()
     {
         if ( oldEntry != null && newEntry != null )
         {
             EventRegistry.fireEntryUpdated( new EntryRenamedEvent( oldEntry, newEntry ), this );
         }
-        for ( Iterator it = searchesToUpdateSet.iterator(); it.hasNext(); )
+        for ( ISearch search : updatedSearchesSet )
         {
-            ISearch search = ( ISearch ) it.next();
-            EventRegistry.fireSearchUpdated( new SearchUpdateEvent( search, SearchUpdateEvent.EventDetail.SEARCH_PERFORMED ), this );
+            EventRegistry.fireSearchUpdated( new SearchUpdateEvent( search,
+                SearchUpdateEvent.EventDetail.SEARCH_PERFORMED ), this );
         }
     }
 
 
+    /**
+     * @see org.apache.directory.studio.ldapbrowser.core.jobs.AbstractEclipseJob#getErrorMessage()
+     */
     protected String getErrorMessage()
     {
         return BrowserCoreMessages.jobs__rename_entry_error;
+    }
+
+
+    /**
+     * Renames the entry.
+     * 
+     * @param browserConnection the browser connection
+     * @param oldEntry the old entry
+     * @param newDn the new dn
+     * @param deleteOldRdn the delete old rdn flag
+     * @param monitor the progress monitor
+     */
+    static void renameEntry( IBrowserConnection browserConnection, IEntry oldEntry, String newDn, boolean deleteOldRdn,
+        StudioProgressMonitor monitor )
+    {
+        // dn
+        String oldDn = oldEntry.getDn().toString();
+
+        // controls
+        Control[] controls = null;
+        if ( oldEntry.isReferral() )
+        {
+            controls = new Control[]
+                { new ManageReferralControl() };
+        }
+
+        browserConnection.getConnection().getJNDIConnectionWrapper().rename( oldDn, newDn, deleteOldRdn, controls,
+            monitor );
     }
 
 }

Modified: directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IBrowserConnection.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IBrowserConnection.java?rev=584597&r1=584596&r2=584597&view=diff
==============================================================================
--- directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IBrowserConnection.java (original)
+++ directory/studio/trunk/studio-ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/model/IBrowserConnection.java Sun Oct 14 13:11:40 2007
@@ -166,12 +166,6 @@
     public abstract void modify( IValue oldValue, IValue newVaue, StudioProgressMonitor monitor );
 
 
-    public abstract void rename( IEntry entryToRename, DN newDn, boolean deleteOldRdn, StudioProgressMonitor monitor );
-
-
-    public abstract void move( IEntry entryToMove, DN newSuperior, StudioProgressMonitor monitor );
-
-
     public abstract void importLdif( LdifEnumeration enumeration, Writer logWriter, boolean continueOnError,
         StudioProgressMonitor monitor );
 
@@ -184,6 +178,7 @@
     
     public abstract int hashCode();
 
-
     public abstract boolean equals( Object obj );
+    
+    public abstract void uncacheEntryRecursive( IEntry entry );
 }