You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by jk...@apache.org on 2019/01/04 12:14:45 UTC
incubator-unomi git commit: UNOMI-217 merge system properties during
profile merge [Forced Update!]
Repository: incubator-unomi
Updated Branches:
refs/heads/master 44c820370 -> d3b1e950d (forced update)
UNOMI-217 merge system properties during profile merge
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/d3b1e950
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/d3b1e950
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/d3b1e950
Branch: refs/heads/master
Commit: d3b1e950d7f1ec6c1efe876b69160da007a23dc2
Parents: 4b447c2
Author: Kevan <ke...@jahia.com>
Authored: Fri Jan 4 13:10:06 2019 +0100
Committer: Kevan <ke...@jahia.com>
Committed: Fri Jan 4 13:13:41 2019 +0100
----------------------------------------------------------------------
.../services/services/ProfileServiceImpl.java | 51 ++++++++++++++++++++
1 file changed, 51 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/d3b1e950/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 92c80b8..1e79c68 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
@@ -628,10 +628,16 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList
}
+ // merge System properties
+ for (Profile profile : profilesToMerge) {
+ masterProfileChanged = mergeSystemProperties(masterProfile.getSystemProperties(), profile.getSystemProperties()) || masterProfileChanged;
+ }
+
// we now have to merge the profile's segments
for (Profile profile : profilesToMerge) {
if (profile.getSegments() != null && profile.getSegments().size() > 0) {
masterProfile.getSegments().addAll(profile.getSegments());
+ // TODO better segments diff calculation
masterProfileChanged = true;
}
}
@@ -1010,4 +1016,49 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList
return changed;
}
+ private boolean mergeSystemProperties(Map<String, Object> targetProperties, Map<String, Object> toBeMergeProperties) {
+ boolean changed = false;
+ for (Map.Entry<String, Object> toBeMergeProperty : toBeMergeProperties.entrySet()) {
+ if (toBeMergeProperty.getValue() != null) {
+ if (!targetProperties.containsKey(toBeMergeProperty.getKey())) {
+ targetProperties.put(toBeMergeProperty.getKey(), toBeMergeProperty.getValue());
+ changed = true;
+ } else {
+ Object targetProperty = targetProperties.get(toBeMergeProperty.getKey());
+
+ if (targetProperty instanceof Map && toBeMergeProperty.getValue() instanceof Map) {
+ // merge Maps like "goals", "campaigns"
+ @SuppressWarnings("unchecked")
+ Map<String, Object> mapToBeMergeProp = (Map<String, Object>) toBeMergeProperty.getValue();
+ @SuppressWarnings("unchecked")
+ Map<String, Object> mapTargetProp = (Map<String, Object>) targetProperty;
+
+ for (Map.Entry<String, ?> mapToBeMergeEntry : mapToBeMergeProp.entrySet()) {
+ if (!mapTargetProp.containsKey(mapToBeMergeEntry.getKey())) {
+ mapTargetProp.put(mapToBeMergeEntry.getKey(), mapToBeMergeEntry.getValue());
+ changed = true;
+ }
+ }
+ } else if (targetProperty instanceof Collection && toBeMergeProperty.getValue() instanceof Collection) {
+ // merge Collections like "lists"
+ Collection collectionToBeMerge = (Collection) toBeMergeProperty.getValue();
+ Collection collectionTarget = (Collection) targetProperty;
+
+ for (Object itemToBeMerge : collectionToBeMerge) {
+ if (!collectionTarget.contains(itemToBeMerge)) {
+ try {
+ collectionTarget.add(itemToBeMerge);
+ changed = true;
+ } catch (Exception e) {
+ // may be Collection type issue
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return changed;
+ }
}