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 2009/10/05 14:24:50 UTC

svn commit: r821766 - in /directory/studio/trunk: ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java

Author: seelmann
Date: Mon Oct  5 12:24:50 2009
New Revision: 821766

URL: http://svn.apache.org/viewvc?rev=821766&view=rev
Log:
DIRSTUDIO-515:
- Reduced number of fired events
- Fixed refresh action

Modified:
    directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java

Modified: directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java?rev=821766&r1=821765&r2=821766&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java (original)
+++ directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java Mon Oct  5 12:24:50 2009
@@ -65,7 +65,6 @@
      */
     public void runNotification()
     {
-        super.runNotification();
         EventRegistry.fireEntryUpdated( new EntryModificationEvent( entry.getBrowserConnection(), entry ), this );
     }
 }

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java?rev=821766&r1=821765&r2=821766&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java Mon Oct  5 12:24:50 2009
@@ -516,6 +516,22 @@
     }
 
 
+    private IWorkbenchPartReference getActivePartRef( List<IEntryEditor> editors )
+    {
+        for ( IEntryEditor editor : editors )
+        {
+            IWorkbenchPart part = ( IWorkbenchPart ) editor;
+            IEditorPart activeEditor = part.getSite().getPage().getActiveEditor();
+            if ( part == activeEditor )
+            {
+                IWorkbenchPartReference reference = part.getSite().getPage().getReference( part );
+                return reference;
+            }
+        }
+        return null;
+    }
+
+
     IEntry getSharedWorkingCopy( IEntry originalEntry, IEntryEditor editor )
     {
         EntryEditorUtils.ensureAttributesInitialized( originalEntry );
@@ -580,10 +596,16 @@
                 LdifFile diff = Utils.computeDiff( referenceCopy, workingCopy );
                 if ( diff != null )
                 {
+                    // remove entry from map, reduces number of fired events
+                    oscSharedReferenceCopies.remove( originalEntry );
+                    oscSharedWorkingCopies.remove( originalEntry );
                     // save by executing the LDIF
                     UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
                         .toFormattedString( LdifFormatParameters.DEFAULT ) );
                     IStatus status = RunnableContextRunner.execute( runnable, null, handleError );
+                    // put entry back to map
+                    oscSharedReferenceCopies.put( originalEntry, referenceCopy );
+                    oscSharedWorkingCopies.put( originalEntry, workingCopy );
                     if ( status.isOK() )
                     {
                         updateOscSharedReferenceCopy( originalEntry );
@@ -840,17 +862,27 @@
                         }
                         else
                         {
-                            List<IEntryEditor> oscEditors = getOscEditors( oscSharedWorkingCopy );
-                            for ( IEntryEditor entryEditor : oscEditors )
+                            // changes on working copy, ask before update
+                            IWorkbenchPartReference reference = getActivePartRef( getOscEditors( oscSharedWorkingCopy ) );
+                            if ( reference != null )
+                            {
+                                askUpdateSharedWorkingCopy( reference, originalEntry, oscSharedWorkingCopy, event
+                                    .getSource() );
+                            }
+                        }
+                    }
+                    else
+                    {
+                        // no diff betweeen original entry and reference copy, check if editor is dirty
+                        LdifFile workDiff = Utils.computeDiff( oscSharedReferenceCopy, oscSharedWorkingCopy );
+                        if ( workDiff != null )
+                        {
+                            // changes on working copy, ask before update
+                            IWorkbenchPartReference reference = getActivePartRef( getOscEditors( oscSharedWorkingCopy ) );
+                            if ( reference != null )
                             {
-                                IWorkbenchPart part = ( IWorkbenchPart ) entryEditor;
-                                IEditorPart activeEditor = part.getSite().getPage().getActiveEditor();
-                                if ( part == activeEditor )
-                                {
-                                    IWorkbenchPartReference reference = part.getSite().getPage().getReference( part );
-                                    askUpdateSharedWorkingCopy( reference, originalEntry, oscSharedWorkingCopy, event
-                                        .getSource() );
-                                }
+                                askUpdateSharedWorkingCopy( reference, originalEntry, oscSharedWorkingCopy, event
+                                    .getSource() );
                             }
                         }
                     }
@@ -913,9 +945,15 @@
                 LdifFile diff = Utils.computeDiff( autoSaveSharedReferenceCopy, autoSaveSharedWorkingCopy );
                 if ( diff != null )
                 {
+                    // remove entry from map, reduces number of fired events
+                    autoSaveSharedReferenceCopies.remove( originalEntry );
+                    autoSaveSharedWorkingCopies.remove( originalEntry );
                     UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
                         .toFormattedString( LdifFormatParameters.DEFAULT ) );
                     RunnableContextRunner.execute( runnable, null, true );
+                    // put entry back to map
+                    autoSaveSharedReferenceCopies.put( originalEntry, autoSaveSharedReferenceCopy );
+                    autoSaveSharedWorkingCopies.put( originalEntry, autoSaveSharedWorkingCopy );
                     // don't care if status is ok or not: always update
                     updateAutoSaveSharedReferenceCopy( originalEntry );
                     updateAutoSaveSharedWorkingCopy( originalEntry );