private Function extractArguments()

in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/FunctionsServiceImpl.java [304:357]


    private Function<GenericRecord, ExtendedArguments> extractArguments(GrafanaAggregation grafanaAggregation,
                                                                        SelectQuery.FunctionDef functionDef,
                                                                        long start, long end, long interval, String symbol,
                                                                        List<SelectQuery.TimebaseField> groupBy)
            throws ValidationException {

        ExtendedArguments arguments = new ExtendedArgumentsMap(start, end, interval, symbol, parseResultName(functionDef.getResultField()));

        // return fields initialization
        if (grafanaAggregation.returnFields().length > 1) {
            for (ReturnField returnField : grafanaAggregation.returnFields()) {
                arguments.setString(returnField.constantName(), functionDef.getResultFields().getOrDefault(returnField.constantName(),
                        returnField.constantName()));
            }
        }

        // constant arguments initialization
        for (ConstantArgument constantArgument : grafanaAggregation.constantArguments()) {
            String value = functionDef.getConstantArgs().getOrDefault(constantArgument.name(), constantArgument.defaultValue());
            try {
                arguments.set(constantArgument, value);
            } catch (NumberFormatException exc) {
                throw new ConstantParseException(constantArgument, value);
            }
        }

        // field arguments initialization
        for (int i = 0; i < grafanaAggregation.fieldArguments().length; i++) {
            FieldArgument fieldArgument = grafanaAggregation.fieldArguments()[i];
            SelectQuery.FieldArg fieldArg = functionDef.getFieldArgs().get(i);
            if (fieldArg.getField() != null) {
                arguments.setString(fieldArgument.name(), fieldArg.getField().getName());
            } else if (fieldArg.getFunction() != null) {
                if (fieldArg.getFunction().getResultFields() != null && !fieldArg.getFunction().getResultFields().isEmpty()) {
                    // suppose, that we do have only one result field selected
                    fieldArg.getFunction().getResultFields().forEach((key, value) -> arguments.setString(fieldArgument.name(), value));
                } else {
                    arguments.setString(fieldArgument.name(), fieldArg.getFunction().getResultField());
                }
            } else {
                throw new ValidationException("Not valid definition of function " + functionDef.getId());
            }
        }

        if (grafanaAggregation.symbolRequired()) {
            if (checkSymbol(functionDef.getId(), symbol, groupBy)) {
                return record -> {
                    arguments.setSymbol(record.getValue("symbol").charSequenceValue().toString());
                    return arguments;
                };
            }
        }
        return record -> arguments;
    }