Repository: incubator-unomi
Updated Branches:
  refs/heads/master 0a19fa0ce -> 07034456a


UNOMI-120 MasterProfile is not saved when a merge is performed
This commit adds the missing call to the persistence service when the master 
profile is updated.

Signed-off-by: Serge Huber <shu...@apache.org>


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

Branch: refs/heads/master
Commit: 07034456aade6137efa52d4ad12c96f30a3290b5
Parents: 0a19fa0
Author: Serge Huber <shu...@apache.org>
Authored: Fri Aug 18 09:55:15 2017 +0200
Committer: Serge Huber <shu...@apache.org>
Committed: Fri Aug 18 09:55:15 2017 +0200

----------------------------------------------------------------------
 .../actions/MergeProfilesOnPropertyAction.java          |  1 +
 .../mergers/NonEmptyPropertyMergeStrategyExecutor.java  |  3 +++
 .../mergers/OldestPropertyMergeStrategyExecutor.java    |  3 +++
 .../unomi/services/services/ProfileServiceImpl.java     | 12 ++++++++++--
 4 files changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/07034456/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
index b908586..9d86f57 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
@@ -189,6 +189,7 @@ public class MergeProfilesOnPropertyAction implements 
ActionExecutor {
             // Profile has changed
             if (!masterProfile.getItemId().equals(profileId)) {
                 HttpServletResponse httpServletResponse = 
(HttpServletResponse) event.getAttributes().get(Event.HTTP_RESPONSE_ATTRIBUTE);
+                // we still send back the current profile cookie. It will be 
changed on the next request to the ContextServlet. The current profile will be 
deleted only then because we cannot delete it right now (too soon)
                 sendProfileCookie(currentSession.getProfile(), 
httpServletResponse, profileIdCookieName, profileIdCookieDomain, 
profileIdCookieMaxAgeInSeconds);
                 final String masterProfileId = masterProfile.getItemId();
 

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/07034456/services/src/main/java/org/apache/unomi/services/mergers/NonEmptyPropertyMergeStrategyExecutor.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/mergers/NonEmptyPropertyMergeStrategyExecutor.java
 
b/services/src/main/java/org/apache/unomi/services/mergers/NonEmptyPropertyMergeStrategyExecutor.java
index 44c026c..4f74851 100644
--- 
a/services/src/main/java/org/apache/unomi/services/mergers/NonEmptyPropertyMergeStrategyExecutor.java
+++ 
b/services/src/main/java/org/apache/unomi/services/mergers/NonEmptyPropertyMergeStrategyExecutor.java
@@ -23,6 +23,9 @@ import org.apache.unomi.api.PropertyType;
 
 import java.util.List;
 
+/**
+ * @todo not yet implemented !
+ */
 public class NonEmptyPropertyMergeStrategyExecutor implements 
PropertyMergeStrategyExecutor {
     public boolean mergeProperty(String propertyName, PropertyType 
propertyType, List<Profile> profilesToMerge, Profile targetProfile) {
         return false;

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/07034456/services/src/main/java/org/apache/unomi/services/mergers/OldestPropertyMergeStrategyExecutor.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/mergers/OldestPropertyMergeStrategyExecutor.java
 
b/services/src/main/java/org/apache/unomi/services/mergers/OldestPropertyMergeStrategyExecutor.java
index 0d877fa..6f91448 100644
--- 
a/services/src/main/java/org/apache/unomi/services/mergers/OldestPropertyMergeStrategyExecutor.java
+++ 
b/services/src/main/java/org/apache/unomi/services/mergers/OldestPropertyMergeStrategyExecutor.java
@@ -23,6 +23,9 @@ import org.apache.unomi.api.PropertyType;
 
 import java.util.List;
 
+/**
+ * @todo not yet implemented !
+ */
 public class OldestPropertyMergeStrategyExecutor implements 
PropertyMergeStrategyExecutor {
     public boolean mergeProperty(String propertyName, PropertyType 
propertyType, List<Profile> profilesToMerge, Profile targetProfile) {
         return false;

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/07034456/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 111ffca..0a45be9 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
@@ -468,6 +468,7 @@ public class ProfileServiceImpl implements ProfileService, 
SynchronousBundleList
             profileIdsToMerge.add(profileToMerge.getItemId());
         }
         logger.info("Merging profiles " + profileIdsToMerge + " into profile " 
+ masterProfile.getItemId());
+        boolean masterProfileChanged = false;
 
         for (String profileProperty : allProfileProperties) {
             PropertyType propertyType = 
profilePropertyTypeById.get(profileProperty);
@@ -497,7 +498,7 @@ public class ProfileServiceImpl implements ProfileService, 
SynchronousBundleList
                 matchingPropertyMergeStrategyExecutors = 
bundleContext.getServiceReferences(PropertyMergeStrategyExecutor.class, 
propertyMergeStrategyType.getFilter());
                 for (ServiceReference<PropertyMergeStrategyExecutor> 
propertyMergeStrategyExecutorReference : 
matchingPropertyMergeStrategyExecutors) {
                     PropertyMergeStrategyExecutor 
propertyMergeStrategyExecutor = 
bundleContext.getService(propertyMergeStrategyExecutorReference);
-                    
propertyMergeStrategyExecutor.mergeProperty(profileProperty, propertyType, 
profilesToMerge, masterProfile);
+                    masterProfileChanged |= 
propertyMergeStrategyExecutor.mergeProperty(profileProperty, propertyType, 
profilesToMerge, masterProfile);
                 }
             } catch (InvalidSyntaxException e) {
                 logger.error("Error retrieving strategy implementation", e);
@@ -507,7 +508,14 @@ public class ProfileServiceImpl implements ProfileService, 
SynchronousBundleList
 
         // we now have to merge the profile's segments
         for (Profile profile : profilesToMerge) {
-            masterProfile.getSegments().addAll(profile.getSegments());
+            if (profile.getSegments() != null && profile.getSegments().size() 
> 0) {
+                masterProfile.getSegments().addAll(profile.getSegments());
+                masterProfileChanged = true;
+            }
+        }
+
+        if (masterProfileChanged) {
+            persistenceService.save(masterProfile);
         }
 
         return masterProfile;

Reply via email to