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

com.outbrain.ob1k.client.HttpInvocationHandler Maven / Gradle / Ivy

The newest version!
package com.outbrain.ob1k.client;

import static com.google.common.base.Preconditions.checkNotNull;

import com.outbrain.ob1k.client.endpoints.AbstractClientEndpoint;
import com.outbrain.ob1k.client.targets.TargetProvider;
import com.outbrain.ob1k.http.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Map;

/**
 * @author aronen
 */
class HttpInvocationHandler implements InvocationHandler {

  private static final Logger logger = LoggerFactory.getLogger(HttpInvocationHandler.class);

  private final HttpClient client;
  private final Map endpoints;
  private final TargetProvider targetProvider;

  HttpInvocationHandler(final TargetProvider targetProvider, final HttpClient client, final Map endpoints) {

    this.client = checkNotNull(client, "client may not be null");
    this.targetProvider = checkNotNull(targetProvider, "targetProvider may not be null");
    this.endpoints = checkNotNull(endpoints, "endpoints may not be null");
  }

  @Override
  public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {

    if ("close".equals(method.getName()) && method.getParameterTypes().length == 0) {
      client.close();
      logger.debug("client {} is closed.", targetProvider.getTargetLogicalName());
      return null;
    }

    final AbstractClientEndpoint endpoint = endpoints.get(method);
    return endpoint.invoke(targetProvider, args);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy