From 184327f7234099b2e53d960a49c53b64eef2591b Mon Sep 17 00:00:00 2001 From: Hammy Date: Sat, 5 Jun 2021 03:03:54 +0100 Subject: [PATCH] Add Basic MyWaifuClient.java This class will be the main entry point for Users who wish to use this wrapper --- .../java/org/goudham/me/MyWaifuClient.java | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/main/java/org/goudham/me/MyWaifuClient.java diff --git a/src/main/java/org/goudham/me/MyWaifuClient.java b/src/main/java/org/goudham/me/MyWaifuClient.java new file mode 100644 index 0000000..e8a407e --- /dev/null +++ b/src/main/java/org/goudham/me/MyWaifuClient.java @@ -0,0 +1,127 @@ +package org.goudham.me; + +import org.goudham.me.api.MyWaifuWrapper; +import org.jetbrains.annotations.NotNull; + +import javax.net.ssl.SSLParameters; +import java.net.Authenticator; +import java.net.CookieHandler; +import java.net.ProxySelector; +import java.net.http.HttpClient; +import java.time.Duration; +import java.util.concurrent.Executor; + +/** + * A MyWaifuClient + * + *

Main entry point for retrieving information from MyWaifuList.

+ *

{@link MyWaifuWrapper} is utilised to make the API requests

+ *

Examples of such methods include: + *

  • {@link }
  • + *

    + */ +public class MyWaifuClient { + private final MyWaifuWrapper myWaifuWrapper; + private HttpClient httpClient; + + /** + * Creates an instance of MyWaifuClient + * + *

    See MyWaifuList for obtaining an API Key

    + * @param apiKey API Key to authorise API request + */ + MyWaifuClient(@NotNull String apiKey) { + myWaifuWrapper = new MyWaifuWrapper(apiKey); + } + + /** + * Creates an instance of {@link MyWaifuClient} with default {@link HttpClient} settings + * + * @param apiKey API Key to authorise API request + * @return {@link MyWaifuClient} + */ + public static MyWaifuClient createDefault(@NotNull String apiKey) { + MyWaifuClient myWaifuClient = new MyWaifuClient(apiKey); + myWaifuClient.setHttpClient(HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_2) + .followRedirects(HttpClient.Redirect.NORMAL) + .connectTimeout(Duration.ofSeconds(20)) + .build()); + + return myWaifuClient; + } + + /** + * Sets an instance of HttpClient + * + * @param httpClient HttpClient for executing API requests + */ + public void setHttpClient(HttpClient httpClient) { + this.httpClient = httpClient; + } + + /** + * Builder for MyWaifuClient + */ + public static class Builder { + private final String apiKey; + private final MyWaifuWrapper myWaifuWrapper; + private HttpClient.Builder httpClientBuilder; + + public Builder(String apiKey) { + this.apiKey = apiKey; + myWaifuWrapper = new MyWaifuWrapper(apiKey); + } + + public Builder withCookieHandler(CookieHandler cookieHandler) { + httpClientBuilder.cookieHandler(cookieHandler); + return this; + } + + public Builder withConnectTimeout(Duration duration) { + httpClientBuilder.connectTimeout(duration); + return this; + } + + public Builder withSslParameters(SSLParameters sslParameters) { + httpClientBuilder.sslParameters(sslParameters); + return this; + } + + public Builder withExecutor(Executor executor) { + httpClientBuilder.executor(executor); + return this; + } + + public Builder withFollowRedirects(HttpClient.Redirect policy) { + httpClientBuilder.followRedirects(policy); + return this; + } + + public Builder withVersion(HttpClient.Version version) { + httpClientBuilder.version(version); + return this; + } + + public Builder withPriority(int priority) { + httpClientBuilder.priority(priority); + return this; + } + + public Builder withProxy(ProxySelector proxySelector) { + httpClientBuilder.proxy(proxySelector); + return this; + } + + public Builder withAuthenticator(Authenticator authenticator) { + httpClientBuilder.authenticator(authenticator); + return this; + } + + public MyWaifuClient build() { + MyWaifuClient myWaifuClient = new MyWaifuClient(apiKey); + myWaifuClient.setHttpClient(httpClientBuilder.build()); + return myWaifuClient; + } + } +}