This is an automated email from the ASF dual-hosted git repository. shuber pushed a commit to branch unomi-1.5.x in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 2f9ed6ed8d32c9888c0bf2670076d3e7fd639eed Author: giladw <[email protected]> AuthorDate: Wed Jan 6 17:20:34 2021 +0200 UNOMI-413-mergeProfileOnPropertyAction: support take Events profile as master, fix persistence bug when new profile is merged and it was the event profile (#232) (cherry picked from commit 1c9b970d6d21ea3d2c6744292e748c32278b6876) --- .../actions/MergeProfilesOnPropertyAction.java | 22 ++++++++++++++++++---- .../cxs/actions/mergeProfilesOnPropertyAction.json | 5 +++++ 2 files changed, 23 insertions(+), 4 deletions(-) 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 ffdf626..b01990b 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 @@ -132,11 +132,18 @@ public class MergeProfilesOnPropertyAction implements ActionExecutor { return StringUtils.isEmpty(mergeProfilePreviousPropertyValue) ? EventService.PROFILE_UPDATED : EventService.NO_CHANGE; } - // Use oldest profile for master profile - final Profile masterProfile = profileService.mergeProfiles(profiles.get(0), profiles); + Profile markedMasterProfile; + boolean forceEventProfileAsMaster = action.getParameterValues().containsKey("forceEventProfileAsMaster") ? + (boolean) action.getParameterValues().get("forceEventProfileAsMaster") : false; + if (forceEventProfileAsMaster) + markedMasterProfile = event.getProfile(); + else + markedMasterProfile = profiles.get(0);// Use oldest profile for master profile + + final Profile masterProfile = profileService.mergeProfiles(markedMasterProfile, profiles); // Profile has changed - if (!masterProfile.getItemId().equals(profileId)) { + if (forceEventProfileAsMaster || !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) @@ -192,7 +199,14 @@ public class MergeProfilesOnPropertyAction implements ActionExecutor { sourceMap.put("mergedWith", masterProfileId); profile.setSystemProperty("lastUpdated", new Date()); sourceMap.put("systemProperties", profile.getSystemProperties()); - persistenceService.update(profile, null, Profile.class, sourceMap); + + boolean isExist = persistenceService.load(profile.getItemId(), Profile.class) != null; + + if (isExist == false) //save the original event profile is it has been changed + persistenceService.save(profile); + else + persistenceService.update(profile, null, Profile.class, sourceMap,true); + } } } catch (Exception e) { diff --git a/plugins/baseplugin/src/main/resources/META-INF/cxs/actions/mergeProfilesOnPropertyAction.json b/plugins/baseplugin/src/main/resources/META-INF/cxs/actions/mergeProfilesOnPropertyAction.json index 6082f9f..07bf38c 100644 --- a/plugins/baseplugin/src/main/resources/META-INF/cxs/actions/mergeProfilesOnPropertyAction.json +++ b/plugins/baseplugin/src/main/resources/META-INF/cxs/actions/mergeProfilesOnPropertyAction.json @@ -15,6 +15,11 @@ "id": "mergeProfilePropertyName", "type": "string", "multivalued": false + }, + { + "id": "forceEventProfileAsMaster", + "type": "boolean", + "multivalued": false } ] } \ No newline at end of file
