private VisitResult doVisit(
VisitorControlHandler visitorControlHandler,
LocalDataVisitorHandler localDataVisitorHandler,
RestUri restUri) throws RestApiException {
try {
visitorControlHandler.waitUntilDone();
throwIfFatalVisitingError(visitorControlHandler, restUri);
} catch (InterruptedException e) {
throw new RestApiException(Response.createErrorResponse(500, ExceptionUtils.getStackTrace(e), restUri, RestUri.apiErrorCodes.INTERRUPTED));
}
if (localDataVisitorHandler.getErrors().isEmpty()) {
Optional<String> continuationToken;
if (! visitorControlHandler.getProgress().isFinished()) {
continuationToken = Optional.of(visitorControlHandler.getProgress().serializeToString());
} else {
continuationToken = Optional.empty();
}
return new VisitResult(continuationToken, localDataVisitorHandler.getCommaSeparatedJsonDocuments());
}
throw new RestApiException(Response.createErrorResponse(500, localDataVisitorHandler.getErrors(), restUri, RestUri.apiErrorCodes.UNSPECIFIED));
}