All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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