private SelectBuilder2 constructQuery()

in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/services/grafana/GrafanaServiceImpl.java [323:392]


    private SelectBuilder2 constructQuery(String streamKey, TimeRange range, SelectQuery query)
            throws NoSuchStreamException, NoSuchSymbolsException, SelectBuilder2.NoSuchFieldException, WrongTypeException, NoSuchTypeException {
        DXTickDB db = timebase.getConnection();
        DXTickStream stream = db.getStream(streamKey);
        if (stream == null) {
            throw new NoSuchStreamException(streamKey);
        }
        checkSymbols(stream, query.getSymbols());
        SelectBuilder2 selectBuilder = SelectBuilder2.builder(db, stream)
                .setSymbols(query.getSymbols())
                .timeBetween(range.getFrom(), range.getTo());
        if (query.getFields() != null) {
            for (Map.Entry<String, List<TBField>> entry : query.getFields().entrySet()) {
                selectBuilder.type(entry.getKey())
                        .selectFields(entry.getValue().stream().map(TBField::getName).collect(Collectors.toList()));
            }
        }
        if (query.getFilters() != null) {
            for (Map.Entry<String, List<FieldFilter>> entry : query.getFilters().entrySet()) {
                Type type = selectBuilder.type(entry.getKey());
                for (FieldFilter fieldFilter : entry.getValue()) {
                    Type.Field field = type.field(fieldFilter.getFieldName());
                    switch (fieldFilter.getFilterType()) {
                        case EQUAL:
                            field.equalTo(fieldFilter.getValues().get(0));
                            break;
                        case NOTEQUAL:
                            field.notEqualTo(fieldFilter.getValues().get(0));
                            break;
                        case GREATER:
                            field.greaterThan(fieldFilter.getValues().get(0));
                            break;
                        case NOTGREATER:
                            field.notGreaterThan(fieldFilter.getValues().get(0));
                            break;
                        case LESS:
                            field.lessThan(fieldFilter.getValues().get(0));
                            break;
                        case NOTLESS:
                            field.notLessThan(fieldFilter.getValues().get(0));
                            break;
                        case IN:
                            field.equalTo(fieldFilter.getValues());
                            break;
                        case NULL:
                            field.isNull();
                            break;
                        case NOTNULL:
                            field.notNull();
                            break;
                        case STARTS_WITH:
                            field.startsWith(fieldFilter.getValues().get(0));
                            break;
                        case ENDS_WITH:
                            field.endsWith(fieldFilter.getValues().get(0));
                            break;
                        case CONTAINS:
                            field.contains(fieldFilter.getValues().get(0));
                            break;
                        case NOT_CONTAINS:
                            field.notContains(fieldFilter.getValues().get(0));
                            break;
                        default:
                            throw new UnsupportedOperationException();
                    }
                }
            }
        }
        return selectBuilder;
    }