private JsonValue varImpl()

in johnzon-jsonlogic/src/main/java/org/apache/johnzon/jsonlogic/JohnzonJsonLogic.java [676:708]


    private JsonValue varImpl(final JsonValue config, final JsonValue params) {
        switch (config.getValueType()) {
            case ARRAY:
                final JsonArray values = config.asJsonArray();
                if (values.isEmpty()) {
                    throw new IllegalArgumentException("var should have at least one parameter");
                }
                final JsonValue accessor = apply(values.get(0), params);
                switch (accessor.getValueType()) {
                    case NUMBER:
                        final int index = JsonNumber.class.cast(accessor).intValue();
                        final JsonArray array = params.asJsonArray();
                        final JsonValue arrayAttribute = index >= array.size() ? null : array.get(index);
                        return arrayAttribute == null ? (values.size() > 1 ? apply(values.get(1), params) : JsonValue.NULL) : arrayAttribute;
                    case STRING:
                        final JsonValue objectAttribute = extractValue(params, JsonString.class.cast(accessor).getString());
                        return objectAttribute == JsonValue.NULL && values.size() > 1 ? apply(values.get(1), params) : objectAttribute;
                    default:
                        throw new IllegalArgumentException("Unsupported var first paraemter: '" + accessor + "', should be string or number");
                }
            case STRING:
                return extractValue(params, JsonString.class.cast(config).getString());
            case NUMBER:
                final int index = JsonNumber.class.cast(config).intValue();
                final JsonArray array = params.asJsonArray();
                final JsonValue arrayAttribute = array.size() <= index ? null : array.get(index);
                return arrayAttribute == null ? JsonValue.NULL : arrayAttribute;
            case OBJECT:
                return varImpl(apply(config, params), params);
            default:
                throw new IllegalArgumentException("Unsupported configuration for var: '" + config + "'");
        }
    }