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

play.libs.ws.ahc.AhcWSRequest Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) from 2022 The Play Framework Contributors , 2011-2021 Lightbend Inc. 
 */

package play.libs.ws.ahc;

import com.fasterxml.jackson.databind.JsonNode;
import java.io.File;
import java.io.InputStream;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
import org.apache.pekko.stream.javadsl.Source;
import org.apache.pekko.util.ByteString;
import org.w3c.dom.Document;
import play.libs.ws.*;
import play.mvc.Http;

/** A Play WS request backed by AsyncHTTPClient implementation. */
public class AhcWSRequest implements WSRequest {
  private static WSBodyWritables writables = new WSBodyWritables() {};

  private final AhcWSClient client;
  private final StandaloneAhcWSRequest request;
  private final Function responseFunction = AhcWSResponse::new;
  private final Function converter =
      new Function() {
        public WSRequest apply(StandaloneWSRequest standaloneWSRequest) {
          final StandaloneAhcWSRequest plainAhcWSRequest =
              (StandaloneAhcWSRequest) standaloneWSRequest;
          return new AhcWSRequest(client, plainAhcWSRequest);
        }
      };

  AhcWSRequest(AhcWSClient client, StandaloneAhcWSRequest request) {
    this.client = client;
    this.request = request;
  }

