public PatternCondition build()

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