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 12:51:47 UTC

svn commit: r821751 - in /directory/studio/trunk: ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/ ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/ ldapbrowser-...

Author: seelmann
Date: Mon Oct  5 10:51:47 2009
New Revision: 821751

URL: http://svn.apache.org/viewvc?rev=821751&view=rev
Log:
DIRSTUDIO-515: Fixed Multi-Valued editor

Added:
    directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java
Modified:
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/MultivaluedDialog.java
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/OpenBestEditorAction.java
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages.properties
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_de.properties
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_fr.properties
    directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/valueeditors/ValueEditorManager.java
    directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/events/EntryModificationEvent.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/entryeditors/EntryEditorManager.java
    directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/editors/searchresult/SearchResultEditor.java

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/MultivaluedDialog.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/MultivaluedDialog.java?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/MultivaluedDialog.java (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/dialogs/MultivaluedDialog.java Mon Oct  5 10:51:47 2009
@@ -23,6 +23,7 @@
 
 import java.util.Iterator;
 
+import org.apache.directory.studio.connection.ui.RunnableContextRunner;
 import org.apache.directory.studio.ldapbrowser.common.BrowserCommonActivator;
 import org.apache.directory.studio.ldapbrowser.common.BrowserCommonConstants;
 import org.apache.directory.studio.ldapbrowser.common.widgets.entryeditor.EntryEditorWidget;
@@ -34,17 +35,21 @@
 import org.apache.directory.studio.ldapbrowser.core.events.EmptyValueAddedEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.EmptyValueDeletedEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.EntryModificationEvent;
-import org.apache.directory.studio.ldapbrowser.core.events.EventRegistry;
 import org.apache.directory.studio.ldapbrowser.core.events.ValueAddedEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.ValueDeletedEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.ValueModifiedEvent;
+import org.apache.directory.studio.ldapbrowser.core.jobs.UpdateEntryRunnable;
 import org.apache.directory.studio.ldapbrowser.core.model.AttributeHierarchy;
 import org.apache.directory.studio.ldapbrowser.core.model.IAttribute;
 import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
 import org.apache.directory.studio.ldapbrowser.core.model.IValue;
-import org.apache.directory.studio.ldapbrowser.core.model.impl.Attribute;
+import org.apache.directory.studio.ldapbrowser.core.utils.CompoundModification;
+import org.apache.directory.studio.ldapbrowser.core.utils.Utils;
+import org.apache.directory.studio.ldifparser.LdifFormatParameters;
+import org.apache.directory.studio.ldifparser.model.LdifFile;
+import org.apache.directory.studio.valueeditors.ValueEditorManager;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.SWT;
@@ -66,13 +71,13 @@
 {
 
     /** The dialog title. */
-    private static final String DIALOG_TITLE = Messages.getString("MultivaluedDialog.MultivaluedEditor"); //$NON-NLS-1$
+    private static final String DIALOG_TITLE = Messages.getString( "MultivaluedDialog.MultivaluedEditor" ); //$NON-NLS-1$
 
-    /** The attribute hierarchie to edit. */
-    private AttributeHierarchy attributeHierarchie;
+    /** The attribute hierarchy to edit. */
+    private AttributeHierarchy attributeHierarchy;
 
     /** The entry editor widget configuration. */
-    private EntryEditorWidgetConfiguration configuration;
+    private MultiValuedEntryEditorConfiguration configuration;
 
     /** The entry edtior widget action group. */
     private EntryEditorWidgetActionGroup actionGroup;
@@ -91,13 +96,18 @@
      * Creates a new instance of MultivaluedDialog.
      * 
      * @param parentShell the parent shell
-     * @param attributeHierarchie the attribute hierarchie
+     * @param attributeHierarchy the attribute hierarchy
      */
-    public MultivaluedDialog( Shell parentShell, AttributeHierarchy attributeHierarchie )
+    public MultivaluedDialog( Shell parentShell, AttributeHierarchy attributeHierarchy )
     {
         super( parentShell );
         setShellStyle( getShellStyle() | SWT.RESIZE );
-        this.attributeHierarchie = attributeHierarchie;
+
+        // clone the entry and attribute hierarchy
+        IEntry entry = attributeHierarchy.getEntry();
+        String attributeDescription = attributeHierarchy.getAttributeDescription();
+        IEntry clone = new CompoundModification().cloneEntry( entry );
+        this.attributeHierarchy = clone.getAttributeWithSubtypes( attributeDescription );
     }
 
 
@@ -112,29 +122,26 @@
     }
 
 
-    /**
-     * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
-     */
-    protected void createButtonsForButtonBar( Composite parent )
+    @Override
+    protected void okPressed()
     {
-        createButton( parent, IDialogConstants.CLOSE_ID, IDialogConstants.CLOSE_LABEL, false );
-        getShell().update();
-        getShell().layout( true, true );
-    }
-
-
-    /**
-     * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
-     */
-    protected void buttonPressed( int buttonId )
-    {
-        if ( IDialogConstants.CLOSE_ID == buttonId )
+        IEntry modifiedEntry = attributeHierarchy.getEntry();
+        IEntry originalEntry = modifiedEntry.getBrowserConnection().getEntryFromCache( modifiedEntry.getDn() );
+        LdifFile diff = Utils.computeDiff( originalEntry, modifiedEntry );
+        if ( diff != null )
         {
-            close();
+            // save
+            UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
+                .toFormattedString( LdifFormatParameters.DEFAULT ) );
+            IStatus status = RunnableContextRunner.execute( runnable, null, true );
+            if ( status.isOK() )
+            {
+                super.okPressed();
+            }
         }
         else
         {
-            super.buttonPressed( buttonId );
+            super.okPressed();
         }
     }
 
