public ResponseEntity select()

in java/ws-server/src/main/java/com/epam/deltix/tbwg/webapp/controllers/TimebaseController.java [140:196]


    public ResponseEntity<StreamingResponseBody> select(@Valid @RequestBody(required = false) SelectRequest select, Principal user, OutputStream outputStream) {
//        ResponseEntity<StreamingResponseBody> entity = checkAuthentication(authSettings);
//        if (entity != null)
//            return entity;

        if (select == null)
            select = new SelectRequest();

        if (select.streams == null)
            return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);

        ArrayList<DXTickStream> streams = new ArrayList<>();
        for (String streamId : select.streams) {
            DXTickStream stream = service.getStream(streamId);
            if (stream != null)
                streams.add(stream);
        }

        if (streams.isEmpty())
            return ResponseEntity.notFound().build();

        HashSet<IdentityKey> instruments = null;

        if (select.symbols != null) {
            instruments = new HashSet<>();

            for (DXTickStream stream : streams)
                Collections.addAll(instruments, match(stream, select.symbols));
        }

        SelectionOptions options = new SelectionOptions();
        options.channelQOS = ChannelQualityOfService.MIN_INIT_TIME;
        options.reversed = select.reverse;
        options.raw = true;

        final long startIndex = select.offset < 0 ? 0 : select.offset;
        final long endIndex = startIndex + select.rows - 1; // inclusive

        DXTickStream[] tickStreams = streams.toArray(new DXTickStream[streams.size()]);

        long startTime = select.getStartTime(TimebaseServiceImpl.getEndTime(tickStreams));

        TickCursor messageSource = service.getConnection().select(
                startTime,
                options,
                select.types,
                collectCharSequence(collect(instruments)),
                tickStreams);

        LOGGER.log(LogLevel.INFO, "SELECT * FROM " + Arrays.toString(select.streams) + " WHERE MESSAGE_INDEX IN [" + startIndex + ", " + endIndex + "] " +
                "AND TYPES = [" + Arrays.toString(select.types) + "] AND ENTITIES = [" + Arrays.toString(collect(instruments)) + "] " +
                "AND timestamp [" + GMT.formatDateTimeMillis(startTime) + ":" + GMT.formatDateTimeMillis(select.getEndTime()) + "]");

        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .body(new MessageSource2ResponseStream(messageSource, select.getEndTime(), startIndex, endIndex));
    }