in graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/factories/EventConditionFactory.java [55:151]
public Condition eventFilterInputCondition(final CDPEventFilterInput filterInput, final Map<String, Object> filterInputAsMap) {
if (filterInput == null) {
return matchAllCondition();
}
final List<Condition> rootSubConditions = new ArrayList<>();
if (filterInput.getCdp_timestamp_equals() != null) {
rootSubConditions.add(datePropertyCondition("timeStamp", "equals", filterInput.getCdp_timestamp_equals()));
}
if (filterInput.getCdp_timestamp_gt() != null) {
rootSubConditions.add(datePropertyCondition("timeStamp", "greaterThan", filterInput.getCdp_timestamp_gt()));
}
if (filterInput.getCdp_timestamp_gte() != null) {
rootSubConditions.add(datePropertyCondition("timeStamp", "greaterThanOrEqualTo", filterInput.getCdp_timestamp_gte()));
}
if (filterInput.getCdp_timestamp_lt() != null) {
rootSubConditions.add(datePropertyCondition("timeStamp", "lessThan", filterInput.getCdp_timestamp_lt()));
}
if (filterInput.getCdp_timestamp_lte() != null) {
rootSubConditions.add(datePropertyCondition("timeStamp", "lessThanOrEqualTo", filterInput.getCdp_timestamp_lte()));
}
if (filterInput.getId_equals() != null) {
rootSubConditions.add(propertyCondition("itemId", filterInput.getId_equals()));
}
if (filterInput.getCdp_clientID_equals() != null) {
rootSubConditions.add(propertyCondition("properties.clientId", filterInput.getCdp_clientID_equals()));
}
if (filterInput.getCdp_profileID_equals() != null) {
rootSubConditions.add(propertyCondition("profileId", filterInput.getCdp_profileID_equals()));
}
if (filterInput.getCdp_sourceID_equals() != null) {
rootSubConditions.add(propertyCondition("source.itemId", filterInput.getCdp_sourceID_equals()));
}
if (filterInput.getCdp_listsUpdateEvent() != null) {
rootSubConditions.add(listUpdateEventCondition(filterInput.getCdp_listsUpdateEvent()));
}
if (filterInput.getCdp_consentUpdateEvent() != null) {
rootSubConditions.add(createCdpConsentUpdateEventCondition(filterInput.getCdp_consentUpdateEvent()));
}
if (filterInput.getCdp_sessionEvent() != null) {
rootSubConditions.add(createCdpSessionEventCondition(filterInput.getCdp_sessionEvent()));
}
if (filterInput.getCdp_profileUpdateEvent() != null) {
final Map<String, Object> profileUpdateEventAsMap = (Map<String, Object>) filterInputAsMap.get("cdp_profileUpdateEvent");
rootSubConditions.add(
createDynamicEventCondition("cdp_profileUpdateEvent", profileUpdateEventAsMap, CDPProfileUpdateEventFilterInput.TYPE_NAME));
}
final List<String> nonDynamicFields = ReflectionUtil.getNonDynamicFields(filterInput.getClass());
final GraphQLInputObjectType inputObjectType =
(GraphQLInputObjectType) environment.getGraphQLSchema().getType(ReflectionUtil.resolveTypeName(CDPEventFilterInput.class));
final List<String> dynamicInputFields = inputObjectType.getFieldDefinitions()
.stream()
.filter(inputObjectField -> !nonDynamicFields.contains(inputObjectField.getName()))
.map(GraphQLInputObjectField::getName)
.collect(Collectors.toList());
dynamicInputFields.forEach(fieldName -> {
final Map<String, Object> dynamicEventAsMap = (Map<String, Object>) filterInputAsMap.get(fieldName);
if (dynamicEventAsMap != null) {
final String typeName = ((GraphQLInputObjectType) inputObjectType.getFieldDefinition(fieldName).getType()).getName();
rootSubConditions.add(createDynamicEventCondition(fieldName, dynamicEventAsMap, typeName));
}
});
if (filterInput.getAnd() != null && !filterInput.getAnd().isEmpty()) {
final List<Map<String, Object>> listFilterInputAsMap = (List<Map<String, Object>>) filterInputAsMap.get("and");
rootSubConditions.add(filtersToCondition(filterInput.getAnd(), listFilterInputAsMap, this::eventFilterInputCondition, "and"));
}
if (filterInput.getOr() != null && !filterInput.getOr().isEmpty()) {
final List<Map<String, Object>> listFilterInputAsMap = (List<Map<String, Object>>) filterInputAsMap.get("or");
rootSubConditions.add(filtersToCondition(filterInput.getOr(), listFilterInputAsMap, this::eventFilterInputCondition, "or"));
}
return booleanCondition("and", rootSubConditions);
}