public ResponseEntity export()

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


    public ResponseEntity<StreamingResponseBody> export(@Valid @RequestBody(required = false) ExportStreamsRequest select, Principal user, OutputStream outputStream) {
        if (select == null)
            select = new ExportStreamsRequest();

        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())
            //noinspection unchecked
            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 = select.rows < 0 ? -1 : 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);

        Interval periodicity = streams.size() == 1 ? streams.get(0).getPeriodicity().getInterval() : null;

        RecordClassDescriptor[] descriptors = TickDBShell.collectTypes(streams.toArray(new TickStream[streams.size()]));

        return getExportResponse(messageSource, startTime, select.getEndTime(), startIndex, endIndex, periodicity,
                select.types, collect(instruments), descriptors, select.streams);
    }