com.outbrain.ob1k.http.utils.ComposableFutureAdapter Maven / Gradle / Ivy
The newest version!
package com.outbrain.ob1k.http.utils;
import com.ning.http.client.ListenableFuture;
import com.ning.http.client.Request;
import com.outbrain.ob1k.concurrent.*;
import com.outbrain.swinfra.metrics.api.Counter;
import com.outbrain.swinfra.metrics.api.MetricFactory;
import java.util.concurrent.ExecutionException;
public class ComposableFutureAdapter {
public interface Provider {
ListenableFuture provide();
}
public static ComposableFuture fromListenableFuture(final Provider provider, final MetricFactory metricFactory, final String host) {
return ComposableFutures.build(new Producer() {
@Override
public void produce(final Consumer consumer) {
final Counter counter;
if (metricFactory != null) {
counter = metricFactory.createCounter("HttpClient", host);
counter.inc();
} else {
counter = null;
}
final ListenableFuture source = provider.provide();
source.addListener(new Runnable() {
@Override
public void run() {
try {
final T result = source.get();
consumer.consume(Try.fromValue(result));
} catch (final InterruptedException e) {
consumer.consume(Try.fromError(e));
} catch (final ExecutionException e) {
final Throwable error = e.getCause() != null ? e.getCause() : e;
consumer.consume(Try.fromError(error));
} finally {
if (counter != null) {
counter.dec();
}
}
}
}, ComposableFutures.getExecutor());
}
});
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy