diff options
author | Stefan Seelmann <mail@stefan-seelmann.de> | 2021-01-24 23:26:35 +0300 |
---|---|---|
committer | Stefan Seelmann <mail@stefan-seelmann.de> | 2021-01-25 08:17:55 +0300 |
commit | cfc7dc194456a85bf8a3088e96cc47daa499bc8f (patch) | |
tree | 8ad7363e80705c7da304bec54b94a6c36f2f9b6c /plugins | |
parent | 74577d8ea721b26dc9106a2c9ea53059980cd82d (diff) |
DIRSTUDIO-744: Fix entry modify requests
* When deleting all remaining values of an attribute the deleted values are now included in the modify request.
* Remove "smart" behaviour whicht used replace operation instead of delete+add when modifying a value.
* Both can cause unwanted side effect if the client doesn't see all values.
Diffstat (limited to 'plugins')
2 files changed, 11 insertions, 10 deletions
diff --git a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/messages.properties b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/messages.properties index fd9548fa7..b1d9963d4 100644 --- a/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/messages.properties +++ b/plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/messages.properties @@ -38,11 +38,11 @@ BrowserParameterPage.ManageDsaItWhileBrowsingTooltip=If enabled the ManageDsaIT EditorParameterPage.ModifyGroup=Entry Modifcation EditorParameterPage.ModifyMode=Modify Mode: EditorParameterPage.ModifyModeAddDel=Always use ADD and/or DELETE -EditorParameterPage.ModifyModeDefault=Optimized Modify Operations +EditorParameterPage.ModifyModeDefault=Default EditorParameterPage.ModifyModeNoEMR=Modify Mode (no equality matching rule): -EditorParameterPage.ModifyModeNoEMRTooltip=Specify the modify mode for attributes with *no* equality matching rule.\n\nDescription of options:\n* Optimized Modify Operations: uses add/delete by default, uses replace if operation count is less\n* Always use REPLACE: always uses replace operations to perform entry modifications\n* Always use ADD and/or DELETE: always uses add and/or delete operations to perform entry modifications\n\nRecommended values for various LDAP servers:\n* ApacheDS: Optimized Modify Operations or REPLACE\n* OpenLDAP: REPLACE\n* OpenDS / SunDSEE: Optimized Modify Operations or REPLACE\n* FedoraDS / 389DS: Optimized Modify Operations (missing equality matching rules for many standard attribute types)\n* Active Directory: Optimized Modify Operations (exposes no equality matching rules at all)\n* eDirectory: Optimized Modify Operations (exposes no equality matching rules at all) +EditorParameterPage.ModifyModeNoEMRTooltip=Specify the modify mode for attributes with *no* equality matching rule.\n\nDescription of options:\n* Default: uses add/delete by default, uses replace for X-ORDERED attributes\n* Always use REPLACE: always uses replace operations to perform entry modifications\n* Always use ADD and/or DELETE: always uses add and/or delete operations to perform entry modifications\n\nRecommended values for various LDAP servers:\n* ApacheDS: Default or REPLACE\n* OpenLDAP: REPLACE\n* OpenDS / SunDSEE: Default or REPLACE\n* FedoraDS / 389DS: Defult (missing equality matching rules for many standard attribute types)\n* Active Directory: Default (exposes no equality matching rules at all)\n* eDirectory: Default (exposes no equality matching rules at all) EditorParameterPage.ModifyModeReplace=Always use REPLACE -EditorParameterPage.ModifyModeTooltip=Specify the modify mode for attributes with an equality matching rule.\n\nDescription of options:\n* Optimized Modify Operations: uses add/delete by default, uses replace if operation count is less\n* Always REPLACE: always uses replace operations to perform entry modifications\n* Always ADD/DELETE: always uses add and/or delete operations to perform entry modifications\n\nRecommended value: Optimized Modify Operations +EditorParameterPage.ModifyModeTooltip=Specify the modify mode for attributes with an equality matching rule.\n\nDescription of options:\n* Default: uses add/delete by default, uses replace for X-ORDERED attributes\n* Always REPLACE: always uses replace operations to perform entry modifications\n* Always ADD/DELETE: always uses add and/or delete operations to perform entry modifications\n\nRecommended value: Default EditorParameterPage.ModifyOrder=Modify Order: EditorParameterPage.ModifyOrderAddFirst=ADD First EditorParameterPage.ModifyOrderDelFirst=DELETE First diff --git a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java index af5b4fa95..2cc7bad60 100644 --- a/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java +++ b/plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -406,7 +407,7 @@ public class Utils ModifyOrder modifyAddDeleteOrder = oldEntry.getBrowserConnection().getModifyAddDeleteOrder(); // get all attribute descriptions - Set<String> attributeDescriptions = new HashSet<>(); + Set<String> attributeDescriptions = new LinkedHashSet<>(); for ( IAttribute oldAttr : oldEntry.getAttributes() ) { @@ -487,6 +488,10 @@ public class Utils { // delete all modSpec = LdifModSpec.createDelete( attributeDescription ); + for ( IValue value : oldAttribute.getValues() ) + { + modSpec.addAttrVal( computeDiffCreateAttrValLine( value ) ); + } } modSpec.finish( LdifModSpecSepLine.create() ); @@ -558,16 +563,12 @@ public class Utils /* * we use add/del in the following cases: * - add/del is forced in the connection configuration - * - only values to add - * - only values to delete - * - the sum of adds and deletes is smaller or equal than the number of replaces + * - for attributes w/o X-ORDERED 'VALUES' * * we use replace in the following cases: - * - the number of replaces is smaller to the sum of adds and deletes * - for attributes with X-ORDERED 'VALUES' */ - if ( isAddDelForced || ( toAdd.size() + toDel.size() <= newAttrValLines.size() && !isOrderedValue ) - || ( !toDel.isEmpty() && toAdd.isEmpty() ) || ( !toAdd.isEmpty() && toDel.isEmpty() ) ) + if ( isAddDelForced || !isOrderedValue ) { // add/del del/add LdifModSpec addModSpec = LdifModSpec.createAdd( attributeDescription ); |