public int execute()

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;

    }