in rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java [185:255]
private EventsRequestContext processContextRequest(ContextRequest contextRequest, ContextResponse data, EventsRequestContext eventsRequestContext) {
processOverrides(contextRequest, eventsRequestContext.getProfile(), eventsRequestContext.getSession());
eventsRequestContext = restServiceUtils.performEventsRequest(contextRequest.getEvents(), eventsRequestContext);
data.setProcessedEvents(eventsRequestContext.getProcessedItems());
List<PersonalizationService.PersonalizedContent> filterNodes = contextRequest.getFilters();
if (filterNodes != null) {
data.setFilteringResults(new HashMap<>());
for (PersonalizationService.PersonalizedContent personalizedContent : sanitizePersonalizedContentObjects(filterNodes)) {
data.getFilteringResults()
.put(personalizedContent.getId(), personalizationService.filter(eventsRequestContext.getProfile(), eventsRequestContext.getSession(), personalizedContent));
}
}
List<PersonalizationService.PersonalizationRequest> personalizations = contextRequest.getPersonalizations();
if (personalizations != null) {
data.setPersonalizationResults(new HashMap<>());
data.setPersonalizations(new HashMap<>());
for (PersonalizationService.PersonalizationRequest personalization : sanitizePersonalizations(personalizations)) {
PersonalizationResult personalizationResult = personalizationService.personalizeList(eventsRequestContext.getProfile(), eventsRequestContext.getSession(), personalization);
eventsRequestContext.addChanges(personalizationResult.getChangeType());
data.getPersonalizationResults().put(personalization.getId(), personalizationResult);
data.getPersonalizations().put(personalization.getId(), personalizationResult.getContentIds());
}
}
if (contextRequest.isRequireSegments()) {
data.setProfileSegments(eventsRequestContext.getProfile().getSegments());
}
if (contextRequest.isRequireScores()) {
data.setProfileScores(eventsRequestContext.getProfile().getScores());
}
if (contextRequest.getRequiredProfileProperties() != null) {
Map<String, Object> profileProperties = new HashMap<>(eventsRequestContext.getProfile().getProperties());
if (!contextRequest.getRequiredProfileProperties().contains("*")) {
profileProperties.keySet().retainAll(contextRequest.getRequiredProfileProperties());
} else {
// get public properties + explicit properties
Set<String> concealedProperties = profileService.getPropertyTypeBySystemTag("concealed").stream().map(Item::getItemId).collect(Collectors.toSet());
// remove requested properties from the filtered properties
concealedProperties.removeAll(contextRequest.getRequiredProfileProperties().stream().filter(p -> !p.equals("*")).collect(Collectors.toList()));
profileProperties.keySet().removeAll(concealedProperties);
}
data.setProfileProperties(profileProperties);
}
if (eventsRequestContext.getSession() != null) {
data.setSessionId(eventsRequestContext.getSession().getItemId());
if (contextRequest.getRequiredSessionProperties() != null) {
Map<String, Object> sessionProperties = new HashMap<>(eventsRequestContext.getSession().getProperties());
if (!contextRequest.getRequiredSessionProperties().contains("*")) {
sessionProperties.keySet().retainAll(contextRequest.getRequiredSessionProperties());
}
data.setSessionProperties(sessionProperties);
}
}
if (!(eventsRequestContext.getProfile() instanceof Persona)) {
data.setTrackedConditions(rulesService.getTrackedConditions(contextRequest.getSource()));
} else {
data.setTrackedConditions(Collections.emptySet());
}
data.setAnonymousBrowsing(privacyService.isRequireAnonymousBrowsing(eventsRequestContext.getProfile()));
data.setConsents(eventsRequestContext.getProfile().getConsents());
return eventsRequestContext;
}