@@ -144,9 +151,9 @@
      */
     public int open()
     {
-        if ( attributeHierarchie.getAttribute().getValueSize() == 0 )
+        if ( attributeHierarchy.getAttribute().getValueSize() == 0 )
         {
-            attributeHierarchie.getAttribute().addEmptyValue();
+            attributeHierarchy.getAttribute().addEmptyValue();
         }
 
         return super.open();
@@ -164,7 +171,7 @@
             dispose();
 
             // cleanup attribute hierarchy after editing
-            for ( Iterator<IAttribute> it = attributeHierarchie.iterator(); it.hasNext(); )
+            for ( Iterator<IAttribute> it = attributeHierarchy.iterator(); it.hasNext(); )
             {
                 IAttribute attribute = it.next();
                 if ( attribute != null )
@@ -227,7 +234,7 @@
         Composite composite = ( Composite ) super.createDialogArea( parent );
 
         // create configuration
-        configuration = new EntryEditorWidgetConfiguration();
+        configuration = new MultiValuedEntryEditorConfiguration();
 
         // create main widget
         mainWidget = new EntryEditorWidget( configuration );
@@ -247,10 +254,10 @@
         // create the listener
         universalListener = new MultiValuedEntryEditorUniversalListener( mainWidget.getViewer(), configuration,
             actionGroup, actionGroup.getOpenDefaultEditorAction() );
-        universalListener.setInput( attributeHierarchie );
+        universalListener.setInput( attributeHierarchy );
 
         // start edit mode if an empty value exists
-        for ( Iterator<IAttribute> it = attributeHierarchie.iterator(); it.hasNext(); )
+        for ( Iterator<IAttribute> it = attributeHierarchy.iterator(); it.hasNext(); )
         {
             IAttribute attribute = it.next();
             IValue[] values = attribute.getValues();
@@ -310,21 +317,6 @@
                 viewer.cancelEditing();
             }
 
-            // set new input because attributes are newly created after a
-            // modification
-            IEntry entry = attributeHierarchie.getEntry();
-            String attributeDescription = attributeHierarchie.getAttributeDescription();
-            attributeHierarchie = entry.getAttributeWithSubtypes( attributeDescription );
-            if ( attributeHierarchie == null )
-            {
-                EventRegistry.suspendEventFiringInCurrentThread();
-                IAttribute attribute = new Attribute( entry, attributeDescription );
-                entry.addAttribute( attribute );
-                attribute.addEmptyValue();
-                EventRegistry.resumeEventFiringInCurrentThread();
-                attributeHierarchie = entry.getAttributeWithSubtypes( attributeDescription );
-            }
-            viewer.setInput( attributeHierarchie );
             viewer.refresh();
 
             // select added/modified value
@@ -369,4 +361,20 @@
         }
     }
 
