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);
}