From 3bcc70c3d28164434f018c3c8e9f775be7100708 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Thu, 27 May 2010 09:41:54 +0000
Subject: [PATCH] Several minor fixes in command line utilities and with the Monitoring backend

---
 opends/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java |   38 +++++++++++++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java b/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
index 592707c..587769a 100644
--- a/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
+++ b/opends/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Copyright 2008-2010 Sun Microsystems, Inc.
  */
 package org.opends.server.tools.dsconfig;
 
@@ -2401,16 +2401,48 @@
     {
       if (newValues.containsAll(previousValues))
       {
-        registerAddModification(pd, newValues, previousValues);
+        if (newValues.size() <= 1)
+        {
+          registerSetModification(pd, newValues, previousValues);
+        }
+        else
+        {
+          registerAddModification(pd, newValues, previousValues);
+        }
       }
       else if (previousValues.containsAll(newValues))
       {
         registerRemoveModification(pd, newValues, previousValues);
       }
-      else
+      else if (newValues.size() <= 1)
       {
         registerSetModification(pd, newValues, previousValues);
       }
+      else
+      {
+        // Split into two operations: remove and add
+        SortedSet<T> removedValues = new TreeSet<T>();
+        removedValues.addAll(previousValues);
+        removedValues.removeAll(newValues);
+
+        PropertyEditorModification<T> removeMod =
+          PropertyEditorModification.createRemoveModification(pd,
+            removedValues, previousValues);
+        addModification(removeMod);
+
+        SortedSet<T> retainedValues = new TreeSet<T>();
+        retainedValues.addAll(previousValues);
+        retainedValues.retainAll(newValues);
+
+        SortedSet<T> addedValues = new TreeSet<T>();
+        addedValues.addAll(newValues);
+        addedValues.removeAll(retainedValues);
+
+        PropertyEditorModification<T> addMod =
+          PropertyEditorModification.createAddModification(pd,
+              addedValues, retainedValues);
+        addModification(addMod);
+      }
     }
   }
 

--
Gitblit v1.10.0