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/04/06 23:00:47 UTC

svn commit: r526277 - in /directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs: DeleteEntriesJob.java MoveEntriesJob.java RenameEntryJob.java

Author: seelmann
Date: Fri Apr  6 14:00:46 2007
New Revision: 526277

URL: http://svn.apache.org/viewvc?view=rev&rev=526277
Log:
Improved model state update when a directory operation failed:
  - don't delete entry from model when delete operation fails
  - update modification logs when modify operation fails

Modified:
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/DeleteEntriesJob.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/MoveEntriesJob.java
    directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/RenameEntryJob.java

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/DeleteEntriesJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/DeleteEntriesJob.java?view=diff&rev=526277&r1=526276&r2=526277
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/DeleteEntriesJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/DeleteEntriesJob.java Fri Apr  6 14:00:46 2007
@@ -30,6 +30,7 @@
 
 import org.apache.directory.ldapstudio.browser.core.BrowserCoreMessages;
 import org.apache.directory.ldapstudio.browser.core.events.ChildrenInitializedEvent;
+import org.apache.directory.ldapstudio.browser.core.events.EntryDeletedEvent;
 import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
 import org.apache.directory.ldapstudio.browser.core.events.SearchUpdateEvent;
 import org.apache.directory.ldapstudio.browser.core.internal.model.Search;
@@ -46,6 +47,8 @@
 
     private IEntry[] entriesToDelete;
 
+    private Set deletedEntriesSet = new HashSet();
+    
     private Set entriesToUpdateSet = new HashSet();
 
     private Set searchesToUpdateSet = new HashSet();
@@ -90,7 +93,7 @@
         monitor.worked( 1 );
 
         int num = 0;
-        for ( int i = 0; !monitor.isCanceled() && i < entriesToDelete.length; i++ )
+        for ( int i = 0; !monitor.isCanceled() && !monitor.errorsReported() && i < entriesToDelete.length; i++ )
         {
 
             IEntry entryToDelete = entriesToDelete[i];
@@ -98,32 +101,38 @@
 
             // delete from directory
             // TODO: use TreeDelete Control, if available
+            int errorStatusSize1 = monitor.getErrorStatus( "" ).getChildren().length; //$NON-NLS-1$
             num = deleteEntryRecursive( entryToDelete, false, num, monitor );
+            int errorStatusSize2 = monitor.getErrorStatus( "" ).getChildren().length; //$NON-NLS-1$
+            deletedEntriesSet.add( entryToDelete );
 
-            // delete from parent
-            entryToDelete.getParententry().deleteChild( entryToDelete );
-            entriesToUpdateSet.add( entryToDelete.getParententry() );
-
-            // delete from searches
-            ISearch[] searches = connection.getSearchManager().getSearches();
-            for ( int j = 0; j < searches.length; j++ )
+            if ( errorStatusSize1 == errorStatusSize2 )
             {
-                ISearch search = searches[j];
-                if ( search.getSearchResults() != null )
+                // delete from parent
+                entryToDelete.getParententry().deleteChild( entryToDelete );
+                entriesToUpdateSet.add( entryToDelete.getParententry() );
+
+                // delete from searches
+                ISearch[] searches = connection.getSearchManager().getSearches();
+                for ( int j = 0; j < searches.length; j++ )
                 {
-                    ISearchResult[] searchResults = search.getSearchResults();
-                    for ( int k = 0; k < searchResults.length; k++ )
+                    ISearch search = searches[j];
+                    if ( search.getSearchResults() != null )
                     {
-                        ISearchResult result = searchResults[k];
-                        if ( entryToDelete.equals( result.getEntry() ) )
+                        ISearchResult[] searchResults = search.getSearchResults();
+                        for ( int k = 0; k < searchResults.length; k++ )
                         {
-                            ISearchResult[] newsrs = new ISearchResult[searchResults.length - 1];
-                            System.arraycopy( searchResults, 0, newsrs, 0, k );
-                            System.arraycopy( searchResults, k + 1, newsrs, k, searchResults.length - k - 1 );
-                            search.setSearchResults( newsrs );
-                            searchResults = newsrs;
-                            k--;
-                            searchesToUpdateSet.add( search );
+                            ISearchResult result = searchResults[k];
+                            if ( entryToDelete.equals( result.getEntry() ) )
+                            {
+                                ISearchResult[] newsrs = new ISearchResult[searchResults.length - 1];
+                                System.arraycopy( searchResults, 0, newsrs, 0, k );
+                                System.arraycopy( searchResults, k + 1, newsrs, k, searchResults.length - k - 1 );
+                                search.setSearchResults( newsrs );
+                                searchResults = newsrs;
+                                k--;
+                                searchesToUpdateSet.add( search );
+                            }
                         }
                     }
                 }
@@ -212,6 +221,11 @@
 
     protected void runNotification()
     {
+        for ( Iterator it = deletedEntriesSet.iterator(); it.hasNext(); )
+        {
+            IEntry entry = ( IEntry ) it.next();
+            EventRegistry.fireEntryUpdated( new EntryDeletedEvent( entry.getConnection(), entry ), this );
+        }
         for ( Iterator it = entriesToUpdateSet.iterator(); it.hasNext(); )
         {
             IEntry parent = ( IEntry ) it.next();

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/MoveEntriesJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/MoveEntriesJob.java?view=diff&rev=526277&r1=526276&r2=526277
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/MoveEntriesJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/MoveEntriesJob.java Fri Apr  6 14:00:46 2007
@@ -91,6 +91,10 @@
         monitor.worked( 1 );
 
         this.newEntries = new IEntry[oldEntries.length];
+        for ( int i = 0; i < oldEntries.length; i++ )
+        {
+            this.newEntries[i] = oldEntries[i];
+        }
 
         for ( int i = 0; i < oldEntries.length; i++ )
         {

Modified: directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/RenameEntryJob.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/RenameEntryJob.java?view=diff&rev=526277&r1=526276&r2=526277
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/RenameEntryJob.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-browser-core/src/main/java/org/apache/directory/ldapstudio/browser/core/jobs/RenameEntryJob.java Fri Apr  6 14:00:46 2007
@@ -59,6 +59,7 @@
     {
         this.connection = entry.getConnection();
         this.oldEntry = entry;
+        this.newEntry = entry;
         this.newRdn = newRdn;
         this.deleteOldRdn = deleteOldRdn;