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;