public Set getTrackedConditions()

in services/src/main/java/org/apache/unomi/services/impl/rules/RulesServiceImpl.java [413:468]


    public Set<Condition> getTrackedConditions(Item source) {
        Set<Condition> trackedConditions = new HashSet<>();
        for (Rule r : allRules) {
            if (!r.getMetadata().isEnabled()) {
                continue;
            }
            Condition ruleCondition = r.getCondition();
            Condition trackedCondition = definitionsService.extractConditionBySystemTag(ruleCondition, "trackedCondition");
            if (trackedCondition != null) {
                Condition evalCondition = definitionsService.extractConditionBySystemTag(ruleCondition, "sourceEventCondition");
                if (evalCondition != null) {
                    if (persistenceService.testMatch(evalCondition, source)) {
                        trackedConditions.add(trackedCondition);
                    }
                } else if (
                        trackedCondition.getConditionType() != null &&
                                trackedCondition.getConditionType().getParameters() != null && !trackedCondition.getConditionType()
                                .getParameters().isEmpty()
                ) {
                    // lookup for track parameters
                    Map<String, Object> trackedParameters = new HashMap<>();
                    trackedCondition.getConditionType().getParameters().forEach(parameter -> {
                        try {
                            if (TRACKED_PARAMETER.equals(parameter.getId())) {
                                Arrays.stream(StringUtils.split(parameter.getDefaultValue(), ",")).forEach(trackedParameter -> {
                                    String[] param = StringUtils.split(StringUtils.trim(trackedParameter), ":");
                                    trackedParameters.put(StringUtils.trim(param[1]), trackedCondition.getParameter(StringUtils.trim(param[0])));
                                });
                            }
                        } catch (Exception e) {
                            LOGGER.warn("Unable to parse tracked parameter from {} for condition type {}", parameter, trackedCondition.getConditionType().getItemId());
                        }
                    });
                    if (!trackedParameters.isEmpty()) {
                        evalCondition = new Condition(definitionsService.getConditionType("booleanCondition"));
                        evalCondition.setParameter("operator", "and");
                        ArrayList<Condition> conditions = new ArrayList<>();
                        trackedParameters.forEach((key, value) -> {
                            Condition propCondition = new Condition(definitionsService.getConditionType("eventPropertyCondition"));
                            propCondition.setParameter("comparisonOperator", "equals");
                            propCondition.setParameter("propertyName", key);
                            propCondition.setParameter("propertyValue", value);
                            conditions.add(propCondition);
                        });
                        evalCondition.setParameter("subConditions", conditions);
                        if (persistenceService.testMatch(evalCondition, source)) {
                            trackedConditions.add(trackedCondition);
                        }
                    } else {
                        trackedConditions.add(trackedCondition);
                    }
                }
            }
        }
        return trackedConditions;
    }