public boolean testEventPattern()

in common/src/main/java/org/apache/rocketmq/eventbridge/tools/pattern/PatternEvaluator.java [107:155]


    public boolean testEventPattern(JsonObject eventObject) {
        Map<String, JsonElement> specAttrs = new HashMap<>();
        Map<String, JsonElement> extensionsAttrs = new HashMap<>();
        Object dataObj = null;

        for (final Map.Entry<String, JsonElement> eventEntry : eventObject.entrySet()) {
            String key = eventEntry.getKey();

            if (PatternEvaluatorBuilder.CLOUDEVENTS_DATA_KEY.equals(key)) {
                dataObj = eventEntry.getValue();
                continue;
            }

            if (EventBridgeEvent.getAttributeKeys()
                .contains(key)) {
                specAttrs.put(key, eventEntry.getValue());
                continue;
            }

            if (AppConfig.getGlobalConfig()
                .getEventExtensionKeys()
                .contains(key)) {
                extensionsAttrs.put(key, eventEntry.getValue());
                continue;
            }

            // No need to handle other fields, since we have already validate the event format
        }

        if (!evaluateSpecAttr(specAttrs)) {
            return false;
        }

        if (!evaluateExtensionAttr(extensionsAttrs)) {
            return false;
        }

        if (!hasDataPattern()) {
            // No need to filter by data
            return true;
        }

        if (dataObj == null) {
            // No data can be used to match the data rule
            return false;
        }

        return evaluateData(dataObj.toString());
    }