in common/src/main/java/org/apache/rocketmq/eventbridge/tools/pattern/PatternConditionBuilder.java [128:168]
public PatternCondition build(final JsonElement jsonElement) {
if (!jsonElement.isJsonArray()) {
throw new InvalidEventPatternException(PatternErrorMessages.INVALID_NUMERIC_CONDITION);
}
final JsonArray numericArray = jsonElement.getAsJsonArray();
if (numericArray.size() != 2 && numericArray.size() != 4) {
throw new InvalidEventPatternException(
"Event pattern is not valid, reason: the numeric array value should have 2 or 4 elements");
}
NumericCondition condition = new NumericCondition();
final Iterator<JsonElement> iterator = numericArray.iterator();
while (iterator.hasNext()) {
final JsonElement operator = iterator.next();
final JsonElement data = iterator.next();
if (operator.isJsonPrimitive() && operator.getAsJsonPrimitive()
.isString() && data.isJsonPrimitive() && data.getAsJsonPrimitive()
.isNumber()) {
final double num = data.getAsJsonPrimitive()
.getAsDouble();
if (Double.compare(num, MAX_VAL) > 0 || Double.compare(num, MIN_VAL) < 0) {
throw new InvalidEventPatternException(PatternErrorMessages.INVALID_NUMERIC_CONDITION_VALUE);
}
final NumericOperators operatorExp = NumericOperators.getOperatorByExp(operator.getAsJsonPrimitive()
.getAsString());
if (operatorExp == null) {
throw new InvalidEventPatternException(PatternErrorMessages.UNRECOGNIZED_NUMERIC_CONDITION_EXP);
}
condition.addOperatorAndData(operatorExp, num);
continue;
}
throw new InvalidEventPatternException(PatternErrorMessages.UNRECOGNIZED_NUMERIC_CONDITION_VALUE);
}
return condition;
}