+    /**
+     * A special configuration for the {@link MultivaluedDialog}.
+     */
+    class MultiValuedEntryEditorConfiguration extends EntryEditorWidgetConfiguration
+    {
+        @Override
+        public ValueEditorManager getValueEditorManager( TreeViewer viewer )
+        {
+            if ( valueEditorManager == null )
+            {
+                valueEditorManager = new ValueEditorManager( viewer.getTree(), false, false );
+            }
+
+            return valueEditorManager;
+        }
+    }
 }

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/OpenBestEditorAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/OpenBestEditorAction.java?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/OpenBestEditorAction.java (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/OpenBestEditorAction.java Mon Oct  5 10:51:47 2009
@@ -172,10 +172,17 @@
             // validate non-modifiable attributes
             if ( !SchemaUtils.isModifiable( value.getAttribute().getAttributeTypeDescription() ) )
             {
-                message
-                    .append( NLS
-                        .bind(
-                            Messages.getString( "OpenBestEditorAction.ValueNotModifiable" ), value.getAttribute().getDescription() ) ); //$NON-NLS-1$
+                message.append( NLS.bind( Messages.getString( "OpenBestEditorAction.ValueNotModifiable" ), //$NON-NLS-1$ 
+                    value.getAttribute().getDescription() ) );
+                message.append( BrowserCoreConstants.LINE_SEPARATOR );
+                message.append( BrowserCoreConstants.LINE_SEPARATOR );
+            }
+
+            // validate modification of RDN
+            if ( value.isRdnPart() && cellEditor != valueEditorManager.getRenameValueEditor() )
+            {
+                message.append( NLS.bind( Messages.getString( "OpenBestEditorAction.ValueIsRdnPart" ), //$NON-NLS-1$ 
+                    value.getAttribute().getDescription() ) );
                 message.append( BrowserCoreConstants.LINE_SEPARATOR );
                 message.append( BrowserCoreConstants.LINE_SEPARATOR );
             }

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages.properties?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages.properties (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages.properties Mon Oct  5 10:51:47 2009
@@ -35,6 +35,7 @@
 EntryEditorWidgetSorterDialog.Value=Value
 EntryEditorWidgetTableMetadata.AttributeDescription=Attribute Description
 EntryEditorWidgetTableMetadata.Value=Value
+OpenBestEditorAction.ValueIsRdnPart=Warning\! This value is part of the RDN. In order to modify this value please rename the entry.
 OpenBestEditorAction.ValueNotModifiable=Warning\! According to the schema attribute {0} is not modifiable\!
 OpenBestEditorAction.ValueSingleValued=Warning\! According to the schema attribute {0} is single-valued\!
 OpenBestEditorAction.AttributeNotInSubSchema=Warning\! According to the schema attribute {0} is not allowed\!

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_de.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_de.properties?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_de.properties (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_de.properties Mon Oct  5 10:51:47 2009
@@ -31,10 +31,11 @@
 EntryEditorWidgetSorterDialog.OperationalAttributesLast=Operationale Attribute zuletzt
 EntryEditorWidgetSorterDialog.SortAttributes=Attribute sortieren
 EntryEditorWidgetSorterDialog.SortBy=Sortieren nach
-EntryEditorWidgetSorterDialog.SortTableHint=Bitte zum sortieren auf die Tabellen\u00FCberschriften klicken.
+EntryEditorWidgetSorterDialog.SortTableHint=Bitte zum Sortieren auf die Tabellen\u00FCberschriften klicken.
 EntryEditorWidgetSorterDialog.Value=Wert
 EntryEditorWidgetTableMetadata.AttributeDescription=Attributbeschreibung
 EntryEditorWidgetTableMetadata.Value=Wert
+OpenBestEditorAction.ValueIsRdnPart=Warnung\! Dieser Wert ist Teil des RDN\! Zum \u00c4ndern des Wertes bitte den Eintrag umbenennen. 
 OpenBestEditorAction.ValueNotModifiable=Warnung\! Gem\u00E4\u00DF Schema ist das Attribut {0} nicht \u00E4nderbar\!
 OpenBestEditorAction.ValueSingleValued=Warnung\! Gem\u00E4\u00DF Schema ist das Attribut {0} einwertig\!
 OpenBestEditorAction.AttributeNotInSubSchema=Warnung\! Gem\u00E4\u00DF Schema ist das Attribut {0} nicht erlaubt\!

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_fr.properties
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_fr.properties?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_fr.properties (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/entryeditor/messages_fr.properties Mon Oct  5 10:51:47 2009
@@ -35,6 +35,7 @@
 EntryEditorWidgetSorterDialog.Value=Valeur
 EntryEditorWidgetTableMetadata.AttributeDescription=Description d'attribut
 EntryEditorWidgetTableMetadata.Value=Valeur
+OpenBestEditorAction.ValueIsRdnPart=TODO:Warning\! This value is part of the RDN. In order to modify this value please rename the entry.
 OpenBestEditorAction.ValueNotModifiable=Attention \! Selon le sch\u00E9ma, l''attribut {0} n''est pas modifiable \!
 OpenBestEditorAction.ValueSingleValued=Attention \! Selon le sch\u00E9ma, l''attribut {0} est mono-valu\u00E9 \!
 OpenBestEditorAction.AttributeNotInSubSchema=Attention \! Selon le sch\u00E9ma, l''attribut {0} n''est pas autoris\u00E9 \!

Modified: directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/valueeditors/ValueEditorManager.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/valueeditors/ValueEditorManager.java?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/valueeditors/ValueEditorManager.java (original)
+++ directory/studio/trunk/ldapbrowser-common/src/main/java/org/apache/directory/studio/valueeditors/ValueEditorManager.java Mon Oct  5 10:51:47 2009
@@ -373,9 +373,16 @@
                 attributeHierarchy.getAttribute().getValues()[0].getAttribute().getDescription() ) )
         {
             // special case RDN: always return MV-editor
-            if ( attributeHierarchy.getAttribute().getValues()[0].isRdnPart() )
+            if ( userSelectedValueEditor == null && attributeHierarchy.getAttribute().getValues()[0].isRdnPart() )
             {
-                return multiValuedValueEditor;
+                if ( renameValueEditor != null )
+                {
+                    return renameValueEditor;
+                }
+                else
+                {
+                    return multiValuedValueEditor;
+                }
             }
 
             return getCurrentValueEditor( attributeHierarchy.getAttribute().getValues()[0] );
@@ -483,9 +490,9 @@
             return new IValueEditor[0];
         }
 
-        // special case RDN: no alternative to the MV editor, except the entry editor
+        // special case RDN: no alternative to the rename editor, except the MV editor
         // perhaps this should be moved somewhere else
-        if ( entryValueEditor != null )
+        if ( multiValuedValueEditor != null )
         {
             for ( IAttribute attribute : ah )
             {
@@ -494,7 +501,7 @@
                     if ( value.isRdnPart() )
                     {
                         return new IValueEditor[]
-                            { entryValueEditor };
+                            { multiValuedValueEditor };
                     }
                 }
             }
@@ -603,6 +610,17 @@
 
 
     /**
+     * Returns the rename value editor.
+     *
+     * @return the rename value editor
+     */
+    public RenameValueEditor getRenameValueEditor()
+    {
+        return renameValueEditor;
+    }
+
+
+    /**
      * Creates and returns the value editors specified by value editors extensions.
      *
      * @param parent the parent composite

Modified: directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/events/EntryModificationEvent.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/events/EntryModificationEvent.java?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/events/EntryModificationEvent.java (original)
+++ directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/events/EntryModificationEvent.java Mon Oct  5 10:51:47 2009
@@ -31,7 +31,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @version $Rev$, $Date$
  */
-public abstract class EntryModificationEvent
+public class EntryModificationEvent
 {
     /** The event source */
     protected Object source;

Added: 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=821751&view=auto
==============================================================================
--- directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java (added)
+++ directory/studio/trunk/ldapbrowser-core/src/main/java/org/apache/directory/studio/ldapbrowser/core/jobs/UpdateEntryRunnable.java Mon Oct  5 10:51:47 2009
@@ -0,0 +1,71 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+
+package org.apache.directory.studio.ldapbrowser.core.jobs;
+
+
+import org.apache.directory.studio.connection.core.jobs.StudioProgressMonitor;
+import org.apache.directory.studio.ldapbrowser.core.events.EntryModificationEvent;
+import org.apache.directory.studio.ldapbrowser.core.events.EventRegistry;
+import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
+
+
+/**
+ * Runnable to update an entry using an LDIF fragment.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class UpdateEntryRunnable extends ExecuteLdifRunnable
+{
+
+    private IEntry entry;
+
+
+    /**
+     * Creates a new instance of UpdateEntryRunnable.
+     * 
+     * @param entry the entry
+     * @param ldif the LDIF to execute
+     */
+    public UpdateEntryRunnable( IEntry entry, String ldif )
+    {
+        super( entry.getBrowserConnection(), ldif, false, false );
+        this.entry = entry;
+    }
+
+
+    @Override
+    public void run( StudioProgressMonitor monitor )
+    {
+        super.run( monitor );
+        InitializeAttributesRunnable.initializeAttributes( entry, monitor );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    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=821751&r1=821750&r2=821751&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 10:51:47 2009
@@ -38,7 +38,7 @@
 import org.apache.directory.studio.ldapbrowser.core.events.EntryRenamedEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.EntryUpdateListener;
 import org.apache.directory.studio.ldapbrowser.core.events.EventRegistry;
-import org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable;
+import org.apache.directory.studio.ldapbrowser.core.jobs.UpdateEntryRunnable;
 import org.apache.directory.studio.ldapbrowser.core.model.IBookmark;
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
 import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
@@ -581,8 +581,8 @@
                 if ( diff != null )
                 {
                     // save by executing the LDIF
-                    ExecuteLdifRunnable runnable = new ExecuteLdifRunnable( originalEntry.getBrowserConnection(), diff
-                        .toFormattedString( LdifFormatParameters.DEFAULT ), false, false );
+                    UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
+                        .toFormattedString( LdifFormatParameters.DEFAULT ) );
                     IStatus status = RunnableContextRunner.execute( runnable, null, handleError );
                     if ( status.isOK() )
                     {
@@ -913,8 +913,8 @@
                 LdifFile diff = Utils.computeDiff( autoSaveSharedReferenceCopy, autoSaveSharedWorkingCopy );
                 if ( diff != null )
                 {
-                    ExecuteLdifRunnable runnable = new ExecuteLdifRunnable( browserConnection, diff
-                        .toFormattedString( LdifFormatParameters.DEFAULT ), false, false );
+                    UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
+                        .toFormattedString( LdifFormatParameters.DEFAULT ) );
                     RunnableContextRunner.execute( runnable, null, true );
                     // don't care if status is ok or not: always update
                     updateAutoSaveSharedReferenceCopy( originalEntry );

Modified: directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/editors/searchresult/SearchResultEditor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/editors/searchresult/SearchResultEditor.java?rev=821751&r1=821750&r2=821751&view=diff
==============================================================================
--- directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/editors/searchresult/SearchResultEditor.java (original)
+++ directory/studio/trunk/ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/editors/searchresult/SearchResultEditor.java Mon Oct  5 10:51:47 2009
@@ -27,7 +27,7 @@
 import org.apache.directory.studio.ldapbrowser.core.events.EntryModificationEvent;
 import org.apache.directory.studio.ldapbrowser.core.events.EntryUpdateListener;
 import org.apache.directory.studio.ldapbrowser.core.events.EventRegistry;
-import org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable;
+import org.apache.directory.studio.ldapbrowser.core.jobs.UpdateEntryRunnable;
 import org.apache.directory.studio.ldapbrowser.core.model.IEntry;
 import org.apache.directory.studio.ldapbrowser.core.model.ISearch;
 import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult;
@@ -111,9 +111,8 @@
                         if ( diff != null )
                         {
                             // save
-                            ExecuteLdifRunnable runnable = new ExecuteLdifRunnable( originalEntry
-                                .getBrowserConnection(), diff.toFormattedString( LdifFormatParameters.DEFAULT ), false,
-                                false );
+                            UpdateEntryRunnable runnable = new UpdateEntryRunnable( originalEntry, diff
+                                .toFormattedString( LdifFormatParameters.DEFAULT ) );
                             IStatus status = RunnableContextRunner.execute( runnable, null, true );
                             if ( status.isOK() )
                             {