  @Override
  public CompletionStage get() {
    return request.get().thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(BodyWritable body) {
    return request.patch(body).thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(String string) {
    return request.patch(writables.body(string)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(JsonNode jsonNode) {
    return request.patch(writables.body(jsonNode)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(Document doc) {
    return request.patch(writables.body(doc)).thenApply(responseFunction);
  }

  @Deprecated
  @Override
  public CompletionStage patch(InputStream inputStream) {
    return request.patch(writables.body(() -> inputStream)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(File file) {
    return request.patch(writables.body(file)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage patch(
      Source>, ?> bodyPartSource) {
    return request.patch(writables.multipartBody(bodyPartSource)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(BodyWritable body) {
    return request.post(body).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(String string) {
    return request.post(writables.body(string)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(JsonNode json) {
    return request.post(writables.body(json)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(Document doc) {
    return request.post(writables.body(doc)).thenApply(responseFunction);
  }

  @Override
  @Deprecated
  public CompletionStage post(InputStream is) {
    return request.post(writables.body(() -> is)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(File file) {
    return request.post(writables.body(file)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage post(
      Source>, ?> bodyPartSource) {
    return request.post(writables.multipartBody(bodyPartSource)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(BodyWritable body) {
    return request.put(body).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(String string) {
    return request.put(writables.body(string)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(JsonNode json) {
    return request.put(writables.body(json)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(Document doc) {
    return request.put(writables.body(doc)).thenApply(responseFunction);
  }

  @Override
  @Deprecated
  public CompletionStage put(InputStream is) {
    return request.put(writables.body(() -> is)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(File file) {
    return request.put(writables.body(file)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage put(
      Source>, ?> bodyPartSource) {
    return request.put(writables.multipartBody(bodyPartSource)).thenApply(responseFunction);
  }

  @Override
  public CompletionStage delete() {
    return request.delete().thenApply(responseFunction);
  }

  @Override
  public CompletionStage head() {
    return request.head().thenApply(responseFunction);
  }

  @Override
  public CompletionStage options() {
    return request.options().thenApply(responseFunction);
  }

  @Override
  public CompletionStage execute(String method) {
    return request.setMethod(method).execute().thenApply(responseFunction);
  }

  @Override
  public CompletionStage execute() {
    return request.execute().thenApply(responseFunction);
  }

  @Override
  public CompletionStage stream() {
    return request.stream().thenApply(responseFunction);
  }

  @Override
  public WSRequest setMethod(String method) {
    return converter.apply(request.setMethod(method));
  }

  @Override
  public WSRequest setBody(BodyWritable bodyWritable) {
    return converter.apply(request.setBody(bodyWritable));
  }

  @Override
  public WSRequest setBody(String string) {
    return converter.apply(request.setBody(writables.body(string)));
  }

  @Override
  public WSRequest setBody(JsonNode json) {
    return converter.apply(request.setBody(writables.body(json)));
  }

  @Deprecated
  @Override
  public WSRequest setBody(InputStream is) {
    return converter.apply(request.setBody(writables.body(() -> is)));
  }

  @Override
  public WSRequest setBody(File file) {
    return converter.apply(request.setBody(writables.body(file)));
  }

  @Override
  public  WSRequest setBody(Source source) {
    return converter.apply(request.setBody(writables.body(source)));
  }

  /** @deprecated use addHeader(name, value) */
  @Deprecated
  @Override
  public WSRequest setHeader(String name, String value) {
    return converter.apply(request.addHeader(name, value));
  }

  @Override
  public WSRequest setHeaders(Map> headers) {
    return converter.apply(request.setHeaders(headers));
  }

  @Override
  public WSRequest addHeader(String name, String value) {
    return converter.apply(request.addHeader(name, value));
  }

  @Override
  public WSRequest setQueryString(String query) {
    return converter.apply(request.setQueryString(query));
  }

  /** @deprecated Use addQueryParameter */
  @Deprecated
  @Override
  public WSRequest setQueryParameter(String name, String value) {
    return converter.apply(request.addQueryParameter(name, value));
  }

  @Override
  public WSRequest addQueryParameter(String name, String value) {
    return converter.apply(request.addQueryParameter(name, value));
  }

  @Override
  public WSRequest setQueryString(Map> params) {
    return converter.apply(request.setQueryString(params));
  }

  @Override
  public StandaloneWSRequest setUrl(String url) {
    return converter.apply(request.setUrl(url));
  }

  @Override
  public WSRequest addCookie(WSCookie cookie) {
    return converter.apply(request.addCookie(cookie));
  }

  @Override
  public WSRequest addCookie(Http.Cookie cookie) {
    return converter.apply(request.addCookie(asCookie(cookie)));
  }

  private WSCookie asCookie(Http.Cookie cookie) {
    return new DefaultWSCookie(
        cookie.name(),
        cookie.value(),
        cookie.domain(),
        cookie.path(),
        Optional.ofNullable(cookie.maxAge())
            .map(Integer::longValue)
            .filter(f -> f > -1L)
            .orElse(null),
        cookie.secure(),
        cookie.httpOnly());
  }

  @Override
  public WSRequest addCookies(WSCookie... cookies) {
    return converter.apply(request.addCookies(cookies));
  }

  @Override
  public WSRequest setCookies(List cookies) {
    return converter.apply(request.setCookies(cookies));
  }

  @Override
  public WSRequest setAuth(String userInfo) {
    return converter.apply(request.setAuth(userInfo));
  }

  @Override
  public WSRequest setAuth(String username, String password) {
    return converter.apply(request.setAuth(username, password));
  }

  @Override
  public WSRequest setAuth(String username, String password, WSAuthScheme scheme) {
    return converter.apply(request.setAuth(username, password, scheme));
  }

  @Override
  public StandaloneWSRequest setAuth(WSAuthInfo authInfo) {
    return converter.apply(request.setAuth(authInfo));
  }

  @Override
  public WSRequest sign(WSSignatureCalculator calculator) {
    return converter.apply(request.sign(calculator));
  }

  @Override
  public WSRequest setFollowRedirects(boolean followRedirects) {
    return converter.apply(request.setFollowRedirects(followRedirects));
  }

  @Override
  public WSRequest setDisableUrlEncoding(boolean disableUrlEncoding) {
    return converter.apply(request.setDisableUrlEncoding(disableUrlEncoding));
  }

  @Override
  public WSRequest setVirtualHost(String virtualHost) {
    return converter.apply(request.setVirtualHost(virtualHost));
  }

  /**
   * @deprecated Use {@link #setRequestTimeout(Duration timeout)}
   * @param timeout the request timeout in milliseconds. A value of -1 indicates an infinite request
   *     timeout.
   */
  @Deprecated
  @Override
  public WSRequest setRequestTimeout(long timeout) {
    Duration d;
    if (timeout == -1) {
      d = Duration.of(1, ChronoUnit.YEARS);
    } else {
      d = Duration.ofMillis(timeout);
    }
    return converter.apply(request.setRequestTimeout(d));
  }

  @Override
  public WSRequest setRequestTimeout(Duration timeout) {
    return converter.apply(request.setRequestTimeout(timeout));
  }

  @Override
  public WSRequest setRequestFilter(WSRequestFilter filter) {
    return converter.apply(request.setRequestFilter(filter));
  }

  @Override
  public WSRequest setContentType(String contentType) {
    return converter.apply(request.setContentType(contentType));
  }

  @Override
  public Optional getAuth() {
    return request.getAuth();
  }

  @Override
  public Optional getBody() {
    return request.getBody();
  }

  @Override
  public Optional getCalculator() {
    return request.getCalculator();
  }

  @Override
  public Optional getContentType() {
    return request.getContentType();
  }

  @Override
  public Optional getFollowRedirects() {
    return request.getFollowRedirects();
  }

  @Override
  public Optional getDisableUrlEncoding() {
    return request.getDisableUrlEncoding();
  }

  @Override
  public String getUrl() {
    return request.getUrl();
  }

  @Override
  public Map> getHeaders() {
    return request.getHeaders();
  }

  @Override
  public List getHeaderValues(String name) {
    return request.getHeaderValues(name);
  }

  @Override
  public Optional getHeader(String name) {
    return request.getHeader(name);
  }

  @Override
  public Optional getRequestTimeout() {
    return request.getRequestTimeout();
  }

  @Override
  public Map> getQueryParameters() {
    return request.getQueryParameters();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy