Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/apache/directory-studio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Seelmann <mail@stefan-seelmann.de>2021-01-24 23:26:35 +0300
committerStefan Seelmann <mail@stefan-seelmann.de>2021-01-25 08:17:55 +0300
commitcfc7dc194456a85bf8a3088e96cc47daa499bc8f (patch)
tree8ad7363e80705c7da304bec54b94a6c36f2f9b6c /plugins
parent74577d8ea721b26dc9106a2c9ea53059980cd82d (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')
-rw-r--r--plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/connection/messages.properties6
-rw-r--r--plugins/ldapbrowser.core/src/main/java/org/apache/directory/studio/ldapbrowser/core/utils/Utils.java15
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 );