From a4d5b8535c83c579aff2b470e6fefef589b699be Mon Sep 17 00:00:00 2001 From: Mattias Arthursson Date: Tue, 17 Apr 2007 19:04:01 +0000 Subject: [PATCH] Fix for LDAP-46: Changed order of ADD_ATTRIBUTE and REMOVE_ATTRIBUTE modification item in multi-value Attributes. --- .../ldap/core/DirContextAdapter.java | 4 +- .../ldap/core/DirContextAdapterTest.java | 43 +++++++++++++++---- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/spring-ldap/src/main/java/org/springframework/ldap/core/DirContextAdapter.java b/spring-ldap/src/main/java/org/springframework/ldap/core/DirContextAdapter.java index ebe4cd73..ef853b47 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/core/DirContextAdapter.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/core/DirContextAdapter.java @@ -289,10 +289,10 @@ public class DirContextAdapter implements DirContextOperations { Collection removedValues = CollectionUtils.subtract(oldValues, newValues); - collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr, - addedValues, myModifications); collectModifications(DirContext.REMOVE_ATTRIBUTE, changedAttr, removedValues, myModifications); + collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr, + addedValues, myModifications); if (myModifications.isEmpty()) { // This means that the attributes are not equal, but the diff --git a/spring-ldap/src/test/java/org/springframework/ldap/core/DirContextAdapterTest.java b/spring-ldap/src/test/java/org/springframework/ldap/core/DirContextAdapterTest.java index f5bbaef7..e823b340 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/core/DirContextAdapterTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/core/DirContextAdapterTest.java @@ -789,21 +789,21 @@ public class DirContextAdapterTest extends TestCase { ModificationItem[] modificationItems = tested.getModificationItems(); assertEquals(2, modificationItems.length); - assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[0] - .getModificationOp()); Attribute modifiedAttribute = modificationItems[0].getAttribute(); - assertEquals("abc", modifiedAttribute.getID()); - assertEquals(2, modifiedAttribute.size()); - assertEquals("klytt", modifiedAttribute.get(0)); - assertEquals("kalle", modifiedAttribute.get(1)); - - modifiedAttribute = modificationItems[1].getAttribute(); - assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[1] + assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[0] .getModificationOp()); assertEquals("abc", modifiedAttribute.getID()); assertEquals(2, modifiedAttribute.size()); assertEquals("rty", modifiedAttribute.get(0)); assertEquals("uio", modifiedAttribute.get(1)); + + assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[1] + .getModificationOp()); + modifiedAttribute = modificationItems[1].getAttribute(); + assertEquals("abc", modifiedAttribute.getID()); + assertEquals(2, modifiedAttribute.size()); + assertEquals("klytt", modifiedAttribute.get(0)); + assertEquals("kalle", modifiedAttribute.get(1)); } public void testAddAttribute_Multivalue() throws Exception { @@ -962,4 +962,29 @@ public class DirContextAdapterTest extends TestCase { } return null; } + + public void testModifyMultiValueAttributeModificationOrder() + throws NamingException { + BasicAttribute attribute = new BasicAttribute("abc"); + attribute.add("Some Person"); + attribute.add("Some Other Person"); + + tested.setAttribute(attribute); + tested.setUpdateMode(true); + + tested.setAttributeValues("abc", new String[] { "some person", + "Some Other Person" }); + + // Perform test + ModificationItem[] modificationItems = tested.getModificationItems(); + assertEquals(2, modificationItems.length); + ModificationItem modificationItem = modificationItems[0]; + assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItem + .getModificationOp()); + assertEquals("Some Person", modificationItem.getAttribute().get()); + modificationItem = modificationItems[1]; + assertEquals(DirContext.ADD_ATTRIBUTE, modificationItem + .getModificationOp()); + assertEquals("some person", modificationItem.getAttribute().get()); + } }