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