Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [...]
- recover(
- // Get events from Elastic search
- VertxUtil.<GetResponse>withNewFuture(future ->
- client.prepareGet(req.bucketId(), IndexTypes.EVENT, req.eventId()).execute(completer(future))
- ).map(resp -> resp.isExists() ?
- // Success
- GetEventResponse.create(resp.getSourceAsString()) :
- // Event not found
- GetEventResponse.eventNotFound()
- ), e -> isIndexNotFound(e) ?
- // Recover from index not found
- Future.succeededFuture(GetEventResponse.bucketNotFound()) :
- // Unexpected exception, handle later
- Future.failedFuture(e)
- ).setHandler(
- // Send response
- reply(message)
- );
- [...]
- public static <Resp> Handler<AsyncResult<Resp>> responseDispatcher(Consumer<Throwable> errorHandler, Consumer<Resp> successHandler) {
- return resp -> {
- if (resp.succeeded())
- successHandler.accept(resp.result());
- else
- errorHandler.accept(resp.cause());
- };
- }
- public static <T> Future<T> withNewFuture(Consumer<Future<T>> f) {
- Future<T> future = Future.future();
- f.accept(future);
- return future;
- }
- public static <T> Future<T> recover(Future<T> future, Function<Throwable, Future<T>> f) {
- return withNewFuture(newF ->
- future.setHandler(responseDispatcher(
- e -> f.apply(e).setHandler(newF.completer()),
- newF::complete
- ))
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement