in plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/UpdatePropertiesAction.java [52:112]
public int execute(Action action, Event event) {
Profile target = event.getProfile();
String targetId = (String) event.getProperty(TARGET_ID_KEY);
String targetType = (String) event.getProperty(TARGET_TYPE_KEY);
if (StringUtils.isNotBlank(targetId) && event.getProfile() != null && !targetId.equals(event.getProfile().getItemId())) {
target = TARGET_TYPE_PROFILE.equals(targetType) ? profileService.load(targetId) : profileService.loadPersona(targetId);
if (target == null) {
LOGGER.warn("No profile found with Id : {}. Update skipped.", targetId);
return EventService.NO_CHANGE;
}
}
boolean isProfileOrPersonaUpdated = false;
Map<String, Object> propsToAdd = (HashMap<String, Object>) event.getProperties().get(PROPS_TO_ADD);
if (propsToAdd != null) {
isProfileOrPersonaUpdated |= processProperties(target, propsToAdd, "setIfMissing");
}
Map<String, Object> propsToUpdate = (HashMap<String, Object>) event.getProperties().get(PROPS_TO_UPDATE);
if (propsToUpdate != null) {
isProfileOrPersonaUpdated |= processProperties(target, propsToUpdate, "alwaysSet");
}
Map<String, Object> propsToAddToSet = (HashMap<String, Object>) event.getProperties().get(PROPS_TO_ADD_TO_SET);
if (propsToAddToSet != null) {
isProfileOrPersonaUpdated |= processProperties(target, propsToAddToSet, "addValues");
}
List<String> propsToDelete = (List<String>) event.getProperties().get(PROPS_TO_DELETE);
if (propsToDelete != null) {
for (String prop : propsToDelete) {
isProfileOrPersonaUpdated |= PropertyHelper.setProperty(target, prop, null, "remove");
}
}
if (StringUtils.isNotBlank(targetId) && isProfileOrPersonaUpdated &&
event.getProfile() != null && !targetId.equals(event.getProfile().getItemId())) {
if (TARGET_TYPE_PROFILE.equals(targetType)) {
profileService.save(target);
Event profileUpdated = new Event("profileUpdated", null, target, null, null, target, new Date());
profileUpdated.setPersistent(false);
int changes = eventService.send(profileUpdated);
if ((changes & EventService.PROFILE_UPDATED) == EventService.PROFILE_UPDATED) {
profileService.save(target);
}
} else {
profileService.savePersona((Persona) target);
}
return EventService.NO_CHANGE;
}
return isProfileOrPersonaUpdated ? EventService.PROFILE_UPDATED : EventService.NO_CHANGE;
}