public Condition eventFilterInputCondition()

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);
    }