UNOMI-32 remove property if the property is present in the object with a null 
value


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/0bb17729
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/0bb17729
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/0bb17729

Branch: refs/heads/UNOMI-28-ES-2-X-UPGRADE
Commit: 0bb17729c5dbd461721d8d9487b8b278cda87091
Parents: 9a53c2f
Author: dgaillard <[email protected]>
Authored: Mon Sep 12 17:55:19 2016 +0200
Committer: dgaillard <[email protected]>
Committed: Mon Sep 12 17:55:19 2016 +0200

----------------------------------------------------------------------
 .../services/services/ProfileServiceImpl.java   | 37 +++++++++++---------
 1 file changed, 21 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/0bb17729/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
index eaf8d98..71fe2fd 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
@@ -766,35 +766,40 @@ public class ProfileServiceImpl implements 
ProfileService, SynchronousBundleList
         return false;
     }
 
-    private boolean merge(Map<String,Object> target, Map<String,Object> 
object) {
+    private boolean merge(Map<String, Object> target, Map<String, Object> 
object) {
         boolean changed = false;
-        for (Map.Entry<String, Object> previousEntry : object.entrySet()) {
-            if (previousEntry.getValue() != null) {
-                if (previousEntry.getValue() instanceof Collection) {
-                    Collection currentCollection = (Collection) 
target.get(previousEntry.getKey());
+        for (Map.Entry<String, Object> newEntry : object.entrySet()) {
+            if (newEntry.getValue() != null) {
+                if (newEntry.getValue() instanceof Collection) {
+                    Collection currentCollection = (Collection) 
target.get(newEntry.getKey());
                     if (currentCollection != null) {
-                        if (!currentCollection.containsAll((Collection) 
previousEntry.getValue())) {
-                            changed |= currentCollection.addAll((Collection) 
previousEntry.getValue());
+                        if (!currentCollection.containsAll((Collection) 
newEntry.getValue())) {
+                            changed |= currentCollection.addAll((Collection) 
newEntry.getValue());
                         }
                     } else {
-                        target.put(previousEntry.getKey(), 
previousEntry.getValue());
+                        target.put(newEntry.getKey(), newEntry.getValue());
                         changed = true;
                     }
-                } else if (previousEntry.getValue() instanceof Map) {
-                    Map<String,Object> currentMap = (Map) 
target.get(previousEntry.getKey());
+                } else if (newEntry.getValue() instanceof Map) {
+                    Map<String,Object> currentMap = (Map) 
target.get(newEntry.getKey());
                     if (currentMap == null) {
-                        target.put(previousEntry.getKey(), 
previousEntry.getValue());
+                        target.put(newEntry.getKey(), newEntry.getValue());
                         changed = true;
                     } else {
-                        changed |= merge(currentMap, (Map) 
previousEntry.getValue());
+                        changed |= merge(currentMap, (Map) 
newEntry.getValue());
                     }
-                } else if 
(previousEntry.getValue().getClass().getPackage().getName().equals("java.lang"))
 {
-                    if (previousEntry.getValue() != null && 
!previousEntry.getValue().equals(target.get(previousEntry.getKey()))) {
-                        target.put(previousEntry.getKey(), 
previousEntry.getValue());
+                } else if 
(newEntry.getValue().getClass().getPackage().getName().equals("java.lang")) {
+                    if (newEntry.getValue() != null && 
!newEntry.getValue().equals(target.get(newEntry.getKey()))) {
+                        target.put(newEntry.getKey(), newEntry.getValue());
                         changed = true;
                     }
                 } else {
-                    changed |= merge(target.get(previousEntry.getKey()), 
previousEntry.getValue());
+                    changed |= merge(target.get(newEntry.getKey()), 
newEntry.getValue());
+                }
+            } else {
+                if (target.containsKey(newEntry.getKey())) {
+                    target.remove(newEntry.getKey());
+                    changed = true;
                 }
             }
         }

Reply via email to